Main Content

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

parallel.pool.Constant

데이터 또는 함수 핸들에서 상수를 만들어서 사용

    설명

    현재 MATLAB® 세션의 데이터를 병렬 풀의 워커로 불필요하게 여러 번 복사하지 않으려면 Constant 객체를 사용합니다. 클라이언트에서 Constant 객체를 한 번 만들고 워커로 상수를 한 번 전송할 수 있습니다. 여러 parfor 루프, spmd 블록 또는 parfeval 호출에서 Constant에 액세스합니다. Constant 객체에서 액세스하는 값은 상수입니다. Constant 객체를 사용하는 병렬 코드를 Parallel Computing Toolbox™가 없는 MATLAB 사용자와 공유할 수 있습니다. 자세한 내용은 parallel.pool.Constant 항목을 참조하십시오.

    생성

    parallel.pool.Constant를 사용하여 배열, 함수 핸들 또는 Composite 객체에서 Constant 객체를 만듭니다. Value 속성을 사용하여 기본 데이터에 액세스합니다.

    설명

    예제

    C = parallel.pool.Constant(X)는 배열 X를 각 워커에 복사하고 Constant 객체를 반환합니다.

    각 워커는 Value 속성을 사용하여 병렬 언어 구조(parfor, spmd, parfeval) 내의 배열 X에 액세스하여 데이터를 읽을 수 있습니다.

    예제

    C = parallel.pool.Constant(FH)는 각 워커에서 함수 핸들 FH를 실행하고 Constant 객체 C에 결과를 저장합니다. 하나의 출력값으로 FH()를 실행한 결과에 액세스하려면 Value 속성을 사용합니다.

    이 구문을 사용하여 파일 핸들 및 데이터베이스 연결과 같은 핸들 유형 리소스를 병렬 풀에서 만들고 사용합니다. 계산 전에 워커를 설정하기 위해 각 워커에서 함수를 실행하려면 대신 parfevalOnAll을 사용합니다.

    예제

    C가 지워지면 C = parallel.pool.Constant(FH,cleanupFH)는 각 워커에 대해 cleanupFH(C.Value)를 실행합니다.

    예제

    C = parallel.pool.Constant(COMP)는 각 워커의 Constant 객체 C에 있는 Composite 객체 COMP의 요소에 값을 저장합니다.

    데이터가 너무 커서 클라이언트에서 제대로 담을 수 없거나 워커만 액세스할 수 있는 파일에서 데이터를 불러오는 경우와 같이 워커에서만 데이터를 구성하려는 경우에 이 구문을 사용합니다. Value 속성을 사용하여 값에 액세스합니다.

    입력 인수

    모두 확장

    입력 데이터로, 저장하고 불러올 수 있는 모든 MATLAB 변수로 지정됩니다.

    빌드 함수용 함수 핸들로, 함수 핸들로 지정됩니다.

    MATLAB은 빌드 함수를 실행하여 Constant 객체의 Value 속성을 가져옵니다. 이 함수는 입력 인수를 받지 않아야 하며, 하나의 출력 인수를 반환해야 합니다.

    • MATLAB 세션 또는 병렬 풀 워커에서 처음으로 Value 속성을 읽으면, MATLAB은 해당 환경에서 fcn()을 실행한 결과를 Value 속성으로 저장합니다.

    • 이 함수는 MATLAB 세션 또는 병렬 풀 워커에서 한 번만 실행됩니다. 처음 이후로 Value 속성을 읽을 때는 저장된 결과를 읽습니다.

    • 다른 병렬 풀 워커에서 Value 속성을 읽으면, MATLAB은 해당 워커에서 fcn()을 실행한 결과를 반환합니다.

    예: @() fopen(tempname(pwd),'wt')

    정리 함수용 함수 핸들로, 함수 핸들로 지정됩니다. 함수는 하나의 입력 인수, 즉 Constant 객체의 Value 속성을 받아야 합니다.

    C가 지워지면 MATLAB은 정리 함수를 실행합니다. 다음과 같은 경우 Constant 객체 C가 지워집니다.

    • 함수에 C을 만들고, 해당 함수에서 C를 반환하지 않습니다.

    • 작업 공간에서 Constant 객체를 지웁니다.

    예: @fclose

    Constant 객체를 작성하는 Composite 객체로, Composite 객체로 지정됩니다.

    COMP 객체에는 모든 워커에서 정의된 값이 있어야 하며, 그렇지 않으면 오류가 발생합니다.

    예: spmd COMP = rand(3); end; C

    속성

    모두 확장

    기본 데이터 또는 핸들 유형 리소스의 독립적 복사본으로, 저장하고 불러올 수 있는 모든 MATLAB 변수 또는 핸들 변수로 지정됩니다.

    ConstantValue 속성을 사용하여 기본 데이터 또는 핸들 변수에 액세스합니다.

    예제

    모두 축소

    클라이언트의 배열에서 숫자형 Constant를 만들어 동일한 풀의 여러 parfor 루프에서 사용합니다.

    클라이언트에서 대규모 데이터를 만든 다음, 데이터를 풀에 한 번만 전송하는 Constant 객체 C를 작성합니다.

    data = rand(1000);
    C = parallel.pool.Constant(data);

    데이터에 액세스하는 여러 parfor 루프를 실행합니다. 효율성을 위해 결과 배열을 사전할당합니다.

    x = eye(5);
    for ii = 1:5
        parfor jj = 1:5
            x(ii,jj) = C.Value(ii,jj);
        end
    end
    x
    x = 5×5
    
        0.0016    0.5273    0.3794    0.9148    0.2620
        0.1965    0.8118    0.7953    0.5239    0.4186
        0.3482    0.5745    0.6334    0.1987    0.5588
        0.2405    0.6587    0.4238    0.0736    0.6463
        0.8566    0.5241    0.0332    0.7331    0.9080
    
    

    함수 핸들 및 정리 함수를 사용하여 Constant 객체를 만듭니다.

    parallel.pool.Constanttempname을 사용하여 각 워커에 임시 파일을 만듭니다. fclose 함수를 cleanup 함수 핸들로 전달하면 C가 지워질 때 파일이 자동으로 닫힙니다.

    C = parallel.pool.Constant(@() fopen(tempname(pwd),'wt'),@fclose);

    임시 파일 이름을 표시합니다.

    spmd
       disp(fopen(C.Value));
    end
    Worker 1: 
      C:\myTemporaryFiles\tpb2d60042_d684_4705_b084_63496d07b936
    Worker 2: 
      C:\myTemporaryFiles\tpc6bef84f_bebe_44fc_acb2_ddd2fcba5026
    Worker 3: 
      C:\myTemporaryFiles\tpf6775778_b06a_46ba_b502_27e2c253c66f
    Worker 4: 
      C:\myTemporaryFiles\tp4dc6e57a_6b65_437a_8eb7_82877403eee3
    Worker 5: 
      C:\myTemporaryFiles\tpd0e279ac_a141_49f0_a0b6_90c4cad137a4
    Worker 6: 
      C:\myTemporaryFiles\tpf02acaad_60a5_441a_b1a1_46e4c66f33a1
    

    각 워커의 파일에 데이터를 씁니다.

    parfor idx = 1:1000
        fprintf(C.Value,'Iteration: %d\n',idx);
    end

    임시 파일을 닫으려면 C을 지웁니다.

    clear C;   

    spmd 블록 내 풀 워커의 Composite 객체에서 Constant 객체를 작성합니다.

    spmd 블록의 모든 워커로 일부 대규모 데이터를 전송하기 위해 spmdBroadcast를 사용하여 Composite 객체를 만듭니다

    spmd
      if spmdIndex == 1
        x = spmdBroadcast(1,rand(5000));
      else
        x = spmdBroadcast(1);
      end
    end
    Starting parallel pool (parpool) using the 'Processes' profile ...
    Connected to parallel pool with 6 workers.
    

    Composite 객체를 사용하여 Constant 객체를 만들고 parfor 루프에서 이 객체를 사용합니다.

    xc = parallel.pool.Constant(x);
    parfor idx = 1:10
      s(idx) = sum(xc.Value(:,idx));
    end
    s
    s = 1×10
    103 ×
    
        2.5110    2.5256    2.5060    2.4909    2.5078    2.5187    2.4791    2.4842    2.4926    2.4903
    
    

    MATLAB 클라이언트 세션에서 parallel.pool.Constant 함수를 사용해야 합니다.

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

    버전 내역

    R2015b에 개발됨

    모두 확장