Cuda 岩浆断层

Cuda 岩浆断层,cuda,lapack,magma,cblas,Cuda,Lapack,Magma,Cblas,我有一个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,CblasU

我有一个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);

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

答案是@RobertCrovella

需要删除星号以便为info_potrf变量分配内存,并且在第二行,需要添加&以使用变量地址。 这是正确的方法:

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

你需要有一个内存分配来支持这个信息指针。取而代之的是岩浆信息;i、 e.删除星号,并在最后一行将info_potrf更改为&info_potrfThreak@RobertCrovella!我现在明白了。我来这里回答我自己的问题,看到了你的答案。正是这样!我担心dsyrk可能出了什么问题,问题就简单多了。非常感谢罗伯特@小丑:请你自己回答这个问题,这样它就可以离开未回答的队列Done@talonmies了。谢谢这不是答案。请解释一下你是怎么解决这个问题的。然后我会很高兴地投票给它的固定@Talonmies谢谢你。这更有用