1

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

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

谢谢。

4

1 回答 1

1

所有数据都存储在单个指针中,即double*. 它们按顺序存储在内存中。行向量和列向量之间没有区别。单指针也用于二维数组。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.

于 2013-08-22T15:33:02.770 回答