我对 CUDA 相当陌生,想了解更多关于复数算术及其对速度的影响。
我需要为“j[]”数组中的所有元素求解以下复数方程,并将答案存储在“Ans[]”中:
Ans [0] = (2.0/((20.5*(j[0]*j[0]))+(5.55*j[0])+20));
Ans [1] = (2.0/((20.5*(j[1]*j[1]))+(5.55*j[1])+20));
...
...
...
Ans [n] = (2.0/((20.5*(j[n]*j[n]))+(5.55*j[n])+20));
由于我需要对“j”的所有元素执行相同的计算,因此我可以并行化此代码并让每个线程/块处理每个计算(blockIdx.x = 0 -> Ans [0] 等)据我所知,如果我对很多元素并行执行此操作,我应该能够看到速度的提高。然而,可以用一行 c++ 代码编写的内容在 GPU 中需要几行代码才能完成。
我的问题是,所有额外的代码行是否意味着更长的处理时间,因为它涉及在大量临时文件中保存中间值。如果是这样,当元素数量少于 1000 个时,在 GPU 中进行这种计算是否仍然有意义?(任意数)
方程:
C++ -> Ans [0] = (2.0/((20.5*(j[0]*j[0]))+(5.55*j[0])+20));
我的GPU版本:
int tid = blockIdx.x;
temp1[tid] = cuCmul(j[tid], j[tid]);
temp2[tid] = cuCmul(temp1[tid], make_cuDoubleComplex(20.5, 0));
temp3[tid] = cuCmul(j[tid], make_cuDoubleComplex(5.55, 0));
temp4[tid] = cuCadd(temp2[tid], temp3[tid]);
temp5[tid] = cuCadd(temp4[tid], make_cuDoubleComplex(20, 0));
Ans[tid] = cuCdiv(make_cuDoubleComplex(2.0, 0), temp5[tid]);
另外,请让我知道是否有更有效的方法来为 GPU 编写这个