Значения, доступные только для чтения, которые одинаковы для всех потоков в блоке, вероятно, лучше всего хранить в массивах __constant__
. В некоторых архитектурах CUDA, таких как Fermi (SM 2.x), если вы объявляете аргумент массива или указателя с помощью ключевого слова C ++ const
и обращаетесь к нему равномерно в пределах блока (то есть индекс зависит только от blockIdx
, а не threadIdx
), то компилятор может автоматически выдавать ссылку на постоянную память.
Преимущество постоянной памяти в том, что она проходит через выделенный кеш, поэтому она не загрязняет L1, и если объем данных, к которым вы обращаетесь, на блок относительно невелик, после первого доступа в каждом блоке вы всегда должен попадать в кеш после начального обязательного промаха в каждом блоке потока.
Вам также не нужно будет использовать какую-либо общую память или переносить из глобальной в общую память.