以下程序正在陷阱。
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();
}
上面的程序是使用带有fopenmp标志的g ++ 4.8编译的,并在带有384GB ram的ubuntu 64位上运行。我正在使用openblas。 W和H是任意随机正矩阵。
以上代码在乘法过程中捕获并创建核心转储。代码成功直到A.zeros()。我检查了ulimit并显示无限制。我还尝试创建A作为W和H的向量的外积之和。它也是陷阱。此外,当W和H为SMALL时,代码正在工作且不会陷阱。
我怎样才能复制两个大矩阵?有任何尺寸限制吗?
答案 0 :(得分:1)
@ mtall在上述评论中的回答是答案。在include / armadillo_bits / config.hpp中启用ARMA_64BIT_WORD。 include目录可以在安装armadillo的地方找到。例如,在我的情况下,它位于/ usr / local。