2017-01-05 4 views
0

Matlab의 병렬 프로그래밍에 대해 알고 있듯이, 우리는 정확히 어떤 작업자가 무엇을하는지 지정할 수 있습니다. 사용 :parfor inside spmd 블록을 사용하여 에러가 발생했습니다 - matlab

if labindex == x 
    %some computations 
end 


는 또한 우리가 병렬로 for 루프를 실행할 수 있습니다; 사용 : 나는 몇 노드가 클러스터를 사용하고 각 노드가 8 개 코어가

parfor i1 = x:y 
    %some computations 
end 

.

spmd 
    if labindex == 1 
     alpha = forward(some parameters); 
    end 
    if labindex == 2 
     beta = backward(some parameters); 
    end 
end 

나는이 두 기능은 2 동시에 실행 얻을 원 :
내가 하나 하나가 parfor 루프가 포함되어이 개 기능을 실행하려면, 각 함수가 노동자에 의해 실행 얻을, 내 코드는 다음과 같은 것입니다 다른 노드.

PARFOR or SPMD can not be used inside an SPMD block. 

왜이다 : 하지만 matlab에이 오류가 다시 발생? 아이디어가 있으십니까?

+0

Matlab 설명서에 관련 포인터를 추가했습니다. 당신의 코드가 에러를 던져야하는 것처럼 보이지는 않습니다. (적어도 최신 Matlab 문서에 따르면 아닙니다.) 그래서 당신이 원한다면 [MCVE] (http://stackoverflow.com/help/mcve)를 제공해야합니다. 더 도움이됩니다. –

답변

1

parfor 문서에 덮여하십시오 parfor -loop의 몸이 다른 parfor -loop를 포함 할 수 없습니다

. 그러나 은 다른 parfor -loop을 포함하는 함수를 호출 할 수 있습니다. 근로자가 병렬 풀을 열 수 없기 때문에

그러나 는 노동자 병렬 내부 중첩 된 parfor -loop를 실행할 수 없습니다. 즉, 중첩 된 레벨 중 하나만 parfor -loops를 병렬로 실행할 수 있습니다. 외부 루프 이 병렬 풀에서 병렬로 실행되면 내부 루프는 각 작업자에게 에 연속적으로 실행됩니다. 외부 루프가 클라이언트에서 순차적으로 실행되는 경우 (예 : parfor 제로 작업자를 지정하는 경우) 내부 루프가 포함 된 함수는 풀의 작업자에 대해 내부 루프를 병렬로 실행할 수 있습니다. 같은

spmd 문 마찬가지입니다 :

spmd 문의 몸이 직접 다른 spmd를 포함 할 수 없습니다. 그러나 다른 spmd 문을 포함하는 함수를 호출 할 수 있습니다. 내부 spmd 문은 다른 병렬 패러미터 풀에서 병렬로 실행되지 않지만 기능이있는 을 실행하는 작업자의 단일 스레드에서 연속적으로 실행됩니다.

그들이 기능에 캡슐화되어 당신이 실제로 한 spmd/parfor을 중첩 한 수 나타납니다,하지만 그들은 여전히 ​​병렬로 실행되지 않습니다, 그래서 이유가 없다.

+0

당신의 대답은 명확하지만, 각 작업자 (내가 사용하고있는 클러스터의 노드)가 8 코어의 cpu를 가지고 있다고 생각하십시오. 'SPMD' 블록에서 각 작업자에게'PARFOR'를 포함하는 함수를 할당합니다. 이는 작업자가 병렬 풀 자체를 열 수 있음을 의미합니다. 이 상황에서 어떤 일이 일어날까요? 'PARFOR' 루프가 병렬로 실행됩니까? –

+0

병렬 풀을 열 수 없기 때문에 작업자가 보유한 코어 수는 중요하지 않습니다. 이것은 내가 인용 한 문서에 명확하게 설명되어있는 Matlab의 한계입니다. 당신은 중첩 된'parfor' /'spmd'를 피하기 위해 코드를 리팩터링 할 필요가 있습니다. 그렇지 않으면'spmd'에 의존하는 대신에 여러개의 matlab 인스턴스들을 스스로 확장하십시오. –

+0

나는 그것을 얻었다. 감사합니다. –