我已经在CUDA中构建了一个基本内核,以对两个复杂向量进行逐元素向量-向量乘法。内核代码插入(multiplyElementwise)下面。它工作正常,但是由于我注意到在CUBLAS或CULA之类的库中优化了其他看似直接的操作(例如缩放矢量),所以我想知道是否可以通过库调用替换我的代码?令我惊讶的是,CUBLAS和CULA都没有此选项,我试图通过使向量之一成为对角矩阵向量乘积的对角线来伪造它,但是结果确实很慢。
作为最后的解决方法,我尝试multiplyElementwiseFast通过将两个向量加载到共享内存中然后从那里开始工作来自己优化该代码(请参见下文),但这比我的原始代码慢。
所以我的问题是:
multiplyElementwise)吗?任何帮助将不胜感激!
__global__ void multiplyElementwise(cufftComplex* f0, cufftComplex* f1, int size)
{
const int i = blockIdx.x*blockDim.x + threadIdx.x;
if (i < size)
{
float a, b, c, d;
a = f0[i].x;
b = f0[i].y;
c = f1[i].x;
d = f1[i].y;
float k;
k = a * (c + d);
d = d * (a + b);
c = c * (b - a);
f0[i].x = k - d; …Run Code Online (Sandbox Code Playgroud)