Subash_e-et-t Ответов: 1

Реализация MultiGPU в расчете 2 миллионов частиц


Я хочу увеличить вычисление числа частиц. До сих пор я могу вычислить 1 миллион частиц с помощью одного графического процессора. Можно ли увеличить вычисление частиц до 2 миллионов с помощью нескольких графических процессоров?

Mehdi Gholam

Это зависит от вашего дизайна, кодирования и аппаратных возможностей.

The_Inventor

Я говорю: "GO4IT" !!

1 Ответов

Рейтинг:
0

tugrulGtx

Если вы можете распараллелить алгоритм и сопоставить его с графическим процессором, то вы можете легко выполнить аналогичную задачу, чтобы сопоставить его с несколькими графическими процессорами.

Вы можете просто сделать это, распределив половину работы на GPU1, а другую половину-на GPU2. Просто нужно использовать потоки для перекрытия двух графических процессоров рабочей временной шкалы. Таким образом, вы можете сократить общее время вычислений на 50%, если графические процессоры одинаково эффективны.

Если графические процессоры разные, то вам нужно будет решить, какой графический процессор получает какой процент проблемы, и его не так уж трудно решить.

В зависимости от выбранного вами способа "разделяй и властвуй" ядра графических процессоров могут выглядеть по-разному или одинаково. Входные данные могут быть одинаковыми, выходные-разными. Кроме того, видимость памяти может быть проще при использовании единой памяти.

Например, я написал ядро nbody с грубой силой (для 64k частиц) для работы на двух графических процессорах Quadro-K420(cc3.0) и имел производительность 405 GFLOPS (60% от пика) из них.

Вещи, которые могут вам помочь:

- кооперативные ядра
- единая память
- явный выбор устройства по потокам на ядрах и буферных копиях

Если у вас есть Kepler cc3.0, как у меня, то вы можете попробовать старый способ (разделение ядер и буферов на каждое устройство и явное управление ими).

Что это за частицы такие? Жидкие частицы с низким диапазоном сил? Гравитационно взаимодействующие частицы, обладающие дальнодействующими силами? Совершенно другой сценарий? Требуется ли каждому "обновлению" сотни вызовов ядра с глобальной синхронизацией данных или всего несколько ядер с 1 синхронизацией данных между всеми рабочими элементами? Для некоторых алгоритмов увеличение числа графических процессоров не может линейно расти в производительности, в то время как некоторые имеют хорошее масштабирование. Сколько вычислений на байт вы делаете в ядре? Не использовать атомные бомбы?