【发布时间】:2014-01-14 13:36:27
【问题描述】:
以下程序正在捕获。
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 编译的,并在 ubuntu 64 位和 384GB 内存上运行。我正在使用openblas。 W 和 H 是任意随机正矩阵。
上面的代码在乘法过程中捕获并创建核心转储。代码在 A.zeros() 之前是成功的。我检查了ulimit,它显示无限。我还尝试将 A 创建为 W 和 H 向量的外积之和。它也是陷阱。此外,当 W 和 H 为 SMALL 时,代码正在工作并且不会陷入陷阱。
如何将两个大矩阵相乘?有大小限制吗?
【问题讨论】:
-
您得到的确切错误信息是什么?
-
分段错误(核心转储)
-
首先尝试使用普通的 Blas,以确保问题不在 OpenBlas 中。此外,您可能需要编辑 include/armadillo_bits/config.hpp 并启用 ARMA_64BIT_WORD