Эффективны ли / возможны ли параллельные записи в локальную память в opencl?
Я пытаюсь построить нейронную сеть на ПЛИС с использованием opencl. Чтобы передать слой персептронов вперед, я использую этот код, который выполняют все рабочие элементы в слое:
__local float Out[LAYER_SIZE];
for(int i=0; i < SizeOfLayer[LayerNumber-1]; i++)
sum += weights[i+weightStartIdx+global_id*SizeOfLayer[LayerNumber-1]] * Out[i+sumPrevNodes];
Out[sumPrevNodes+currentLayerSize+global_id] =sum;
В приведенном выше коде рабочие элементы записывают параллельно в массив Out. У меня такой вопрос: проблематично ли писать параллельно на локальной памяти? (я думаю, что уже есть определенная пропускная способность для локальной памяти), если да, есть ли способ записать результаты (скажем, 1000 персептрона, используя 1000 рабочих элементов) в локальной памяти параллельно? Проблема в том, что я сталкиваюсь с некоторыми сбоями при компиляции ядра для платы. Я не могу найти причину, но это в основном связано с чтением и записью из локальной памяти. На веб-сайте Intel я прочитал, что запись в локальную память должна выполняться последовательно с использованием (например) одного рабочего элемента.