Скажем, у нас есть 16 потоков, выполняющихся на блоке 1, и еще 16 потоков, выполняющихся на блоке 2.Совместный доступ к блокам в CUDA?
Каждый поток читает 1 double из памяти: 16 потоков на блоке 1 нужно читать 16 удвоений по адресам памяти 0- 127 и 16 потоков на блоке 2 необходимо читать с адресов 128-255.
Я знаю, что память, читаемая для 16 потоков на блоке 1, может быть выполнена в одной транзакции памяти из-за совместного доступа.
Мой вопрос в том, когда мы рассматриваем эти два блока, сколько нам требуется транзакций памяти, один или два? Другими словами, возможен ли доступ к памяти разными блоками одновременно?
И, кроме того, в описанном вами сценарии не будет никакой пользы. Коалесценция расширяется до максимального размера строки кеша L1, то есть 128 байт. Два запроса по 128 байт будут обрабатываться в двух транзакциях независимо от того, происходят ли они из одного или двух блоков. 16 потоков, выровненных по соседству с двойными, даст вам максимальную возможную совместную выгоду. –