2015-05-09 9 views
0

в эти дни, я пытаюсь программой на мобильном GPU (Adreno)доступ и банк случайной память конфликт

алгоритма, что я использую для обработки изображений имеет «хаотичность» для доступа к памяти.

Он ссылается на некоторые пиксели в «фиксированном» диапазоне для фильтрации.

НО, я не могу точно знать, какой пиксель будет называться (зависит от изображения)

, насколько я понял. если банк локальной локальной сети с несколькими потоками вызывает конфликт банков. поэтому в моем случае это должно привести к конфликту в банке.

МОЙ вопрос: Могу ли я устранить конфликт банков в случайном доступе к памяти?

или я могу уменьшить их?

+0

adreno (qualcomm) не имеет ничего общего с CUDA, удаляя тег CUDA. –

ответ

0

Предполагая, что расстояния ваших случайно доступ пикселей как-то нормально распределено, вы могли бы думать о черепице изображения в подизображения.

Что я имею в виду: вместо того, чтобы работать с разрешением (если можно так выразиться) 1024x1024, у вас могут быть 4x4 изображения размером 256x256. Каждый из них хранится вместе в памяти, поэтому «ближний» доступ к пикселям остается в одном и том же объекте изображения. Только дистанционные операции должны иметь доступ к различным субимагам.

Второй вариант: вместо использования объектов CLImage попробуйте сохранить данные в массиве. Данные в массиве могут быть сохранены в Z-порядок кривой. Это также приводит к уменьшенному пространственному распределению (по сравнению с сортировкой рядов)

Но, конечно, это сильно зависит от размера изображения.

+0

зависимость очень сильна, она часто замедляет работу для более крупных изображений. AMD использует эту стратегию 2d со своими типами CLImage 2d, как и Nvidia. Всегда проверяйте, боятся ли такие стратегии или помогают! Он может не делать то, что вы ожидаете. –

+0

Я согласен с тем, что вы всегда сравниваете шаблон доступа к памяти. Но есть ли какие-либо жесткие данные, чтобы поддержать утверждение «infact оно часто замедляет вещи для более крупных изображений»? Какой порог определяет масштабность изображения? Или это просто предположение? –

0

Существует множество способов борьбы с банковскими конфликтами - размер элементов, с которыми вы работаете, шаги между строками и смещение координат по разным адресам памяти. Это никогда не будет так хорош, как неслучайный/конфликтный, хотя и так, что вы заметите, зависит от изображения - вы увидите значительно разные времена вычислений.

См http://cuda-programming.blogspot.com/2013/02/bank-conflicts-in-shared-memory-in-cuda.html