IPIV magma_getrs_gpu上的双免费或损坏(OUT)

double free or corruption (out) on ipiv magma_getrs_gpu

本文关键字:损坏 OUT 免费 getrs magma gpu IPIV      更新时间:2023-10-16

我有以下代码:

magma_int_t *h_ipiv;
magma_imalloc_cpu( &h_ipiv,  k);
for (i=0;i<k;i++){
    h_ipiv[i] = i;
}
magma_dgemm(MagmaTrans, MagmaNoTrans, N, n, m, 1.0, d_G2, m, d_A2, m, 0.0, d_QA, N, queue);
magma_dgemm(MagmaTrans, MagmaNoTrans, N, n, m, 1.0, d_G1, m, d_A1, m, -1.0, d_QA, N, queue);
magma_int_t info_getrs;
magma_dgetrs_gpu(MagmaTrans, Ngaps, n, d_M, N, h_ipiv, d_QA, N, &info_getrs);

在最后一行,我遇到了一个错误 double free or corruption (out): 0x000000001dd18540。我检查了magma_dgemm的数组,它们似乎是正确的。尺寸也是正确的,因为我在CPU Lapack版本上有此代码,并且它们是相同的。因此,错误似乎是在h_ipiv上,但是我对h_ipiv有问题不知道。

有什么想法?

我终于找到了解决方案。与Lapack不同,在Magma中为dgetrs_gpu创建ipiv,我们必须在dgetrf_gpu之前使用。

因此,解决方案只是在函数dgetrs_gpu之前添加以下行:

magma_int_t info_getrf;
magma_dgetrf_gpu(Ngaps, Ngaps, d_M, Ngaps, h_ipiv, &info_getrf);