Конфликт банка OpenCL - потеря памяти / повреждение данных?

Заранее извиняюсь за неопределенность этого вопроса.

Фон:

Я пытаюсь написать морфологическую функцию обработки изображений в OpenCL. У меня есть __local буфер, который я использую для хранения данных для каждого пикселя (каждый пиксель представлен рабочим элементом, пока не развернут цикл). Кроме того, так как я начинаю тестировать, я использую только одну рабочую группу (изображение 8x8 пикселей, поэтому я могу вручную проверить результаты).

Проблема:

Есть случаи, когда данные из одного, двух, трех или даже четырех пикселей должны быть добавлены в буфер пикселей другого. Так как это смежные пиксели в одной рабочей группе, я уверен, что я вызываю локальные конфликты банка памяти. Это нормально, скорость не мой главный приоритет (пока!). Однако эти банковские конфликты, похоже, сбрасывают данные и даже портят данные. Я был очень осторожен, чтобы не переполнить и не переполнить буферы.

Итак, мой первый вопрос: возможно ли, что конфликты банков приводят к повреждению и потере данных? Спецификация Opencl, кажется, указывает на то, что операция должна сериализоваться, замедляя пропускную способность, но нет никаких упоминаний о потере данных.

Мой второй вопрос: помогите! - Что я могу с этим поделать?

Любое руководство будет с благодарностью - спасибо!

1 ответ

Может быть, при помощи префикса nvidia whitepaper (Scan) с помощью CUDA вы попадете на правильный путь. Это о all-prefix-sums algorithm, который is a good example of a computation that seems inherently sequential, but for which there is an efficient parallel algorithm.

all-prefix-sums operation превращает списки номеров [3,4,1,2] в их суммы: [0,3,7,8],

Я знаю, что статья посвящена CUDA, но я обнаружил, что полученные ядра очень похожи, так как обе технологии используют схожие концепции.

Надеюсь, статья поможет вам.

ура

Другие вопросы по тегам