C++调用BLAS ZHEMV函数时奇数维度触发Valgrind非法读警告
调用BLAS ZHEMV函数时奇数维度矩阵触发Valgrind无效读警告的问题
在C++中调用BLAS的ZHEMV函数实现厄米(自伴随)矩阵与复向量的乘法运算时,遇到如下问题:仅当矩阵维度为奇数时,Valgrind会抛出「Invalid read of size 8」警告。
触发警告的代码
#include <iostream> #include <vector> #include <complex> #include <cmath> #include <cstdlib> #include <cassert> typedef std::complex<double> Complex; typedef std::vector<Complex> cvector; extern "C" { int zhemv_(const char &uplo, int *n, Complex *alpha, Complex *v, int *lda, Complex *x, int *incx, Complex *beta, Complex *w, int *incy); } int main() { int Dim; int ld = 1; Complex unit(1,0); Complex zero(0,0); std::cout<<"Read dimension:"<<std::endl; std::cin>>Dim ; std::vector<Complex> vec1(Dim,1); std::vector<Complex> vec2(Dim,2); std::vector<Complex> Ham(Dim*Dim,1.5); zhemv_('U',&Dim,&unit,&Ham[0],&Dim,&vec1[0],&ld,&zero,&vec2[0],&ld); }
Valgrind警告信息
363614 Invalid read of size 8
363614 at 0x65316CF: zhemv_U_HASWELL (in /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so)
已尝试调整n、lda、incx、incy等参数传递方式,查阅BLAS文档也未找到有效解决方法。该代码是从大型项目中提取的最小复现示例,此问题可能是大型程序出现段错误的原因。
内容的提问来源于stack exchange,提问作者Dimorga
相关产品推荐
相关产品推荐

