Одновременно запустить два разных алгоритма с OpenCL - PullRequest
0 голосов
/ 07 июня 2018

Я хочу запустить два разных алгоритма на одном устройстве одновременно, предполагая, что мое устройство имеет 2 вычислительных блока.Это возможно, просто создав 2 разных ядра, 2 программы и 2 очереди команд?

Я пытался проверить это, но кажется, что второе ядро ​​не работает, поэтому мне интересно, если этодаже возможно?

В Руководстве по программированию Nvidia OpenCL я читал, что:

"Для устройств с вычислительной способностью 2.x и выше,несколько ядер могут выполняться одновременно на устройстве, поэтому максимальное использование также может быть достигнуто за счет использования потоков для одновременного выполнения достаточного количества ядер. "

Теперь я не уверен, действительно ли это означает, что я могу запуститьнесколько РАЗНЫХ ядер или просто несколько экземпляров одного и того же ядра (и это были бы просто старые рабочие элементы).

Я также проверил, что мой Nvidia GeForce GT 525M имеет вычислительные возможности 2,1.

1 Ответ

0 голосов
/ 07 июня 2018

Да, вполне законно иметь несколько командных очередей на одном устройстве с разными ядрами.

Оба ядра должны обязательно выполняться, даже если устройство не поддерживает одновременное выполнение ядра (тогда они простозапустить последовательно).У вас может быть ошибка в вашем коде.Помните, что вам придется clFinish обе очереди команд независимо (или иметь событие для каждого вызова ядра).

Что может быть трудным, так это заставить два ядра работать одновременно.Даже если устройство поддерживает такое поведение на аппаратном уровне, ядра могут по-прежнему работать последовательно, если какого-либо из ресурсов недостаточно для их одновременного запуска.

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

...