Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Монте-Карло 6b2.doc
Скачиваний:
17
Добавлен:
17.08.2019
Размер:
1 Мб
Скачать
☆

1.6.4.Быстродействие простейшего алгоритма

Алгоритм, рассмотренный выше, хорошо демонстрирует основные идеи моделирования диффузии нейтронов через пластину методом Монте-Карло. Вместе с тем, он не является оптимальным, поскольку после завершения расчёта «своей» траектории вычислительные потоки останавливаются. Эффект иллюстрируют графики на рис. 3.4-3.5, показывающие зависимость времени счёта от количества нейтронов (вычислительных потоков), а также сравнение производительностей графического и центрального процессоров при выполнении этого алгоритма.

Вычислительная система, на которой были получены приводимые ниже результаты, состояла из четырёхядерного центрального процессора Intel Core 2 Quad Q9550 2.83 ГГц и графического процессора NVIDIA GeForce 8800 GTX, содержащего 16 потоковых мультипроцессоров и, соответственно, 128 скалярных процессоров.

Из рис. 3.4 видно, что время, затрачиваемое графическим процессором на расчёт, почти не зависит от количества запускаемых вычислительных потоков: при увеличении количества потоков в 4 раза, от 1024 до 4096, время счёта увеличилось только на 5.5 %. Это означает, что алгоритм из п. 3.2.3 не полностью задействует ресурсы графического процессора. Иначе дополнительные вычислительные потоки можно было бы запускать только за счёт пропорционального увеличения времени расчёта.

Рис. 3.4. Зависимость времени исполнения вычислительного ядра п. 3.2.3. от количества нейтронов (вычислительных потоков)

Рис. 3.5. Отношение времён исполнения вычислительного ядра п. 3.2.3 на CPU и GPU в зависимости от числа параллельных вычислительных потоков

Рис. 3.5 показывает, что производительность расчёта на GPU (то есть, в параллельном режиме) хотя и выше, чем на CPU, однако не на два порядка, как для многих других приложений (см., например, [6]-[7]). Преимущество GPU возрастает с увеличением количества вычислительных потоков, но даже при 4096 вычислительных потоках достигает только 18 раз.

Для сравнения, при выполнении теми же 4096 потоками генератора Mersenne Twister без моделирования диффузии нейтронов, GPU генерирует за единицу времени в 108 раз больше случайных чисел, чем центральный процессор. Это означает, что неоптимальный алгоритм моделирования понизил производительность графического процессора в 108 / 18 = 6 раз.

1.6.5.Возможность оптимизации простейшего алгоритма

Если принять производительность графического процессора при исполнении «чистого» генератора Mersenne Twister (без моделирования диффузии нейтронов) за 100 %, то получается, что алгоритм моделирования из п. 3.2.3 при 4096 вычислительных потоках снижает её до 17 % (18/108100 % = 17 %). Возможно, что на самом деле ресурсы GPU задействованы ещё в меньшей степени. Главной причиной является то, что

 Как только нейтрон выходит из пластины, связанный с ним вычислительный поток заканчивает свою работу. В результате, параллельные вычислительные потоки завершаются не одновременно, так что время работы GPU фактически совпадает со временем обработки нейтронов, находящихся внутри пластины наиболее долго. В конце расчёта бόльшая часть вычислительных потоков бездействует, что и приводит к неэффективному использованию ресурсов GPU.

Для оптимизации алгоритма необходимо задействовать все запускаемые вычислительные потоки от начала расчёта и до конца. Это требование, очевидно, является общим для всех алгоритмов на графических процессорах. В нашем примере оно может быть исполнено следующим образом.

 После выхода очередного нейтрона из пластины вычислительный поток не прекращает свою работу, а переходит к рассмотрению нового нейтрона, только что входящего в пластину. При этом:

 координата нейтрона устанавливается равной нулю;

 косинус отклонения траектории нейтрона  устанавливается равным 1;

 алгоритм, показанный на рис. 3.3, возвращается к п. 3.

 Для сохранения результатов обработки всех нейтронов каждый вычислительный поток потребует трёх дополнительных регистров GPU, в которые будет записывать суммарный окончательный вес отразившихся нейтронов и суммарный вес нейтронов, прошедших пластину, а также количество рассмотренных нейтронов.

Предложенная модификация алгоритма позволяет:

 задействовать все доступные параллельные вычислительные потоки до самого конца моделирования;

 синхронизировать обращения всех потоков к регистрам процессора и к видеопамяти.

Результаты моделирования диффузии нейтронов по модифицирован­ному алгоритму (текст нового вычислительного ядра приведён в Приложении) показаны на рис. 3.6.

Рис. 3.6. Производительность GPU без простаивания вычислительных потоков

Видно, что задействование всех вычислительных потоков в течение всего времени моделирования действительно позволило резко увеличить производительность графического процессора. Теперь при 4096 вычислительных потоках преимущество GPU над центральным процессором составило 127 раз, что практически совпадает количеством его параллельных скалярных процессоров (128).

Как показывает график на рис. 3.6., преимущество GPU над CPU существенно зависит от количества исполняемых вычислительных потоков, при увеличении их количества оно возрастает в несколько раз. Видно также, что преимущество в 128 раз, равное количеству скалярных процессоров в составе GPU (по сравнению с одним CPU) не является пределом и, вероятно, даже не близко к нему (например, в нашей реализации молекулярной динамики [6] преимущество достигало 600 раз). Это означает, что графический процессор эффективно оптимизирует вычисления с использованием конвейерной обработки данных, причём для её максимального задействования необходимо запускать на каждом мультипроцессоре больше вычислительных потоков, чем их было в рассмотренном примере (то есть больше, чем 128).