2017-09-08 7 views
1

AB, C : 크기 100 × 1
A 셀 어레이의 각 셀은 행렬이다. 모두 같은 크기입니다.
BC에는 벡터가 포함되어 있습니다.병렬 계산

는 I는 100 × 1 일련 번호는 같을 것이다 크기의 세포 배열 D을 만들어야 my_func은 벡터를 생성하는 행렬과 벡터의 입력을 취하는 함수이다

for i=1:100 
    D{i}=my_func(A{i},B{i},C{i}); 
end 

.

더 빠르게 작업하기 위해 parfor (또는 spmd)을 사용하고 싶습니다. 그러나 A은 크기가 커서 모든 직원에게 A을 방영하고 싶지 않습니다. my_func에 언젠가는 걸리므로이 작업을 효율적으로 수행 할 수 있습니까? 누구든지 나에게 작은 모범을 줄 수 있다면, 나는 그것을 감사 할 것이다.

답변

0

세포 배열이 모두 sliced variables 인 것처럼 보입니다. 즉, 모든 근로자에게 방송되지 않으며 각 근로자가 필요로하는 부분 만 방송됩니다.

따라서, 안전하게 대체 할 수 forparfor과 :

parfor i = 1:100 
    D{i} = my_func(A{i}, B{i}, C{i}); 
end 
+0

그리고 그것의 진정한 이상한 그 일련 번호보다 훨씬 느리다처럼 parfor 사용하기 때문이다. 나는 확인할 필요가 없다. 그러나 내가 3 개의 코어를 돌리면 내 컴퓨터는 완전히 얼어 붙는다. 그래서 나는 그 데이터가 노동자들에게 방송되고있는 것으로 의심한다. 감사. – Bluesking

+0

@Bluesking 어떤 MATLAB 버전을 사용하고 있습니까? ≥2020b 이상인 경우 [ticBytes] (https://nl.mathworks.com/help/distcomp/ticbytes.html)를 참조하십시오. –

+0

각 작업자에게 전송 된 데이터의 양을 확인할 수있었습니다. 약 300MB는 매트릭스 A의 크기의 절반 정도입니다. 따라서 아무 문제가없는 것 같습니다. 러닝 타임에 어떤 이점이 없었습니까? – Bluesking