我需要使用CUDA对矩阵的每个元素(基本上是内存中浮点值的向量)进行平方化。
矩阵尺寸不是'先验',可能会有所不同[2-20.000]。
我想知道:我可能会使用(如Jonathan建议的那样)一个块尺寸:
int thread_id = blockDim.x * block_id + threadIdx.x;
并检查thread_id是否低于rows * columns ...这非常简单直接。
但是有没有特别的性能原因为什么我应该使用两个(甚至三个)块网格尺寸来执行这样的计算(请记住我有一个矩阵)而不是一个?
我正在考虑合并问题,比如让所有线程按顺序读取值
答案 0 :(得分:6)
尺寸仅为方便起见而存在,内部一切都是线性的,因此无论在哪种方式上效率都没有优势。如上所示,避免计算(人为的)线性索引似乎要快一些,但线程的合并方式没有任何差别。