【问题标题】:cublas AA' using GEMMcublas AA' 使用 GEMM
【发布时间】:2017-12-20 23:19:00
【问题描述】:

我正在尝试查找计算 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;
        }
    }

【问题讨论】:

  • 这是你昨天应该发布的问题,而不是“帮我找出以下 400 行代码中的段错误的原因”。
  • 这是在另一个之前发布的。
  • 然后更糟。规则和标准的存在是有原因的。跟随他们,每个人都会赢。
  • 我发布了整个代码,因为人们要求我实现了什么。还指出了错误在哪里...无论如何我删除了帖子并且仍在努力使用 cublas 库。谢谢

标签: cublas


【解决方案1】:

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

无论如何: 他们将其定义如下:

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

对于数据初始化: 诠释我; 整数 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 矩阵。

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 2018-07-09
    • 2019-01-01
    • 2016-03-31
    • 2014-03-29
    • 2014-04-11
    • 2016-09-25
    • 2013-03-04
    • 2016-03-15
    相关资源
    最近更新 更多