Урок 18: Конфликты банков в shared memory
Shared memory работает быстро, но она разделена на 32 параллельных канала, называемых banks. Все 32 threads в warp могут читать одновременно за один шаг — но только если каждый обращается к своему, отдельному bank. Когда двое обращаются к одному и тому же bank, возникает bank conflict, и аппаратура
Представь 32 кассы в магазине и 32 клиента. Если каждый клиент идёт к своей кассе, все платят одновременно, быстро. Но если два клиента толпятся у одной кассы, один ждёт другого. Padding — это как сдвинуть очередь по диагонали, чтобы снова каждый клиент получил кассу для себя.
- bank
- Одна из 32 параллельных единиц памяти, составляющих shared memory. Слово по индексу i принадлежит bank i % 32.
- bank conflict
- Когда threads одного warp обращаются к разным адресам, попадающим в один bank, аппаратура сериализует их (n-канальный конфликт стоит в n раз больше времени).
- broadcast
- Когда все threads в warp читают в точности один и тот же shared-адрес, значение рассылается (broadcast) всем за один шаг — без штрафа.
- padding
- Добавление фиктивного столбца, tile[N][N+1], который сдвигает каждую строку на один bank, чтобы доступ к столбцу попадал на 32 разных banks.