const void* 作为 C++ 中 MKL Blas 例程的复数
const void* as a complex number for MKL Blas routine in C++
我陷入了调用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
。
相关文章:
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- c++类声明时,相同的例程,不同的成员变量类型
- C++为线程工作动态地分割例程
- 子例程,不使用 pow,并带有参数和返回
- 直接在RcppArmadillo中调用LAPACK例程
- 如何将C++子例程链接到 x86 程序集程序?
- PX 转换例程编译问题
- 成功完成TLS握手后,服务器关闭时出现错误的SSL例程:SSL3_GET_RECORD:错误的版本号
- 只允许授权代码调用库中的例程
- JNI 不满意链接错误: 动态链接库 (DLL) 初始化例程失败
- 调用子例程时类型不匹配
- 将分配给C++数组传递给 Fortran 子例程
- Android Studio 3.1.2 - 无法运行C++子例程"No implementation found for Java.lang.String..."
- Posix 线程类和启动例程 (pthread)
- OpenBLAS 只为一个例程设置线程数
- 检查并行化 BLAS 例程的结果
- 我们应该测量例程的平均执行时间还是最小执行时间?
- 试图在C 中调用Fortran子例程
- MKL 或 BLAS 例程,用于将矢量乘以标量错位
- const void* 作为 C++ 中 MKL Blas 例程的复数