c++ - ipiv magma_getrs_gpu 上的双重释放或损坏(输出)
问题描述
我有以下代码:
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 不同,在岩浆中,要ipiv
为dgetrs_gpu
我们创建之前必须使用dgetrf_gpu
.
所以解决方案只是在函数 dgetrs_gpu 之前添加以下行:
magma_int_t info_getrf;
magma_dgetrf_gpu(Ngaps, Ngaps, d_M, Ngaps, h_ipiv, &info_getrf);
推荐阅读
- sql - 使用另一个表中的标识符更新表中的值 (SQL)
- flutter - Flutter 中 PageView 的默认曲线行为是什么?
- c# - 如何在运行时创建结构并将 byte[] 指针转换为创建的结构?
- html - 使 mat-icon 适合容器 div
- javascript - 如何在不造成段落间隙的情况下正确地使用hypenate?
- ios - 如果未单击 button1,则禁用 button2
- visual-studio-2019 - 命名空间“Microsoft.AspNetCore”中不存在类型或命名空间名称“Mvc”。如何修复此“下面的屏幕截图”
- rust - 为什么运行时实现者应该避免枚举链上的 EnumerableStorageMap 存储条目?
- php - mPDF 使用 PHP 7.0.32 生成空白 PDF
- hyperledger-fabric - 每条八卦消息是否都带有对等方的 x.509 证书?