Матрица OpenCL перемещает пример

Последняя версия:
Версия 1.1, 2009-05-13
Обновленный к новому API.
(Полная история редакций)
Требования сборки:
Mac OS X v10.6, Xcode 3.2
Требования во время выполнения:
Mac OS X v10.6

Этот пример показывает, как эффективно выполнить перемещение матрицы, составленной из M x N power-two элементы для архитектуры GPU, требующей, чтобы определенная память, адресующаяся, избежала конфликтов сегмента памяти.

Перемещение больших power-two матриц наивно может легко вызвать конфликты в блоке памяти, могущие severly влиять на производительность.

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

В этом примере 64 единицы работы выпущены на рабочую группу, которые индивидуально работают маленький 32x2 разделы для заполнения 32x32 субматрица (более чем 8 итераций). Заключительные 32 x 32 субматрицы перемещаются локально с помощью локальной памяти с дополнением одного столбца для предотвращения конфликтов в блоке памяти. Выполнение перемещения в локальной памяти позволяет чтения и пишет в глобальную память, которая будет объединена.

Дополнение дополнительного столбца используется для возмещения адресов записи, так, чтобы они не конфликтовали с запросами чтения.

Используя дополнение 32 (или любое нечетное кратное число GROUP_DIMX = 32) гарантирует, что чтения и записи для каждого элемента в глобальной памяти будут смещены и не воздействовать на тот же сегмент памяти/channel/port.

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

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