我有一个大小为(M,N)的复数矩阵A和一个大小为(1,M)的复数向量 x 。
我想计算diag( x )* A = [x1 * a11 ... x1 * a1N; ...; xM * aM1 ... xM * aMN]
我为这个问题写了自己的内核:
__global__ void v_dot_m(cuFloatComplex *d_res, cuFloatComplex *d_vec, cuFloatComplex *d_mat, int rows, int cols)
{
unsigned int tid = threadIdx.x;
unsigned int index = tid + blockIdx.x * blockDim.x;
if(index >= rows * cols)
return;
d_res[index] = cuCmulf(d_vec[int(index/cols)],d_mat[index]);
}
kerenl可以输出正确的结果。
但是,我想知道如何使用推力库来解决此问题并获得更好的性能。作为新手,我找不到合适的方法。
我还想学习如何改善自己的内核。