2016-10-28 4 views
0

Я написал простой OpenCL-raycaster, где каждый поток представляет один пиксель. Конечно, некоторые потоки, особенно те, которые просто показывают пустое пустое, заканчиваются довольно быстро по сравнению с другими. Мой вопрос: являются ли используемые ядра доступными для других ядер для запуска после того, как они return, или все они освобождаются после того, как последняя из рабочих групп или даже вся программа завершена?OpenCL нить занятие

ответ

1

В OpenCL глобальный рабочий размер подразделяется на несколько рабочих групп (которые могут выполняться серийно или параллельно, вплоть до реализации, но независимо в любом случае). Размеры рабочих групп варьируются (например, от 32 до 256 элементов типичны), и вы также можете указать размер рабочей группы. Рабочая группа не заканчивается до тех пор, пока не будут выполнены все потоки в рабочей группе, поэтому интенсивная обработка в одном потоке в сочетании с обработкой света на соседних потоках может оставлять бездействующее оборудование. Однако из-за локальности (объекты в сравнении с пустым пространством) это, скорее всего, произойдет только на границе объектов. Кроме того, в рабочей группе некоторые потоки могут быть сгруппированы вместе и обработаны как SIMD, что также означает, что ветвление может привести к отсутствию аппаратного обеспечения (изучить «расхождение потоков»).