이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
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 spmdIndex == 1 x = spmdBroadcast(1,rand(5000)); else x = spmdBroadcast(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에 개발됨
참고 항목
parfor
| spmd
| parpool
| parfeval
| parcluster