как назначить номер сегмента - сегментированное сокращение CUDA - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь понять код CUDA для сегментного сокращения. На изображении ниже показано, как следует выполнять упражнение на сокращение в каждом блоке. Нам нужно, чтобы каждый блок занимал сегмент входного массива и вычислял сумму: enter image description here

Вот фрагмент кода сокращения:

unsigned int segment = 2*blockDim.x*blockIdx.x;
unsigned int i = segment + 2*threadIdx.x;
for(unsigned int stride = 1; stride <= BLOCK_DIM; stride *= 2) {
  if(threadIdx.x%stride == 0) {
   input[i] += input[i + stride];
  }
  __syncthreads();
}

Я не могу понять, почему мы поставили:

unsigned int segment = 2*blockDim.x*blockIdx.x;
unsigned int i = segment + 2*threadIdx.x;

Откуда взялись 2?

Я новичок ie в cuda, поэтому, пожалуйста, помните мой вопрос.

...