Возникают ли конфликты банков на оборудовании, отличном от GPU?

В этом сообщении в блоге объясняется, как конфликты банка памяти убивают производительность функции транспонирования.

Теперь я не могу не задаться вопросом: происходит ли это на "нормальном" процессоре (в многопоточном контексте)? Или это специфично для CUDA/OpenCL? Или это даже не появляется в современных процессорах из-за относительно больших размеров кеша?

Ответ 1

Были банковские конфликты с самых ранних процессоров обработки векторов с 1960-х годов Это вызвано чередованием памяти или многоканальным доступом к памяти.

Доступ к чередованной памяти или MCMA решает проблему для замедления доступа к ОЗУ, путем постепенного доступа к каждое слово памяти из разных банков или по разным каналам. Но есть побочный эффект, доступ к памяти из одного и того же банка занимает больше времени, чем доступ к памяти из соседнего банка.

Из Википедии в 1980 году Cray 2 http://en.wikipedia.org/wiki/Cray-2

"Базы основной памяти были расположены в квадрантах, к которым можно было получить доступ одновременно, позволяя программистам разбросать свои данные по памяти, чтобы получить более высокий parallelism. Недостатком этого подхода является то, что затраты на настройку разброса/сбора блок в процессоре переднего плана был довольно высоким. Страйкие конфликты, соответствующие количеству банков памяти, понесли ограничение производительности (латентность), как это иногда случалось в алгоритмах на основе FFT на основе 2. Поскольку Cray 2 имел гораздо большую память, чем Cray 1 или X-MP, эту проблему легко устранить, добавив лишний неиспользуемый элемент в массив, чтобы распространить работу"