2014-01-14 42 views
1

以下程序陷阱。大矩陣乘法核轉儲

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標誌編譯和ubuntu上的64位與384GB RAM運行。我正在使用openblas。 W和H是任意隨機正矩陣。

上述代碼在乘法運算期間捕獲並創建核心轉儲。該代碼直到A.zeros()成功。我檢查了ulimit,它顯示無限。我也試圖創造A作爲W和H向量的外積的總和。它也是陷阱。而且,當W和H是SMALL時,代碼正在工作並且不會陷入困境。

我怎樣才能多個兩個大矩陣?是否有任何大小限制?

+0

你得到了什麼確切的錯誤信息? – PMF

+0

分割錯誤(核心轉儲) –

+1

先嚐試使用正常的Blas,以確保問題不在OpenBlas中。另外,你可能想編輯include/armadillo_bits/config.hpp並啓用[ARMA_64BIT_WORD](http://arma.sourceforge.net/docs.html#config_hpp) – mtall

回答

1

@mtall在上述評論中的回答是答案。在include/armadillo_bits/config.hpp中啓用ARMA_64BIT_WORD。包含目錄可以在你安裝犰狳的地方找到。例如,在我的情況下,它在/ usr/local中。