【问题标题】: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

标签: blas armadillo


【解决方案1】:

@mtall 在上述评论中的回答就是答案。在 include/armadillo_bits/config.hpp 中启用 ARMA_64BIT_WORD。包含目录可以在您安装犰狳的地方找到。例如,在我的情况下,它位于 /usr/local 中。

【讨论】:

    猜你喜欢
    • 2013-04-05
    • 2018-04-11
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多