使用推力将矩阵的每一行乘以向量的每个元素?

时间:2019-05-01 16:20:00

标签: c++ cuda thrust

我有一个大小为(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可以输出正确的结果。

但是,我想知道如何使用推力库来解决此问题并获得更好的性能。作为新手,我找不到合适的方法。

我还想学习如何改善自己的内核。

0 个答案:

没有答案