2013-04-17 4 views
1

Matlab에서 행렬 곱셈을위한 코드를 병렬로 실행하고 싶습니다. 나는 그것을위한 순차 코드를 작성했다. 나는 그것을 병렬로 실행하기 위해 'spmd'방법을 사용했다. 그러나 병렬 코드의 실행 시간은 순차 코드보다 큽니다. 제 모토는 코드를 병렬로 실행하는 실행 시간을 줄이는 것입니다. for 루프에서 종속성을 제거하고 실행하려면 Inbuilt 함수를 곱셈에 사용하고 싶지 않습니다. 내가 어떻게 해?? 내가 코드를 fallowing 시도 .. 이 저를 도와주세요 ..matlab에서 행렬 곱셈을위한 병렬 코드

a=[1,2,3,4;5,6,7,0;8,9,10,11;12,13,14,15]; 
b=[1,2,3,4;5,6,7,0;8,9,10,11;12,13,14,15]; 
warning off all;  
%Sequential code 
tic 
    for i=1:4 
    for j=1:4 
     sum=0; 
     for k=1:4 
      sum=sum+(a(i,k)*b(k,j)); 
     c(i,j)=sum; 
     end; 
    end; 
    end; 
    time1 =toc 

    %parallel code 
    matlabpool('open'); 
tic 
spmd 
for i=1:4 
    for j=1:4 
     sum=0; 
     for k=1:4 
      sum=sum+(a(i,k)*b(k,j)); 
     c(i,j)=sum; 
     end; 
    end; 
    end; 
end; 
time2 =toc 

내가 가진 출력했다 .. 병렬

매트릭스두고 순차적와 TIME2에 대한 시간 1

time1 = 

0.0041 

Starting matlabpool using the 'local' profile ... connected to 2 labs. 

time2 = 

0.6950 

>> 
+0

시도 당신은 그런 사소한 예를 들어 어떤 개선을 볼 가능성이있어 SPMD –

+0

후 틱을 넣어 : 당신은, 예를 들어,'10000x10000' matrces을'설정 A' 할 수있는'b' 시도해야합니다. 그러나 MATLAB을지지하는 BLAS 알고리즘은 매우 빠릅니다. 그건 그렇고, 내가 (당신의 질문에서 "종속성 제거"로 해석)이 일을하기위한 당신의 이유는 다소 불안정합니다 ... 병렬 컴퓨팅 툴박스는 단순한 매트릭스 곱셈보다 많은 의존성이 있습니다. – wakjah

+0

나는 SPMD 후 tic을 넣으려고했는데, 그게 daint work – user1916616

답변

1

오히려 확장 된 의견 답 :

  • 테스트 매트릭스가 매우 작습니다. 병렬 실행 풀을 시작하는 오버 헤드로 인해 실행 속도가 빨라집니다.
  • 출력 매트릭스를 초기화하는 것처럼 보이지 않습니다. c; 코드가 제안하는대로 동적으로 행렬을 만드는 것은 이전에 만든 행렬을 업데이트하는 것보다 훨씬 느린 것으로 알려져 있습니다. 먼저 c = zeros(grows,ncols)으로 시도해보십시오.
  • Matlab의 최신 에디션이 자동으로 멀티 스레드 직접 행렬 곱셈을한다고 생각합니다. 스피드에 대한 네이티브 접근 방식과 일치하는 고유 한 함수를 작성하려고하면 어려울 것입니다.
+0

SPMD 블록을 사용하는 올바른 병렬 처리 (단일 시스템에서)는 MATLAB의 암시 적 멀티 스레딩을 결코 이길 수 없습니다. – Edric

+0

제 모토는 ART 순차 알고리즘을 병렬로 실행하여 행렬 곱셈으로 병렬 처리를 시작하는 것입니다. 그래서 내가 어떻게 루프에 대한 의존성을 제거 할 수 배우고 싶다. – user1916616

관련 문제