Матрица OpenCL перемещает пример
| Последняя версия: | |
| Требования сборки: | 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.
Это важно для операций записи глобальной памяти, начиная со столбца главные индексы непоследовательны и могут вызвать конфликты в блоке памяти глобальной памяти.
Глобальная память читала, запросы будут воздействовать на последовательные индексы для главных строкой элементов и не будут конфликтовать.