Проще говоря, конфликт банков - это случай, когда какой-либо шаблон доступа к памяти не может распределить ввод-вывод между банками, доступными в системе памяти. Следующие примеры развивают концепцию: -
Предположим, у нас есть двумерный массив целых чисел 512x512, а в нашей системе DRAM или памяти содержится 512 банков. По умолчанию данные массива будут расположены таким образом, что arr [0] [0] переходит в банк 0, arr [0] [1] переходит в банк 1, arr [0] [2] в банк 2 .... arr [0] [511] переходит к банку 511. Для обобщения arr [x] [y] занимает номер банка y. Теперь некоторый код (как показано ниже) начинает доступ к данным в основном столбце, т.е. изменение x при сохранении постоянной y приведет к тому, что весь последующий доступ к памяти будет попадать в один и тот же банк - следовательно, конфликт банков.
int arr[512][512];
for ( j = 0; j < 512; j++ ) // outer loop
for ( i = 0; i < 512; i++ ) // inner loop
arr[i][j] = 2 * arr[i][j]; // column major processing
Такие проблемы, как правило, избегаются компиляторами путем буферизации массива или использования простого числа элементов в массиве.