【问题标题】:magma_dpotrf_gpu gives segmentation faultmagma_dpotrf_gpu 给出分段错误
【发布时间】:2019-04-10 03:19:45
【问题描述】:

我有一个 cblas 和 lapack 代码,我正在尝试将其“转换”为 magma 代码以利用 GPU。 这是我运行良好的 CPU 代码:

cblas_dsyrk(CblasColMajor,CblasUpper,CblasTrans,n,m,1.0,A2,m, 0.0,C_theta,n);
cblas_dsyrk(CblasColMajor,CblasUpper,CblasTrans,n,m,1.0,A1,m,-1.0,C_theta,n);
clapack_dpotrf(CblasColMajor,CblasUpper,n,C_theta,n);

现在,对于 magma GPU 版本,我这样做了:

magma_dmalloc(&d_A1, m*n);
magma_dmalloc(&d_A2, m*n);
magma_dmalloc(&d_C_theta, n*n);

magma_dsetmatrix(m ,n, A1, m, d_A1, m, queue);
magma_dsetmatrix(m ,n, A2, m, d_A2, m, queue);
magma_dsetmatrix(n ,n, C_theta, n, d_C_theta, n, queue);

magma_dsyrk(MagmaUpper, MagmaTrans, n, m, 1.0, d_A2, m, 0.0, d_C_theta, n, queue);
magma_dsyrk(MagmaUpper, MagmaTrans, n, m, 1.0, d_A1, m, -1.0, d_C_theta, n, queue);
magma_int_t *info_potrf; 
magma_dpotrf_gpu(MagmaUpper, n, d_C_theta, n, info_potrf);

由于某种原因,最后一行给出了分段错误。我在这里做错了什么?一切似乎都是正确的。

【问题讨论】:

  • 您需要有一个支持info_potrf 指针的内存分配。而是做magma_int_t info_potrf;(即删除星号)并在最后一行将info_potrf更改为&info_potrf
  • 谢谢@RobertCrovella!我现在想通了。我来这里是为了回答我自己的问题,并看到了你的回答。正是如此!我担心 dsyrk 可能有问题,但问题要容易得多。非常感谢罗伯特!
  • @thejoker:请自己回答这个问题,这样它就可以离开未回答的队列
  • 完成@talonmies。谢谢!

标签: cuda lapack magma cblas


【解决方案1】:

@RobertCrovella 回答了该解决方案。

为了给info_potrf变量分配内存,需要去掉星号,并且在第二行,需要添加&来使用变量地址。 这是正确的方法:

magma_int_t info_potrf; 
magma_dpotrf_gpu(MagmaUpper, n, d_C_theta, n, &info_potrf);

【讨论】:

  • 这不是答案。请解释您为解决问题所做的工作。然后我会很高兴地支持它
  • 已修复@talonmies
  • 谢谢。这更有用
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
相关资源
最近更新 更多