在CUBLAS中混淆行/列向量

时间:2013-08-22 15:07:44

标签: thrust cublas

我刚开始使用CUBLAS / CUDA编程。我主要使用矩阵和向量运算。我对CUBLAS中使用的向量的方向感到困惑。似乎行和列向量之间没有区别。因此,如果我使用level-2函数将矩阵与向量相乘,我如何指定向量的方向?它会一直被视为列向量吗?如果我想将列向量(nx1)乘以行向量(1xm)以生成矩阵(nxm),我是否应该将它们视为矩阵并使用3级函数进行乘法?

另外,我使用推力生成矢量,所以如果我将推力矢量(n个元素)传递给cublasCgemm以形成1xn或nx1矩阵(即行或列矢量)。如果我将cublasOperation_t设置为CUBLAS_OP_N,那么该向量是否会被视为1xn或nx1向量?

感谢。

1 个答案:

答案 0 :(得分:1)

所有数据都存储在单个指针中,即double*。它们按顺序存储在存储器中。行和列向量之间没有区别。单指针也用于2D数组。 CUBLAS为您提供了一个简单的定义来定位矩阵中的元素

#define IDX2F(i,j,ld) ((((j)-1)*(ld))+((i)-1))

其中i是行,j是列,ld是矩阵的前导维度。如果要在操作中使用完整矩阵的子矩阵,则使用ld

乘法(nx1)(1xm)=(nxm)由cublasDger函数执行。

cublasStatus_t cublasDger(cublasHandle_t handle,int m,int n,                            const double * alpha,                            const double * x,int incx,                            const double * y,int incy,                            double * A,int lda) 如果例如y是(kxm)矩阵的一部分,则使用incy=k