cublas AA'使用GEMM

时间:2017-07-16 09:19:20

标签: cublas

我正在尝试查找计算AA'乘法,其中A是MxN 我正在尝试这个:

    double al =1.0f; // al =1
    double bet =0.0f; // bet =1
stat=cublasDgemm(handle,CUBLAS_OP_N,CUBLAS_OP_T,M,M,N,&al,d_A,M,d_Acopy,M,&bet,d_temp,M);

但它会产生细分错误I found this question but I couldn't follow

你知道我用双指针手动初始化矩阵,你可以帮我做AA吗?

double ** m = (double**)malloc(rows * sizeof(double*));

我也将值保存为以下

int i,j;
//initalize A
for (i=0;i<cols;i++)
    {
     for (j=0;j<rows;j++)
       {
        a[i][j]=A_example[i*rows+j];
        //a[i][j]=my_round(a[i][j]*10000.0)/10000.0;
        }
    }

1 个答案:

答案 0 :(得分:0)

我只是按照他们在示例中定义矩阵的方式重新定义了我的矩阵。我认为问题在于他们使用的数据布局。我无法使我的C矩阵适应cuBlas格式。

反正: 他们将其定义如下:

double *m=( double *) malloc (rows*cols* sizeof ( double ));

用于数据初始化:     int i;     int j;

for (i=0;i<k;i ++){
    for (j=0;j<n;j ++){
        printf (" %5.0f",a[ IDX2C(i,j,k )]);
        }

其中IDX2C是一个定义为:

的宏
# define IDX2C(i,j,ld) (((j)*( ld ))+( i ))

最后我能够找到AA'如下:

double al =1.0f; // al =1
double bet =0.0f; // bet =1
stat=cublasDgemm(handle,CUBLAS_OP_N,CUBLAS_OP_T,M,M,N,&al,d_A,N,d_A,M,&bet,d_temp,M);

其中A是MxN矩阵。