2012-04-29 2 views
1

Я запускаю свою программу в кластере. Каждый узел имеет 2 графических процессора. Каждая задача MPI заключается в вызове функции CUDA.Запуск ядра CUDA на распределенной памяти с MPI

Мой вопрос в том, будут ли выполняться два процесса mpi на каждом узле, будет ли каждый вызов функции CUDA запланирован на разных графических процессорах или они будут работать на одном и том же? А что, если я запускаю 4 mpi задачи на каждом узле?

ответ

2

MPI и CUDA в основном ортогональны. Вам придется напрямую управлять настройкой MPI-процесса GPU. Для этого вычисление исключительного режима в значительной степени является обязательным для каждого графического процессора. Вы можете использовать разделенный коммуникатор с раскраской, чтобы обеспечить совместимость с процессором и GPU, как только каждый процесс найдет свободное устройство, на котором он может установить контекст.

Massimo Fatica от NVIDIA отправил useful code snippet на форумах NVIDIA некоторое время назад, которые могут вас заинтересовать.

+0

Стоит отметить, что в поточном/технологическом эксклюзивном режиме вычислений не всегда необходимо управлять графическими процессорами явно: довольно часто просто позволяя драйверу выбрать устройство, это будет трюк. – aland

+0

спасибо за ссылку фрагмента кода. Это было полезно. – zimbra314

+0

@aland. В моем случае это не похоже, что хенген также испытывает подобную вещь. – zimbra314

3

Каждая задача MPI вызывает одну функцию cuda, которая запланирована на любой выбранный вами графический процессор. Вы можете выбрать необходимый графический процессор, используя функцию cudaSetDevice(). В вашем случае, поскольку каждый узел содержит 2 графических процессора, вы можете переключаться между каждым графическим процессором с cudaSetDevice(0) и cudaSetDevice(1). Если вы не укажете GPU с помощью функции SetDevice и объединив его с задачей MPI rank, я считаю, что 2 задачи MPI будут запускать обе функции cuda на одном графическом процессоре по умолчанию (нумеруются как 0) поочередно. Кроме того, если вы выполняете 3 или более заданий mpi на каждом узле, вы наверняка будете иметь состояние гонки, так как 2 или более cuda-функции будут запускаться на одном GPU поочередно.

+0

Вы уверены, что оба cuda-функции используют то же устройство, что и устройство по умолчанию? Я бы предположил, что это должно быть самое быстрое неиспользуемое устройство, которое в случае 2 gpus заставит использовать оба. – zimbra314

+0

Я только что протестировал его самостоятельно, и независимо от того, сколько mpi-задач я создал, все они использовали Device 0 для вызовов cuda. Я не думаю, что есть какая-либо функция оптимизации, которая распределяет нагрузку, поскольку каждая задача MPI независима. Вы должны сделать это вручную с помощью CudaSetDevice. – chemeng

Смежные вопросы