线程块数之间的关系

eri*_*ess 0 cuda

这段代码来自一本名为cuda的书

#include "../common/book.h"
#define N (33 * 1024)

__global__ void add( int *a, int *b, int *c ) {
    int tid = threadIdx.x + blockIdx.x * blockDim.x;
    while (tid < N) {
        c[tid] = a[tid] + b[tid];
        tid += blockDim.x * gridDim.x;
    }  
}

                   .
                   .
                   .
add<<<128,128>>>( dev_a, dev_b, dev_c );
Run Code Online (Sandbox Code Playgroud)

33*1024 = 33792

128*128 = 16384

33792> 16384

那么,在这种情况下,我是否可以增加每个块的线程数来运行?

stu*_*hlo 5

注意while循环体中的第二个命令,即tid += blockDim.x * gridDim.x;.它甚至可以用于比16384更大的阵列.

ID为0的
线程对位置0,16384,32768中的数组项进行求和.... ID为1的线程对位置1,16385,32769中的数组项进行求和,...

  • @ user916933`tid`只是变量,每个线程都有自己的变量.在开始时它保留每个启动线程的唯一ID,即它具有从0到16383的值.之后,它用于保持每个线程访问的索引但不修改线程的"真实"ID. (2认同)
  • @ user916933这是无限的.在`add <<< 128,128 >>>(dev_a,dev_b,dev_c);`你启动16384个线程,并且根据N,每个线程总和为零,一个或多个数字. (2认同)