我正在使用具有计算能力1.2的CUDA。我正在运行我的CUDA代码,其中包含通过添加其他2个矩阵计算的矩阵的每个元素。我正在通过一个Thread计算一个元素的值。我想知道是否有可能使用2个线程来计算单个值。如果有可能,任何人都可以告诉我如何使用相同块的2个不同线程来计算单个值吗?
答案 0 :(得分:0)
如果你需要计算
q = m2[i][k] + m2[(k+1)][j] + p1[(i-1)]*p1[k]*p1[j];
通过两个核心,使用更宽的变量+更少的迭代。 INT2:
__shared__ int2 m2[N][N],p1[N],q;
可以使用两个核心,但不能使用两个线程。如果你坚持两个线程,
qThread1 = m2[i][k] + m2[(k+1)][j] //in a kernel
...
...
...
qThread2 = p1[(i-1)]*p1[k]*p1[j] //in another kernel
然后你只需通过另一个线程将它们添加到q中。同步,内核启动开销,缓存利用率可能会降低性能以及降低指令级并行化。也许内核占用增加但不确定它是否容忍上述负面因素。