Как известно, существуют WARP (в CUDA) и WaveFront (в OpenCL): http://courses.cs.washington.edu/courses/cse471/13sp/lectures/GPUsStudents.pdfЕсть ли гарантия, что все потоки в WaveFront (OpenCL) всегда синхронизированы?
4,1. SIMT Архитектура
...
перекос выполняет одну общую команду в то время, поэтому полная эффективность реализуется, когда все 32 нити перекоса соглашаются на их пути выполнения . Если потоки warp расходятся через зависимую от данных условную ветвь , warp последовательно выполняет каждый путь ветвления, отключая потоки , которые не находятся на этом пути, и когда все пути завершены, потоки сходятся к одному и тому же пути выполнения , Расхождение диверсии происходит только в пределах деформации; различные искажения выполняют независимо независимо от того, выполняются ли они общим или непересекающимся кодом путей.
Архитектура SIMT сродни SIMD (Single Instruction, Multiple Data) организациям векторов в том, что одна команда управляет несколькими элементами обработки. Ключевым отличием является то, что организации SIMD vector раскрывают ширину SIMD для программного обеспечения, тогда как инструкции SIMT определяют поведение выполнения и ветвления одного потока .
- WaveFront в OpenCL: https://sites.google.com/site/csc8820/opencl-basics/opencl-terms-explained#TOC-Wavefront
Во время выполнения первого волнового фронта посылается в блок вычислений, чтобы перспективе, то второй фронт волны передается в блок вычислений, и так далее. Работы элементы в пределах одного волнового фронта выполнены параллельно и в замок шаги. Но различные волновые фронты выполняются последовательно.
Т.е. мы знаем, что:
нити в WARP (CUDA) - это SIMT-нити, которые всегда выполняет те же инструкции, в каждый момент времени и всегда будут оставаться синхронизированы - т.е.Нити WARP такие же, как lanes of SIMD (на CPU)
нити в WAVEFRONT (OpenCL) - это темы, которые всегда выполняется параллельно, но не обязательно все нити выполняют ту же самую инструкцию, и не обязательно все потоки синхронизированы
Но есть ли гарантия того, что все нити в WAVEFRONT всегда синхронизированы таким образом, как потоки в WARP или как полосы в SIMD?
Заключение:
- WAVEFRONT-нитка (элементы) всегда синхронизирована - шаг блокировки: «волновой фронт выполняет ряд рабочих-элементы в замке шага по отношению друг к другу. "
- WaveFront отображается на SIMD-блоке: "все рабочие элементы в волновом фронте идут к обеим путям управления потоком"
- И.Э. каждый WaveFront-нить (пункт) отображается на SIMD-полосная
Глава 1 OpenCL Архитектура и AMD Accelerated Parallel Processing
1.1 Терминология
...
Волновые фронты и рабочие группы - две концы epts, относящихся к вычислениям ядер , которые обеспечивают параллельность данных. A wavefront выполняет ряд рабочих элементов в шаг блокировки относительно каждого другой. Шестнадцать рабочих элементов выполняются параллельно по вектору единица, а весь волновой фронт покрыт четырьмя тактами. Это - это самый низкий уровень, на который может влиять управление потоком. Это означает, что если два рабочих элемента внутри волнового фронта идут по расходящимся путям потока управления, все рабочие элементы в волновом фронте идут по обоим путям потока управление.
- (страница-45) Глава 2 OpenCL Производительность и оптимизация для GCN устройств
- (страница-81) Глава 3 OpenCL Performance и оптимизация для Приборы на вечнозеленых и северных островах
также серии HD5000 и HD4000 amd имеют SIMD ширину 4, но размер волнового фронта 64. –