이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

parfor 루프를 클러스터 및 클라우드로 확장하기

이 예제에서는 로컬 멀티코어 데스크탑에서 시작하여 워커 개수를 늘려가면서 계산 실행에 드는 시간을 측정합니다. 이 테스트를 강한 확장성(strong scaling) 테스트라고 합니다. 이를 통해 워커를 추가하는 경우 계산에 필요한 시간의 감소량을 측정할 수 있습니다. 이러한 종속성을 속도 향상이라고 하며 이를 통해 코드의 병렬 확장성을 추정할 수 있습니다. 그런 다음 병렬 풀의 워커 개수를 늘이는 것이 유용한지 여부를 결정하고 클러스터와 클라우드 연산 환경으로 확장할 수 있습니다.

  1. 함수를 생성합니다.

      edit MyCode
  2. MATLAB® 편집기에서 새 parfor 루프를 입력하고 경과 시간을 측정하려면 tictoc을 추가합니다.

    function a = MyCode(A)
    
    tic
    parfor i = 1:200
        a(i) = max(abs(eig(rand(A))));
    end
    toc
    
  3. 파일을 저장하고 편집기를 닫습니다.

  4. 병렬연산(Parallel Operation) > 병렬 기본 설정 메뉴에서 디폴트 클러스터 로컬(데스크탑 컴퓨터)인지 확인합니다.

  5. MATLAB 명령 창에서 크기가 1인 병렬 풀을 정의하고 하나의 워커에서 함수를 실행하여 경과 시간을 계산합니다. 단일 워커에 대한 경과 시간을 확인하고 병렬 풀을 종료합니다.

    parpool(1);
    a = MyCode(1000);
    
    Elapsed time is 172.529228 seconds.
    
    delete(gcp);
    
  6. 두 개의 워커로 구성된 새 병렬 풀을 열고 다시 함수를 실행합니다.

    parpool(2);
    a = MyCode(1000);
    

    경과 시간을 확인합니다. 단일 워커의 경우에 비해 경과 시간이 감소했음을 알 수 있습니다.

  7. 워커의 개수를 4개, 8개, 12개, 16개로 변경해 봅니다. 로그-로그 스케일에서 각 워커 개수에 대한 경과 시간을 플로팅하여 병렬 확장성을 측정합니다.

    이 그림은 일반적인 멀티코어 데스크탑 PC에 대한 확장성을 보여줍니다(파란색 원 데이터 점). 강력 확장성 테스트 결과, 8개의 워커까지는 거의 선형의 속도 향상과 뛰어난 병렬 확장성을 보여줍니다. 그림에서 보면 이 경우 워커가 8개가 넘는 경우에는 추가적인 속도 향상이 없습니다. 이 결과는 로컬 데스크탑 컴퓨터에서 모든 코어가 8개의 워커에 완전히 사용됨을 의미합니다. 하드웨어에 따라 각각의 로컬 데스크탑은 다른 결과를 보고할 수 있습니다. 병렬 응용 프로그램의 속도를 더 향상시키려면 클라우드나 클러스터 연산 환경으로 확장하는 것이 좋습니다.

  8. 이전 예제에서처럼 로컬 워커를 모두 사용한 경우 계산을 클라우드 연산 환경으로 확장할 수 있습니다. 병렬연산(Parallel Operation) > 클러스터 검색 메뉴에서 클라우드 연산 플랫폼에 액세스할 수 있는지 확인합니다.

    클라우드에서 병렬 풀을 열고 코드를 변경하지 않고 응용 프로그램을 실행합니다.

    parpool(16);
    a = MyCode(1000);
    

    클러스터 워커 개수 증가에 따른 경과 시간을 확인합니다. 로그-로그 스케일에서 경과 시간을 워커 개수 함수로 플로팅하여 병렬 확장성을 측정합니다.

    이 그림은 클라우드에서 일반적인 워커 성능을 보여줍니다(빨간색 플러스 데이터 점). 강력 확장성 테스트 결과, 클라우드에서 16개의 워커까지는 선형의 속도 향상과 100% 병렬 확장성을 보여줍니다. 클라우드나 계산 클러스터의 워커 개수를 증가시켜 계산을 더 확장하는 것을 고려해 보십시오. 워커 개수가 더 많고 다른 응용 프로그램의 경우 하드웨어에 따라 병렬 확장성이 다를 수 있습니다.

  9. 클러스터에 직접 액세스할 수 있는 경우 클러스터에서 워커를 사용하여 계산을 확장할 수 있습니다. 병렬연산(Parallel Operation) > 클러스터 검색 메뉴에서 클러스터에 액세스할 수 있는지 확인합니다. 계정이 있는 경우, 클러스터(Cluster)를 선택하고, 병렬 풀을 열고, 코드를 변경하지 않고 응용 프로그램을 실행합니다.

    parpool(64);
    a = MyCode(1000);
    

    이 그림은 클러스터에서 워커에 대한 강한 확장성 테스트의 일반적인 성능을 보여줍니다(검은색 x 데이터 점). 클러스터에서 최소 80개의 워커까지는 100% 병렬 확장성을 얻을 수 있음을 확인할 수 있습니다. 이 응용 프로그램은 선형으로 스케일링되며 속도 향상은 사용되는 워커 개수와 동일합니다.

    이 예제는 워커 개수와 동일한 속도 향상을 보여줍니다. 모든 작업이 동일한 속도 향상을 얻을 수 있는 것은 아닙니다. 예제는 parfor를 사용하여 대화형 방식으로 루프를 병렬로 실행하기 항목을 참조하십시오.

    특정 작업의 경우 다른 접근 방법이 필요할 수 있습니다. 다른 접근 방법에 대한 자세한 내용은 병렬 연산 해결책 선택하기 항목을 참조하십시오.

ticBytestocBytes를 사용하여 병렬 풀의 워커 간 데이터 전송량을 측정함으로써 parfor 루프를 자세히 프로파일링할 수 있습니다. 자세한 내용 및 예제는 Profiling parfor-loops 항목을 참조하십시오.

관련 항목