0

我被困在调用 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

我能做些什么?我不明白这个 const void* 是什么......

4

1 回答 1

1

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

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

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

于 2013-09-17T15:11:35.647 回答