Main Content

Composite

여러 워커에 분산되지 않은 변수를 클라이언트에서 생성 및 액세스

    설명

    Composite 객체는 spmd 문을 실행하는 병렬 워커에 저장된 변수에 대한 참조를 포함합니다. Composite 객체는 각 워커에 대해 하나의 요소를 가진 셀형 배열과 유사하며 각 워커에 다른 값을 포함할 수 있습니다. 셀-배열 인덱싱을 사용하여 값을 가져오고 인덱싱 또는 spmd 블록을 사용하여 요소에 대한 값을 정의할 수 있습니다. Composite가 클라이언트에 있고 병렬 풀이 열려 있는 한, 워커의 실제 데이터는 이후 spmd 실행에 계속 사용될 수 있습니다.

    생성

    spmd 문의 본문이 값을 반환하면 spmd 문은 클라이언트에서 Composite 변수를 자동으로 만듭니다. 따라서 Composite 객체를 직접 만들 필요가 거의 없습니다.

    또한 Composite 함수를 사용하여 명시적으로 Composite 객체를 만들 수도 있습니다.

    설명

    예제

    c = Composite는 현재 병렬 풀의 워커를 사용하여 클라이언트에서 Composite 객체를 만듭니다.

    객체가 참조하는 워커의 실제 개수는 풀의 크기와 기존 Composite 객체에 따라 달라집니다. 병렬 풀이 열려 있지 않으면, Composite 함수는 디폴트 프로파일을 사용하여 워커로 구성된 병렬 풀을 시작합니다.

    Composite 객체를 수동으로 만들려면 spmd 문 외부에서 만들어야 합니다. 처음에는 수동으로 생성된 Composite 객체의 각 요소에 데이터가 없습니다. 인덱싱 또는 spmd 블록을 사용하여 요소에 대한 값을 정의합니다.

    예제

    c = Composite(nworkers)Composite 객체를 만드는 데 사용할 워커의 개수를 지정합니다. 워커의 실제 개수는 현재 병렬 풀의 크기와 호환되고 다른 기존 Composite 객체와 호환되는 워커의 수 중 최대 개수입니다. 워커 개수에 대한 제약 조건을 충족하지 못할 경우 오류가 반환됩니다.

    입력 인수

    모두 확장

    Composite 객체를 생성하는 워커 개수로, 양의 정수, Inf 또는 양의 정수나 Inf 값을 포함하는 요소를 2개 가진 벡터로 지정됩니다. nworkers가 스칼라인 경우 사용할 정확한 워커 개수를 지정합니다. nworkers가 요소를 2개 가진 벡터인 경우 첫 번째 요소와 두 번째 요소가 각각 사용할 최소 워커 개수와 사용할 최대 워커 개수를 지정합니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    출력 인수

    모두 확장

    병렬 풀의 워커를 사용하는 클라이언트의 Composite 배열로, Composite 객체로 반환됩니다.

    객체 함수

    existCheck whether Composite is defined on workers
    gatherTransfer distributed array, Composite object, or gpuArray object to local workspace
    subsasgnSubscripted assignment for Composite
    subsrefSubscripted reference for Composite

    Composite 객체의 그 밖의 객체 함수는 다음과 같은 MATLAB® 배열 함수와 유사하게 동작합니다.

    disp변수 값 표시
    end코드 블록 종료 또는 마지막 배열 인덱스 표시
    isempty배열이 비어 있는지 확인
    length가장 큰 배열 차원의 길이
    ndims배열의 차원 수
    numel배열 요소의 개수
    size배열 크기

    예제

    모두 축소

    이 예제에서는 정의된 요소가 없는 Composite 객체를 만든 다음 클라이언트에서 for 루프를 사용하여 값을 할당하는 방법을 보여줍니다.

    4개의 워커가 있는 병렬 풀을 시작하고 각 워커에 대한 요소로 Composite 객체를 만듭니다.

    p = parpool('Processes',4);
    Starting parallel pool (parpool) using the 'Processes' profile ...
    Connected to parallel pool with 4 workers.
    
    c = Composite
     
    c =
     
       Worker 1: No data
       Worker 2: No data
       Worker 3: No data
       Worker 4: No data
     
    

    클라이언트에서 for 루프를 사용하여 Composite 객체의 요소에 대한 값을 정의합니다. 각 요소에 할당된 값은 워커에 저장됩니다.

    for w = 1:length(c)
        c{w} = rand;
    end
    c{:}
    ans = 0.8147
    
    ans = 0.9058
    
    ans = 0.1270
    
    ans = 0.9134
    

    이 예제에서는 워커 개수와 그에 따라 Composite 객체의 요소 개수를 지정하는 방법을 보여줍니다.

    my_Profile이라는 프로파일을 사용하여 10개의 워커로 구성된 병렬 풀을 시작합니다.

    parpool('my_Profile',10);
    Starting parallel pool (parpool) using the 'my_Profile' profile ...
    Connected to parallel pool with 10 workers.
    

    현재 병렬 풀의 워커 4개로만 Composite 객체를 만들고 spmd 블록의 Composite 요소에 값을 할당합니다.

    c = Composite(4);
    spmd
        c = spmdIndex;
    end
    c{:}
    ans = 1
    
    ans = 2
    
    ans = 3
    
    ans = 4
    

    이 예제에서는 spmd 블록과 distributed 배열을 사용하여 클라이언트에서 Composite 객체를 만드는 방법을 보여줍니다.

    4개의 워커가 있는 병렬 풀을 시작하고 4개의 정수로 구성된 배열을 워커에 분산합니다. 각 워커는 하나의 정수를 받습니다.

    p = parpool('Processes',4);
    d = distributed([3 1 4 2]);

    각 워커에서 분산 배열의 일부를 사용하여 Composite 객체 c의 값을 설정합니다.

    spmd
    c = getLocalPart(d);
    end

    c를 표시하고 c에 대한 정보를 확인합니다.

    c{:}
    ans = 3
    
    ans = 1
    
    ans = 4
    
    ans = 2
    
    whos c
      Name      Size            Bytes  Class        Attributes
    
      c         1x4               489  Composite              
    

    • Composite 함수는 기존 병렬 풀의 워커에서 Composite 객체를 만듭니다. 풀이 없는 경우, 병렬 기본 설정에서 자동 풀 시작이 비활성화되어 있지 않는 한 Composite 함수는 새 병렬 풀을 시작합니다. 병렬 풀이 없고 Composite가 병렬 풀을 시작할 수 없는 경우, 클라이언트 작업 공간에 1×1 Composite 객체가 결과로 생성됩니다.

    버전 내역

    R2008a에 개발됨