犰狳要求尺寸太大

时间:2014-05-09 20:45:21

标签: c++ armadillo

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

#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

我需要照顾别的吗?

拉​​姆金。

1 个答案:

答案 0 :(得分:2)

当我们使用-DMKL_ILP64 -m64进行编译时,使用英特尔MKL库解决了这个问题。通常我们只关注链接标志。但重要的是要注意,在gcc命令的编译阶段也必须启用这些标志。我不知道如何在openmpi库上启用它。 lib armadillo.so也必须与mkl_ilp64而不是mkl_lp64链接。请按照以下说明操作。

建立并安装犰狳:

  • 导出CXX = icpc
  • export CC = icpc
  • export PATH = $ PATH:/ home / ramki / intel / bin:
  • 编辑$ armadillo_root / cmake_aux / Modules / ARMA_FindMKL.cmake,正确包含PATHS。
  • 编辑$ armadillo_root / cmake_aux / Modules / ARMA_FindMKL.cmake,将mkl_lp64更改为mkl_ilp64
  • 编辑$ armadillo_root / CMakeLists.txt和(1)更改CMAKE_SHARED_LINKER_FLAGS以包含intel link advisor的链接行和(2)更改由intel link advisor提供的CMAKE_CXX_FLAGS
  • 运行./configure并确保MKL库用于blas和lapack,icpc用作编译器,剩下的就好了。
  • 运行make。
  • 通过运行ldd libarmadillo.so验证链接的库。主要验证它是否与mkl_ilp64库和mkl blas和lapack库链接。
  • 现在运行make install DESTDIR = local path。

这应该有效。