2014-01-14 4 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(); 
} 

위의 프로그램은 fopenmp 플래그가있는 g ++ 4.8을 사용하여 컴파일되고 우분투 64 비트와 384GB 램에서 실행됩니다. 나는 오픈 블라스를 사용하고 있습니다. W와 H는 임의의 임의의 양의 행렬입니다.

위 코드는 곱셈 중에 코어 덤프를 트래핑하고 생성합니다. 이 코드는 A.zeros()까지 성공합니다. 나는 ulimit를 확인했고 그것은 무제한으로 보여주고있다. 나는 또한 W와 H의 벡터의 외부 생성물의 합으로 A를 만들려고 시도했다. 또한 덫을 놓았다. 또한 W와 H가 작 으면 코드가 작동하고 트래핑하지 않습니다.

어떻게 두 개의 큰 행렬을 여러 개 만들 수 있습니까? 크기 제한이 있습니까?

+0

정확한 오류 메시지는 무엇입니까? – PMF

+0

분할 오류 (코어 덤프) –

+1

문제가 OpenBlas에 없는지 확인하려면 먼저 정상적인 Blas를 시도해보십시오. 또한 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를 활성화하십시오. include 디렉토리는 armadillo를 설치 한 위치에서 찾을 수 있습니다. 예를 들어 나의 경우에는/usr/local에있다.