В OpenCL возможно ли, чтобы система, состоящая из нескольких графических процессоров, неявно разделяла работу без явного разделения программистом рабочей нагрузки?
Например, скажем, у меня есть графический процессор, состоящий из 1 ядра SM 192, и я запускаю матричное умножение, которое работает нормально. Теперь я добавляю еще один такой же графический процессор, и OpenCL использует оба графических процессора для вычисления умножения матриц на нем, а не программиста, распределяющего рабочую нагрузку между каждым графическим процессором.
Неявная работа Multi GPU
Ответы:
Я не думаю, что OpenCL может делать это автоматически (по крайней мере, в 1.2), но есть некоторые оболочки OpenCL, которые могут автоматически обрабатывать несколько вычислительных устройств. Я не использовал OpenCL CodeBench
, но они утверждают, что у них есть балансировка нагрузки нескольких вычислительных устройств.
Вы можете объединить только память устройств и сделать это только с версией 2.0 opencl и выше.
Ядра ставятся в очереди команд и создаются с одним устройством (и привязаны к нему). Поэтому они могут работать только на одном устройстве. Но несколько очередей команд могут работать в общем контексте, что позволяет использовать неявную синхронизацию буферов.
Разделение работы не может быть выполнено неявно, поскольку во время выполнения нельзя знать, какой рабочий элемент обращается к какому адресу памяти.
После того, как вы напишете работающую оболочку для одного устройства, добавление поддержки нескольких графических процессоров не составит большого труда.