2012-07-17 4 views
0

Могу ли я создать pthreads и внутри каждого pthread я могу создать opencl-среду и вызвать одно и то же ядро. То, что я пытаюсь сделать, это запустить ядра opencl параллельно на одном устройстве. Это возможно?pthreads и opencl

Спасибо за ответ.

ответ

6

На первый взгляд эти швы не нужны.

Когда вы запускаете ядро ​​OpenCL, используя вызов API clEnqueueNDRange(), вы можете запустить столько ядер, сколько вам нужно; каждый в качестве своего потока на одном устройстве. Модель OpenCL состоит в том, что один Контекст/Очередь команд может запускать 100 - 1000 с небольшими потоками ядра на графическом процессоре.

+0

Спасибо за ответ. – user1459175

1

Ya as Tim указал, когда OpenCL поддерживает так много потоков/ядер, почему вы хотите войти в pthreads с opencl. Дальнейшие потоки на графическом процессоре очень легкие по сравнению с pthreads. Pthreads являются дорогостоящими и связаны с большими накладными расходами для переключения контекста, что может существенно снизить эффективность вашей работы.

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

+0

Запускает несколько ядер параллельно, поддерживаемых в 6970? Есть ли версия opencl, которую я должен использовать, причина, по которой я спрашиваю, я создал две очереди команд, и я не вижу ускорения, ну, я не ожидаю линейного ускорения, но потом снова .... Я использую opencl версию 1.1 , – user1459175

+0

Ну, я не вижу причин, почему несколько ядер не должны поддерживаться в 6970. Его немного сложно ответить на этот вопрос, но я бы попробовал (глупый, хотя) изменяющийся размер входных данных и проверить производительность. – Nike

+0

Спасибо попробуйте более крупные матрицы. Я попробовал матрицу транспонирования размером 1024 * 1024. – user1459175