Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

parallel.pool.Constant

데이터 또는 함수 핸들에서 parallel.pool.Constant 작성

구문

C = parallel.pool.Constant(X)
C = parallel.pool.Constant(FH)
C = parallel.pool.Constant(FH,CLEANUP)
C = parallel.pool.Constant(COMP)

설명

C = parallel.pool.Constant(X)는 값 X를 각 워커에 복사하고 parallel.pool.Constant 객체 C를 반환합니다. 이 객체를 통해 각 워커가 속성 C.Value를 사용하여 병렬 언어 구문(parfor, spmd, parfeval) 내에서 값 X에 액세스할 수 있습니다. X가 워커에 한 번만 전송되므로, 동일한 상수 데이터 세트에 액세스하는 여러 parfor 루프가 있을 때 성능을 개선할 수 있습니다.

C = parallel.pool.Constant(FH)는 각 워커에서 함수 핸들 FH를 실행하고 C.Value에 결과를 저장합니다. 파일 핸들 및 데이터베이스 연결 등의 핸들 유형 리소스를 워커에서 만들고 사용하는 경우에도 유용합니다.

C = parallel.pool.Constant(FH,CLEANUP)는 각 워커에서 함수 핸들 FH를 실행하고 C.Value에 결과를 저장합니다. C를 지우면 함수 핸들 CLEANUP이 각 워커에서 단일 인수 C.Value를 사용하여 평가됩니다.

C = parallel.pool.Constant(COMP)는 Composite 객체 COMP에 저장된 값을 사용하며 이 값을 각 워커에서 C.Value에 저장합니다. 데이터가 너무 커서 클라이언트에서 제대로 담을 수 없거나 워커만 액세스할 수 있는 파일에서 데이터를 로드하는 경우와 같이 parfor 루프 내에서 사용해야 하는 데이터를 워커에서만 생성할 수 있는 경우에 특히 유용합니다. 모든 워커에서 정의된 값이 COMP에 없는 경우 오류가 발생합니다.

parallel.pool.Constant는 MATLAB 클라이언트 세션에서 호출되어야 합니다.

이미 실행 중인 병렬 풀 또는 후속 병렬 풀과 함께 parallel.pool.Constant를 사용할 수 있습니다.

예제

클라이언트의 배열에서 parallel.pool.Constant 만들기

이 예제에서는 숫자형 parallel.pool.Constant를 만들고 동일한 풀의 여러 parfor 루프에서 사용하는 방법을 보여줍니다.

먼저 클라이언트에서 대규모 데이터를 만든 다음, parallel.pool.Constant를 작성하여 데이터를 풀에 한 번만 전송합니다.

data = rand(1000);
c = parallel.pool.Constant(data);
for ii = 1:10
    % Run multiple PARFOR loops accessing the data.
    parfor jj = 1:10
        x(ii,jj) = c.Value(ii,jj);
    end
end

함수 핸들에서 parallel.pool.Constant 만들기

이 예제에서는 함수 핸들 및 정리 함수를 사용하여 parallel.pool.Constant를 만드는 방법을 보여줍니다.

각 워커에서 임시 파일을 만듭니다. @fclose를 두 번째 인수로 전달하면 c가 범위를 벗어날 때 파일이 자동으로 닫힙니다.

c = parallel.pool.Constant(@() fopen(tempname(pwd),'wt'),@fclose);
spmd
   disp(fopen(c.Value)); % Displays the temporary filenames.
end

parfor idx = 1:1000
   fprintf(c.Value,'Iteration: %d\n',idx);
end
clear c;   % Closes the temporary files.

Composite 객체에서 parallel.pool.Constant 만들기

이 예제에서는 spmd 블록 내 풀 워커에서 대규모 데이터 세트를 Composite 객체로 작성한 다음, 이 데이터를 parfor 루프 내에서 parallel.pool.Constant로 사용하는 방법을 보여줍니다.

spmd
  if labindex == 1
    x = labBroadcast(1,rand(5000));
  else
    x = labBroadcast(1);
  end
end
xc = parallel.pool.Constant(x);
parfor idx = 1:10
  s(idx) = sum(xc.Value(:,idx));
end
s
s =
   1.0e+03 *

    2.5108    2.5031    2.5123    2.4909    2.4957    2.5462    2.4859    2.5320    2.5076    2.5432

버전 내역

R2015b에 개발됨

참고 항목

| | | |