IPIV magma_getrs_gpu上的双免费或损坏(OUT)
double free or corruption (out) on 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不同,在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);
相关文章:
- 为什么会发生堆损坏
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 平均图像时图像损坏
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 为什么C中的通用链表中存储的数据已损坏
- IN, OUT, INOUT Parameters
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 即使使用调试编译标志,表达式也是"optimized out"
- C++双重释放或损坏(out)
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 使用全局声明的向量时,C++双重释放错误/损坏
- 赋值运算符上的双重释放或损坏(out)
- IPIV magma_getrs_gpu上的双免费或损坏(OUT)
- Sqlite3和pthread,双自由或损坏(out)
- 字符指针指向字符串,然后指向字符串数组。"./a.out"中的错误:malloc():内存损坏:0x0900c3b0***
- c++双重释放或损坏(out)错误
- C++:双倍免费或损坏(out)
- c++双精度释放或损坏(out):即使使用复制构造函数和赋值操作符
- "./a.out"中的错误:双重释放或损坏(!prev):0x096fb008***中止(核心转储)
- 析构函数给出我不明白的输出("./a.out"中的错误:双重释放或损坏(快速顶部):)