我正在使用armadillo4.300.0。我正在2840260x103大小的密集矩阵上进行操作。我正在从大小约为3.7GB的.csv文件加载此矩阵。我已经在我的应用程序以及armadillo_bits目录下的config.hpp中启用了“ARMA_64BIT_WORD”。

#if !defined(ARMA_64BIT_WORD)
  #define ARMA_64BIT_WORD
#endif

我正在使用gcc49进行编译,并在ubuntu 12.04上运行。运行时,出现以下错误。有趣的是,该应用程序有时也会运行。例如,如果我继续尝试10次,它将在某个时间运行。
error: Mat::init(): requested size is too large

terminate called after throwing an instance of 'std::logic_error'
  what():  Mat::init(): requested size is too large

我需要照顾其他吗?

拉姆基

最佳答案

当我们使用-DMKL_ILP64 -m64进行编译时,此问题可以通过Intel MKL库解决。通常,我们仅关注链接标志。但是必须注意,在gcc命令的编译阶段也必须启用这些标志。我不确定如何在openmpi库上启用此功能。同样,lib armadillo.so必须与mkl_ilp64而不是mkl_lp64链接。请按照以下说明进行操作。

构建和安装 Armadillo :

  • 导出CXX = icpc
  • export CC = icpc
  • 导出PATH = $ PATH:/ home / ramki / intel / bin:
  • 编辑$ armadillo_root / cmake_aux / Modules / ARMA_FindMKL.cmake,正确包含路径。
  • 编辑$ armadillo_root / cmake_aux / Modules / ARMA_FindMKL.cmake,将mkl_lp64更改为mkl_ilp64
  • 编辑$ armadillo_root / CMakeLists.txt,然后(1)更改CMAKE_SHARED_LINKER_FLAGS以包括由英特尔链接顾问提供的链接线,以及(2)更改CMAKE_CXX_FLAGS(如由英特尔链接顾问
  • 给出)
  • 运行./configure并确保MKL库用于blas和lapack,icpc是编译器,其余都可以。
  • 运行make。
  • 通过运行ldd libarmadillo.so验证链接的库。主要验证它是否与mkl_ilp64库以及mkl blas和lapack库链接。
  • 现在运行make install DESTDIR = local路径。

  • 这应该工作。

    08-16 07:18