magma_dpotrf_gpu给出分段错误

时间:2019-04-10 03:19:46

标签: cuda lapack magma cblas

我有一个cblas和lapack代码,我试图将它们“转换”为岩浆代码以利用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);

现在,对于岩浆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);

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

1 个答案:

答案 0 :(得分:1)

@RobertCrovella回答了解决方案。

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

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