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

1

PyCUDA, несмотря на все его ошибки, обычно имеет очень хорошие примеры, предоставляемые с ней/загружаемые из вики. Но я не мог найти ничего в примерах или в документации (или беглого поиска Google), демонстрируя способ PyCUDA по распределению рабочих нагрузок на несколько устройств.

Может кто-нибудь намекнуть мне, что я должен делать, или указать на примеры?

Одна идея, которая появилась у меня в голове, заключалась в многопроцессорной обработке, создании пула из N процессов, каждый из которых привязан к одному устройству, а затем при вызове класса (у меня есть все мои функции gpu в отдельном классе, возможно, не самые лучшие идея, но она работает), она объединит многопроцессы. Насколько хороша/отсталая идея?

PS Моя машина для разработчиков - 1 GPU, а мой тестовый компьютер - на 4 GPU, поэтому мне нужно, чтобы какое-либо решение могло иметь дело с динамическим числом устройств (это также не помогает разным вычислительным возможностям, но thats life)

Теги:
cuda
pycuda
gpgpu
multi-gpu

1 ответ

1
Лучший ответ

Pycuda не имеет встроенной поддержки нескольких GPU, поскольку CUDA также не имеет встроенной поддержки нескольких GPU. Это изменится в CUDA 4.0, потому что API был изменен на потокобезопасный и многопроцессорный. Но у Пикуды еще нет такой поддержки AFAIK. Даже когда дело доходит, каждое устройство должно быть явно управляемым, а рабочая нагрузка разделена на вас. Нет автоматического распределения рабочей нагрузки или чего-либо подобного.

Для многопроцессорного GPU я обычно использовал mpi4py. Вы могли бы использовать многопоточную схему python, причем каждый поток открывает отдельный контекст в Pycuda. Что лучше всего работает, вероятно, будет зависеть от того, сколько требуется связи между устройствами.

  • 0
    Короче, нет. Спасибо за указатели!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню