You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用EIGEN_USE_MKL_ALL后Eigen矩阵乘法触发段错误及DGEMM异常

问题:Eigen结合Intel MKL时矩阵乘法出现段错误与参数错误

我编写了如下简单代码,运行完全正常:

#include <Eigen/Dense>
int main()
{
    Eigen::MatrixXd M = Eigen::MatrixXd::Random(1000,1000);
    M = M.transpose()*M;
}

为提升性能,我尝试使用Intel编译器并定义EIGEN_USE_MKL_ALL宏,修改后的代码如下:

#include <Eigen/Dense>
#define EIGEN_USE_MKL_ALL
int main()
{
    Eigen::MatrixXd M = Eigen::MatrixXd::Random(1000,1000);
    M = M.transpose()*M;
}

此时代码执行M.transpose() * M时触发**Segmentation fault (core dumped)**错误。

之后我改用EIGEN_USE_BLAS宏,又出现新错误:Intel MKL ERROR: Parameter 13 was incorrect on entry to DGEMM.

但如果手动调用dgemm实现矩阵乘法,却没有任何错误:

Eigen::MatrixXd M_transpose = M.transpose();
Eigen::MatrixXd M_result(size, size);
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasTrans,
            size, size, size,
            1.0, M.data(), size,
            M_transpose.data(), size,
            0.0, M_result.data(), size);
M = std::move(M_result);

我原本期望仅添加宏定义无需修改代码即可获得性能提升,但简单的矩阵乘法却出现问题,请问这是什么原因?

使用的组件版本信息

  • MKL版本:Intel(R) oneAPI Math Kernel Library Version 2022.1-Product Build 20220311 for Intel(R) 64 architecture applications
  • Eigen3版本:3.4.0
  • icpc (ICC)版本:2021.6.0 20220226

内容的提问来源于stack exchange,提问作者1 1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:37:24