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

StackOverflow https://stackoverflow.com/questions/5810401

Вопрос

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

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

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

PS My Dev Machine - 1 графический процессор, а моя тестовая машина в 4 графическом процессоре, поэтому мне нужно любое решение, чтобы иметь возможность справиться с динамическим количеством устройств (это также не помогает, что это различные вычислительные возможности, но это жизнь)

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top