Результаты просчётов
Наконец переходим к самому интересному к результатам просчётов. Долгий путь был проделан только лишь ради этого момента. Конечно в кластере ОмГТУ не так много узлов всего, а свободных было и того меньше. Мне позволили использовать не более 16 узлов одновременно. Или точнее 16 процессоров, которые расположены на 2-х узлах.
Результаты просчётов на кластере
Эксперименты по параллелизации решения уравнения Лапласа проводились на вычислительном кластере омского государственного технического университета (ОмГТУ), который состоит из 4-х вычислительных узлов и 1-го управляющего на базе серверов Hewlett Packard ProLiant DL160 G5.
Каждый узел содержит по два четырёхядерных процессора Intel Xeon X5472 3.0GHz Quad Core и по 8 Гб оперативной памяти PC2-5300 ECC. Сервера соединены между собой каналом в 1 гигабит. Узлы работают под управлением операционной системы Red Hat Enterprise Linux HPC.
Для начала задача была просто распараллелена на 6 и 16 процессоров для того чтобы проверить не будет ли такого падения производительности, что дальнейшие испытания не имели бы смысла. Результаты запусков можно увидеть в таблице 1.
Таблица 1. Параллельный метод конечных разностей
Размер задачи |
Количество ядер |
Период обмена |
Время полное, с |
Время вычислений, с |
Время синхронизации, с |
Кол-во итераций |
500х500 |
1 |
— |
37.225 |
37.225 |
— |
18441 |
500х500 |
6 |
2 |
28.206 |
7.54 |
20.666 |
23260 |
500х500 |
6 |
10 |
17.335 |
11.1 |
6.235 |
34500 |
500х500 |
6 |
25 |
19.975 |
16.3 |
3.675 |
50550 |
500х500 |
6 |
50 |
28.227 |
25.35 |
2.877 |
78600 |
1000х1000 |
1 |
— |
644.292 |
644.292 |
— |
78162 |
1000х1000 |
6 |
2 |
240.757 |
114.18 |
126.577 |
91048 |
1000х1000 |
6 |
10 |
173.04 |
141.33 |
31.71 |
112720 |
1000х1000 |
6 |
25 |
201.282 |
184.432 |
16.85 |
147150 |
1000х1000 |
6 |
50 |
279.875 |
268.028 |
11.847 |
213400 |
2000х2000 |
1 |
— |
7053.525 |
7053.525 |
— |
201641 |
2000х2000 |
6 |
2 |
2686.954 |
1265.074 |
1421.88 |
239966 |
2000х2000 |
16 |
2 |
1676.773 |
505.968 |
1170.805 |
249936 |
2000х2000 |
16 |
10 |
852.919 |
582.862 |
270.057 |
284070 |
2000х2000 |
16 |
25 |
791.305 |
657.401 |
133.904 |
322050 |
2000х2000 |
16 |
50 |
961.324 |
845.824 |
115.5 |
428050 |
4000х4000 |
1 |
— |
>86400 |
>86400 |
— |
— |
4000х4000 |
16 |
2 |
23569.43 |
4817.204 |
18752.224 |
525616 |
4000х4000 |
16 |
10 |
9208.121 |
5127.927 |
4080.194 |
509650 |
4000х4000 |
16 |
25 |
6116.352 |
5038.785 |
1077.567 |
488025 |
4000х4000 |
16 |
50 |
7118.494 |
6477.505 |
640.989 |
578200 |
Как видно из таблицы падения производительности не только не происходит, но, даже наоборот, параллелизация ускоряет решение задачи в десятки раз, особенно для матриц больших размерностей и на большом количестве ядер: 2000х2000, 4000х4000.
Результаты просчётов на компьютере
Следующий эксперимент был развёрнут на бытовых вычислителях — обычным компьютере и ноутбуке, которые были соединены между собой в локальную сеть. Самая слабая конфигурация: Intel Core i5-2410M 2.3 GHz Doublecore. Синхронизация осуществлялась через веб-сервер apache 2.0 при помощи языка php, передача на сервер так же осуществлялась скриптом php. На каждой машине было запущенно по два решателя, для каждого из которых было выделено по ядру. Веб-сервер был запущен на одной из машин, которая принимала участия в расчётах. Результаты второго эксперимента можно увидеть в таблице 2.
Таблица 2. Запуск экспериментов на бытовых вычислителях
Размер задачи |
Количество ядер |
Период обменов |
Время полное |
Время вычислений |
Время синхронизации |
Кол-во итераций |
500х500 |
1 |
— |
22.741 |
22.741 |
— |
11493 |
500х500 |
4 |
100 |
516.595 |
12.793 |
503.802 |
— |
500х500 |
4 |
200 |
440.042 |
20.696 |
419.346 |
63800 |
500х500 |
4 |
500 |
288.525 |
21.435 |
267.09 |
66000 |
500х500 |
4 |
1000 |
175.334 |
24.792 |
150.542 |
73000 |
1000х1000 |
1 |
— |
319.727 |
319.727 |
— |
52697 |
1000х1000 |
4 |
100 |
2957.047 |
180.433 |
2776.614 |
135900 |
1000х1000 |
4 |
200 |
3072.167 |
230.871 |
2841.296 |
174800 |
1000х1000 |
4 |
500 |
1810.272 |
373.831 |
1436.441 |
284000 |
1000х1000 |
4 |
1000 |
1049.794 |
391.383 |
658.411 |
297000 |
1500х1500 |
1 |
— |
1217.997 |
1217.997 |
— |
83073 |
1500х1500 |
4 |
200 |
2826.717 |
510.675 |
2316.042 |
160200 |
1500х1500 |
4 |
400 |
2160.194 |
556.366 |
1603.828 |
177200 |
1500х1500 |
4 |
800 |
866.670 |
517.652 |
349.018 |
127200 |
1500х1500 |
4 |
1000 |
533.209 |
289.175 |
244.034 |
87000 |
1500х1500 |
4 |
1600 |
245.769 |
144.195 |
101.574 |
41600 |
Из таблицы видно, что время синхронизации достаточно велико, из-за чего для малых задач смысла использовать такую параллелизацию нет. Второе, на что хотелось бы обратить внимание это количество итераций для матриц размера 1500х1500 и периода обмена больше 400. Из таблицы видно, что количество итераций уменьшается, чего быть не должно. Это как раз тот эффект, о котором упоминалось в главе 2. Когда решение подзадачи сходится к какому-то промежуточному решению. Когда период обмена слишком высок, то есть вероятность того, что подзадачи на всех решателях сойдутся к какому-то временному решению, после чего сработает критерий завершения и вычисления будут завершены.
Бонус
Бонус тем, кто дочитал — фотки из серверной. Сразу оговорюсь, что я там не заведую и к этому ужасу не причастен.