【问题标题】:Eigen 3.2.1 + MKL = C4244 Compiler warning特征 3.2.1 + MKL = C4244 编译器警告
【发布时间】:2014-05-02 18:47:12
【问题描述】:

任何人在编译带有 Eigen 和 EIGEN_USE_MKL_ALL 标志定义的项目时遇到这些警告?我按照这里的说明进行操作:http://eigen.tuxfamily.org/dox/TopicUsingIntelMKL.html。这只发生在我#include <Eigen/Eigenvalues>

编译日志示例:

eigen3.2.1\eigen\src/Eigenvalues/RealSchur_MKL.h(76):警告 C4244:“正在初始化”:从“__int64”转换为“int”,可能丢失数据 eigen3.2.1\eigen\src/Eigenvalues/ComplexSchur_MKL.h(87):警告 C4244:“正在初始化”:从“__int64”转换为“int”,可能丢失数据 eigen3.2.1\eigen\src/Eigenvalues/SelfAdjointEigenSolver_MKL.h(80): 警告 C4244: 'initializing' : 从 '__int64' 转换为 'int',可能丢失数据

我知道这些警告的含义,但要解决它们,我需要更改库代码。除了压制这些警告,您有什么建议吗(以防万一我错过了什么)?

【问题讨论】:

    标签: c++ eigen intel-mkl


    【解决方案1】:

    在 64 位平台上,Eigen 使用 64 位整数来编码其矩阵的维度。 MKL 包装器使用 32 个整数,如果您的矩阵大小超过 20 亿行或列,则可能会溢出。

    【讨论】:

    • 这是否意味着我需要编译为 ILP64(64 位整数)?但是在提供的链接中,Eigen 设置建议在 64 位系统上,您应该只使用 LP64(32 位整数)...?
    • 您应该按照 Eigen 文档中的建议使用 LP64 接口(尽管有编译警告)。目前不支持 ILP64 库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2011-02-20
    相关资源
    最近更新 更多