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

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

Справочная информация:

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

Проблема:

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

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

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

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

1 Ответ

0 голосов
/ 05 мая 2011

может быть, техническая документация nvidia Префиксная сумма (сканирование) с помощью 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, но я обнаружил, что полученные ядра очень похожи на обе технологии используют сходные понятия.

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

Приветствия

...