1

CUBLAS/CUDA プログラミングを始めたばかりです。私は主にこれを行列演算とベクトル演算で使用します。CUBLAS で使用されるベクトルの方向について、かなり混乱しています。行ベクトルと列ベクトルに違いはないようです。では、レベル 2 関数を使用して行列にベクトルを乗算する場合、ベクトルの向きを指定するにはどうすればよいでしょうか? 常に列ベクトルとして扱われますか? 行列 (nxm) を作成するために列ベクトル (nx1) を行ベクトル (1xm) に乗算する場合、それらを常に行列として扱い、乗算にレベル 3 関数を使用する必要がありますか?

また、ベクトルを生成するために推力を使用しているため、推力ベクトル (n 要素) を cublasCgemm に渡して 1xn または nx1 行列 (行ベクトルまたは列ベクトル) を形成します。cublasOperation_t を CUBLAS_OP_N に設定すると、そのベクトルは 1xn または nx1 ベクトルとして扱われますか?

ありがとう。

4

1 に答える 1

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

于 2013-08-22T15:33:02.770 に答える