Я изучаю программирование cuda и обнаружил, что существует несколько способов индексации сетки.
Что я не понимаю, так это то, как эти методы индексации отличаются друг от друга.
Это мои индексы:
1D сетка из 1D блоков
th=blockIdx.x *blockDim.x + threadIdx.x;
1D сетка 2D блоков
th=blockIdx.x * blockDim.x * blockDim.y + threadIdx.y * blockDim.x + threadIdx.x;
1D сетка 3D блоков
th =blockIdx.x * blockDim.x * blockDim.y * blockDim.z + threadIdx.z * blockDim.y * blockDim.x + threadIdx.y * blockDim.x + threadIdx.x;
В чем преимущество использования второго типа индексации относительно первого?
У меня также проблема с чтением этой информации:
«Максимальное количество нитей на блок составляет 1024, а максимальный размерный размер блока нитей (x, y, z) составляет (1024,1024,64)»
что это значит, что blockdim.z равен 64? там только 64 темы или 1024 * 64? Что делать, если я использую все направления? увеличивается число нитей, которые я могу использовать в сетке?