Большой дамп памяти умножения матриц

Следующая программа является ловушкой.

void main(){  
 fmat A,W,H;  
 W.load("w.csv"); //W is of size 150000x100  
 H.load("h.csv"); //H is of size 300000x100 
 A.set_size(W.n_rows,H.n_rows);  
 A.zeros();  
 A=W*H.t();  
}  

Вышеупомянутая программа скомпилирована с использованием g++ 4.8 с флагом fopenmp и работает на 64-битной Ubuntu с 384 ГБ оперативной памяти. Я использую openblas. W и H - любая произвольная случайная положительная матрица.

Приведенный выше код захватывает и создает дамп ядра во время умножения. Код успешен до A.zeros(). Я проверил ulimit, и он показывает неограниченно. Я также пытался создать A как сумму внешних произведений векторов W и H. Это также ловушка. Кроме того, когда W и H МАЛЕНЬКИЕ, код работает, и он НЕ перехватывает.

Как я могу умножить две большие матрицы? Есть ли ограничение по размеру?

1 ответ

Решение

Ответ @mtall в приведенном выше комментарии является ответом. Включите ARMA_64BIT_WORD в include/armadillo_bits/config.hpp. Каталог include можно найти в том месте, где вы установили броненосец. Например, в моем случае это было в / usr / local.

Другие вопросы по тегам