大矩阵乘法核心转储
Posted
技术标签:
【中文标题】大矩阵乘法核心转储【英文标题】:big matrix multiplication core dump 【发布时间】: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 【参考方案1】:@mtall 在上述评论中的回答就是答案。在 include/armadillo_bits/config.hpp 中启用 ARMA_64BIT_WORD。包含目录可以在您安装犰狳的地方找到。例如,在我的情况下,它位于 /usr/local 中。
【讨论】:
以上是关于大矩阵乘法核心转储的主要内容,如果未能解决你的问题,请参考以下文章