Заранее извиняюсь за неконкретность этого вопроса.
Задний план:
Я пытаюсь написать функцию обработки морфологических изображений в OpenCL. У меня есть буфер __local, который я использую для хранения данных для каждого пикселя (каждый пиксель представлен рабочим элементом, цикл еще не разворачивается). Кроме того, поскольку я нахожусь на ранней стадии тестирования, я использую только одну рабочую группу (изображение 8x8 пикселей, поэтому я могу вручную проверять результаты).
Проблема:
Бывают случаи, когда данные одного, двух, трех или даже четырех пикселей необходимо добавить в буфер пикселей другого. Поскольку это соседние пиксели в одной и той же рабочей группе, я уверен, что вызываю конфликты локальных банков памяти. Это нормально, скорость не является моим главным приоритетом (пока!). Однако эти конфликты банков, похоже, приводят к потере данных и даже повреждению данных. Я был очень осторожен, чтобы не переполниться и не переполнить буферы.
Итак, мой первый вопрос: возможно ли, что конфликты банков вызывают повреждение и потерю данных? Спецификация Opencl, кажется, указывает, что операция должна быть сериализована, что замедляет пропускную способность, но нет упоминания о потере данных.
Второй вопрос: Помогите! - Что я могу сделать по этому поводу?
Любое руководство будет принято с благодарностью - спасибо!