다음 MATLAB 코드 2 크기의 행렬의 모든 요소들을 루프 I J가 2 × I J.을
for i=1:(I-2)
for j=1:(J-2)
ij1 = i*J+j+1; % row
ij2 = i*J+j+1 + I*J; % col
D1(ij1,ij1) = 2;
D1(ij1,ij2) = -1;
end
end
MATLAB의 parfor 명령을 사용하여 병렬화 할 수있는 방법이 있습니까? 정의되지 않은 모든 요소가 0이라고 가정 할 수 있습니다. 따라서이 행렬은 결국 희소 (대부분 0)가됩니다.
사용하기 전에 parfor 사용시기를 결정하는parfor
것과 관련된 지침을 읽어 보는 것이 좋습니다 . 특히 이것은 :
일반적으로 코드를 더 빠르게 실행하려면 먼저 벡터화를 시도하십시오.
여기서 벡터화는 0이 아닌 요소의 인덱스를 계산하는 데 효과적으로 사용될 수 있습니다. 이러한 인덱스는 함수에 사용됩니다 sparse
. 이를 위해서는 i
또는 j
열 벡터 중 하나 와 행 벡터 중 하나를 정의해야합니다 . 암시 적 확장이 적용되고 인덱스가 계산됩니다.
I = 300;
J = 300;
i = (1:I-2).';
j = 1:J-2;
ij1 = i*J+j+1;
ij2 = i*J+j+1 + I*J;
D1 = sparse(ij1, ij1, 2, 2*I*J, 2*I*J) + sparse(ij1, ij2, -1, 2*I*J, 2*I*J);
그러나 비교를 위해 이것은 parfor
(테스트되지 않은) 사용 방법이 될 수 있습니다 .
D1 = sparse (2*I*J, 2*I*J);
parfor i=1:(I-2)
for j=1:(J-2)
ij1 = i*J+j+1;
ij2 = i*J+j+1 + I*J;
D1 = D1 + sparse([ij1;ij1], [ij1;ij2], [2;-1], 2*I*J, 2*I*J) ;
end
end
여기서는 감소 변수D1
로 사용됩니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다