Запрошенный размер броненосца слишком велик

Я использую броненосца 4.300.0. Я работаю на плотной матрице размером 2840260x103. Я загружаю эту матрицу из файла .csv размером примерно 3,7 ГБ. Я включил «ARMA_64BIT_WORD» в своем приложении, а также config.hpp в каталоге armadillo_bits.

#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

Мне нужно позаботиться о чем-то еще?

Рамки.


person Ramakrishnan Kannan    schedule 09.05.2014    source источник


Ответы (1)


Эта проблема решается с помощью библиотеки Intel MKL, когда мы компилируем с параметром -DMKL_ILP64 -m64. Обычно мы фокусируемся только на флагах ссылок. Но важно отметить, что эти флаги также должны быть включены на этапе компиляции в команде gcc. Я не уверен, как включить это в библиотеке openmpi. Также библиотека armadillo.so должна быть связана с mkl_ilp64 вместо mkl_lp64. Следуйте инструкциям ниже.

Сборка и установка броненосца:

  • экспорт CXX=icpc
  • экспорт 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, чтобы включить строку ссылки с помощью советника по связям с Intel, и (2) измените CMAKE_CXX_FLAGS, как указано советником по связям с Intel.
  • Запустите ./configure и убедитесь, что для blas и lapack используется библиотека MKL, icpc — компилятор, а все остальное в порядке.
  • Беги сделай.
  • Проверьте связанные библиотеки, запустив ldd libarmadillo.so. В основном проверьте, связан ли он с библиотекой mkl_ilp64 и библиотеками mkl blas и lapack.
  • Теперь запустите make install DESTDIR=local path.

Это должно работать.

person Ramakrishnan Kannan    schedule 18.07.2014
comment
Кажется, вы знаете источник проблемы и почему MKL решает проблему. Не могли бы вы предоставить больше информации по этому вопросу? Это может быть значительным положительным дополнением к вашему ответу. - person Mikel Urkia; 17.10.2014