Большой дамп памяти умножения матриц
Следующая программа является ловушкой.
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.