Как скомпилировать OpenCL-программы на нескольких ядрах? - PullRequest
2 голосов
/ 24 сентября 2019

OpenCL-программы / ядра собираются / компилируются во время выполнения с помощью функции clBuildProgram ().Моя программа динамически создает ядра для сборки и поэтому тратит значительное количество времени на их компиляцию.Конечно, учитывая, что существует много ядер, и они полностью независимы друг от друга, я хотел бы разделить эту работу на несколько ядер, как показано во фрагменте ниже:

Этот человек, кажется, имеет очень похожую проблему, но это было 6 лет назад, и решение на самом деле не является удовлетворительным.-6 (у меня 8 потоков), чего и следовало ожидать.Однако сборка OpenCL-ядер не дает.Кажется, что одновременно может быть только одно ядро.

Есть ли решение для этого?Я нахожусь на MacOS Atm, но я также был бы заинтересован в Linux / Windows.

Если нет, есть ли способ собрать OpenCL-ядра, которые не включают clBuildProgram (), но, например, gcc илианалогичное решение?

1 Ответ

2 голосов
/ 24 сентября 2019

(Я удивлен, что драйвер для вашей платформы еще не многопоточный. Вы уверены, что ваши вызовы действительно параллельны?)

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

  1. разветвляют новые процессы (или вызывают исполняемый файл помощника, который использует тот же набор устройств)
  2. , каждый подпроцесс вызывает clCreateProgramWithSource, а затем clBuildProgram
  3. дети вызывают clGetProgramInfo(...CL_PROGRAM_BINARIES...), чтобы извлечь двоичный файл и затем передать его обратно через файл, канал или другой межпроцессный обмен данными.

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

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