CUDA:一个块或一个块的更多尺寸?

Mar*_* A. 4 c++ cuda matrix

我需要使用CUDA将矩阵的每个元素(基本上是浮点值的向量一次在内存中)平方根.

矩阵尺寸不是'先验',可能会有所不同[2-20.000].

我想知道:我可能会使用(如Jonathan建议的那样)一个块尺寸,如下所示:

int thread_id = blockDim.x * block_id + threadIdx.x;
Run Code Online (Sandbox Code Playgroud)

并检查thread_id是否低于rows*columns ...这非常简单直接.

但是,为什么我应该使用两个(甚至三个)块网格尺寸来执行这样的计算(请记住我有一个矩阵,而不是只有一个),是否有任何特殊的性能原因?

我正在考虑合并问题,比如让所有线程按顺序读取值

Bri*_*ler 6

尺寸仅为方便起见而存在,内部一切都是线性的,因此在效率方面没有任何优势.如上所示,避免计算(设计的)线性索引似乎要快一些,但线程的合并方式不会有任何差别.