Я застрял с вызовом функции MKL Blas cblas_zgemv
Есть два коэффициента альфа и бета, которые являются комплексными числами:
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);
Я попытался установить альфа = комплекс (1,0,0), но это возвращает мне ошибку:
error: no suitable conversion function from "complex<double>" to "const void *" exists
Что я могу сделать? Я не понимаю, что это за const void *
Функция ожидает указатель на комплексное значение, а не само значение. Вам понадобится переменная для хранения значения, а затем передайте адрес этого:
std::complex<double> alpha(1,0);
cblas_zgemv(..., &alpha, ...);
Я считаю, что это безопасно, так как lapack_complex_double
совместим с макетом (и в C ++ это псевдоним для) std::complex<double>
, Чтобы быть в безопасности, вы можете использовать lapack_complex_double
при вызове этой библиотеки.
Других решений пока нет …