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

parfor를 사용하여 대화형 방식으로 루프를 병렬로 실행하기

이 예제에서는 속도가 느린 for 루프로 시작한 후 parfor 루프를 사용하여 계산 속도를 높입니다. parfor는 병렬 풀에서 워커를 통해 for 루프 반복을 분할하여 실행합니다.

이 예제에서는 행렬의 스펙트럼 반지름을 계산하고 for 루프를 parfor 루프로 변환합니다. 이 결과로 나타나는 속도 향상을 측정하는 방법도 알아봅니다.

  1. MATLAB® 편집기에서 다음 for 루프를 입력합니다. tictoc을 추가하여 경과 시간을 측정합니다.

    tic
    n = 200;
    A = 500;
    a = zeros(n);
    for i = 1:n
        a(i) = max(abs(eig(rand(A))));
    end
    toc
  2. 스크립트를 실행하고 경과 시간을 확인합니다.

    Elapsed time is 31.935373 seconds.

  3. 스크립트에서 for 루프를 parfor 루프로 바꿉니다.

    tic
    n = 200;
    A = 500;
    a = zeros(n);
    parfor i = 1:n
        a(i) = max(abs(eig(rand(A))));
    end
    toc

  4. 새 스크립트를 실행하고 다시 실행합니다. 병렬 풀을 시작하고 코드를 워커에서 사용 가능하도록 하는데 약간의 시간이 걸리기 때문에 첫 번째 실행이 두 번째 실행보다 느립니다. 두 번째 실행의 경과 시간을 확인합니다.

    기본적으로 MATLAB은 로컬 컴퓨터에서 워커의 병렬 풀을 자동으로 엽니다.

    Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.
    ...
    Elapsed time is 10.760068 seconds. 
    4개의 워커에서 실행되는 parforfor 루프 실행보다 약 3배 정도 빠릅니다. 워커가 4개임을 감안하면 속도가 4배 빨라지는 것이 이상적이지만 그보다는 느립니다. 이는 데이터를 클라이언트에서 워커로 전송하고 다시 클라이언트로 전송하는 데 필요한 시간 등의 병렬 연산에 드는 오버헤드 때문입니다. 이 예제에서는 병렬 연산에 드는 오버헤드가 비교적 작아 속도가 꽤 향상되었으며 parfor 루프로 변환하여 얻는 이점이 있습니다. 모든 for 루프 반복이 더 빠른 parfor 루프로 변환될 수 있는 것은 아닙니다. 자세한 내용은 parfor를 언제 사용할지 결정하기 항목을 참조하십시오.

parfor 루프 사용의 한 가지 핵심 요구 사항은 개별 반복이 독립적이어야 한다는 것입니다. parfor 처리에 적합한 독립적 문제에는 몬테카를로 시뮬레이션과 파라미터 스윕이 있습니다. 다음 단계는 for 루프를 parfor 루프로 변환하기 항목을 참조하십시오.

이 예제에서는 4개의 워커에서 for 루프를 parfor 루프로 변환하여 계산 속도를 높였습니다. 병렬 풀의 워커 수를 늘리면 경과 시간을 더 줄일 수도 있습니다. parfor 루프를 클러스터 및 클라우드로 확장하기 항목을 참조하십시오.

클러스터 프로파일을 수정하여 루프를 실행하는 워커 수 및 워커가 로컬 또는 클러스터에 있는지 여부를 제어할 수 있습니다. 프로파일에 대한 자세한 내용은 클러스터 검색 및 클러스터 프로파일 사용하기 항목을 참조하십시오.

병렬 풀이 자동으로 생성되는지 여부 및 병렬 풀 사용 가능 시간을 제어하려면 병렬 기본 설정을 수정하십시오. 기본 설정에 대한 자세한 내용은 병렬 기본 설정 지정하기 항목을 참조하십시오.

parfor 루프를 사용하는 대신 parsim 명령을 사용하여 Simulink® 모델을 병렬로 실행할 수 있습니다. Simulink의 병렬 사용에 대한 자세한 내용과 예제는 Run Multiple Simulations (Simulink) 항목을 참조하십시오.

참고 항목

| | |

관련 항목