const void* 作为 C++ 中 MKL Blas 例程的复数

const void* as a complex number for MKL Blas routine in C++

本文关键字:例程 Blas MKL void 作为 C++ const      更新时间:2023-10-16

我陷入了调用MKL Blas函数cblas_zgemv

有两个系数 alpha 和 beta,它们是复数:

alpha
REAL for sgemv
DOUBLE PRECISION for dgemv
COMPLEX for cgemv, scgemv
DOUBLE COMPLEX for zgemv, dzgemv

.但在函数的定义中:

void cblas_zgemv (const CBLAS_ORDER order, const CBLAS_TRANSPOSE TransA, 
const MKL_INT M, const MKL_INT N, const void *alpha, const void *A,
 const MKL_INT lda, const void *X, const MKL_INT incX, const void *beta, 
void *Y, const MKL_INT incY);

我尝试设置 alpha = complex(1.0,0),但这会给我一个错误:

error: no suitable conversion function from "complex<double>" to "const void *" exists

我能做什么?我不明白这个常量空*是什么...

该函数需要一个指向复值的指针,而不是值本身。您需要一个变量来存储值,然后传递该变量的地址:

std::complex<double> alpha(1,0);
cblas_zgemv(..., &alpha, ...);

我相信这是安全的,因为lapack_complex_double布局与std::complex<double>兼容(并且在C++中是的别名)。为了安全起见,您可能更喜欢在调用该库时使用lapack_complex_double