Main Content

코드를 프로파일링하여 성능 개선하기

프로파일링이란?

프로파일링은 코드 실행에 걸리는 시간을 측정하고 MATLAB®이 가장 긴 시간을 쓰는 곳을 식별하기 위한 방법입니다. 시간이 오래 걸리는 함수를 식별하고 나면 가능한 성능 개선을 위해 이러한 함수를 평가해 볼 수 있습니다. 코드를 프로파일링하여 코드 중에서 실행되지 않는 라인을 확인할 수도 있습니다. 코드에서 실행되지 않는 라인을 확인하는 것은 코드에 대한 테스트를 개발할 때나 디버그 용도로 코드의 문제점을 격리할 때 유용할 수 있습니다.

MATLAB 프로파일러를 사용해 대화형 방식으로 또는 profile 함수를 사용해 프로그래밍 방식으로 코드를 프로파일링할 수 있습니다. 프로그래밍 방식으로 코드를 프로파일링하는 방법에 관한 자세한 내용은 profile을 참조하십시오. 병렬로 실행되는 코드를 프로파일링하는 경우 최상의 결과를 얻기 위해서는 Parallel Computing Toolbox™ 병렬 프로파일러를 사용해야 합니다. 자세한 내용은 Profiling Parallel Code (Parallel Computing Toolbox) 항목을 참조하십시오.

미숙한 상태로 최적화된 코드는 실제 성능 향상에는 도움이 되지 않고 불필요하게 복잡할 수 있습니다. 처음으로 구현할 때는 가능한 한 간단하게 합니다. 그런 다음, 속도가 문제가 되는 경우 프로파일링을 사용하여 병목 현상을 식별합니다.

코드 프로파일링하기

코드를 프로파일링하고 성능을 개선하려면 다음과 같은 일반적인 절차를 따르십시오.

  1. 코드에서 프로파일러를 실행합니다.

  2. 프로파일 요약 결과를 검토합니다.

  3. 함수와 코드의 개별 라인을 조사합니다.

    예를 들어, 상당한 시간을 사용하거나 가장 자주 호출되는 함수와 코드 라인을 조사할 수 있습니다.

  4. 프로파일링 결과를 저장합니다.

  5. 코드에 잠재적인 성능 개선 사항을 구현합니다.

    예를 들어, 루프 내에 load 문이 있는 경우 한 번만 호출되도록 루프 밖으로 load 문을 이동할 수 있습니다.

  6. 파일을 저장하고 clear all을 실행합니다. 프로파일러를 다시 실행하고 결과를 원래 결과와 비교합니다.

  7. 위 절차를 반복하여 계속적으로 코드의 성능을 향상시킵니다. 코드에서 대부분의 시간이 몇 개의 내장 함수를 호출하는 데 쓰여지고 있다면, 코드가 최적화된 상태일 가능성이 높습니다.

코드에서 프로파일러 실행하기

코드 라인에서 프로파일러를 실행하려면 다음을 수행하십시오.

  1. 탭으로 이동하여 MATLAB 아래에 있는 프로파일러 앱 아이콘을 클릭하여 프로파일러를 엽니다. 명령 창에 profile viewer를 입력할 수도 있습니다.

  2. 프로파일러 탭으로 이동하여 프로파일 섹션의 편집 상자에 프로파일링하려는 코드를 입력합니다.

    예를 들어, MATLAB과 함께 제공되는 로트카-볼테라 예제에 대한 피식자 개체군과 포식자 개체군 피크를 찾는 함수 solvelotka.m을 만듭니다.

    function [preypeaks,predatorpeaks] = solvelotka(t0, tfinal, y0)
        [~,y] = ode23(@lotka,[t0 tfinal],y0);
        
        preypeaks = calculatepeaks(y(:,1));
        predatorpeaks = calculatepeaks(y(:,2));
        
    end
    
    function peaks = calculatepeaks(A)
        [TF,P] = islocalmax(A);
        peaks = P(TF);
    end
    편집 상자에서 다음 명령문을 입력하여 solvelotka 함수를 프로파일링합니다.
    [preypeaks,predatorpeaks] = solvelotka(0,15,[20;20])

    현재 MATLAB 세션에서 이 명령문을 이전에 프로파일링한 경우, 편집 상자 드롭다운 목록에서 이 명령문을 선택할 수도 있습니다.

  3. 실행 시간 측정을 클릭합니다.

    프로파일링이 완료되면 프로파일러의 프로파일 요약에 결과가 표시됩니다. 또한 프로파일링한 명령문은 명령 창에서 실행된 것으로 표시됩니다.

편집기에 열려 있는 코드 파일을 프로파일링하려면 편집기 탭의 실행 섹션에서 실행 > 실행 시간 측정을 선택하십시오. 프로파일러가 현재 편집기 탭에 열려 있는 코드 파일을 프로파일링하고 프로파일 요약에 결과를 표시합니다.

프로파일 요약 결과 검토하기

코드에 대해 프로파일러를 실행한 후, 프로파일 요약은 코드의 전체 실행에 대한 통계를 보여주고 호출된 각 함수에 대한 요약 통계를 제공합니다. 예를 들어, 아래 이미지는 solvelotka 함수에 대한 프로파일 요약을 보여줍니다.

프로파일 요약 결과 상단에 있는 불꽃 그래프는 MATLAB이 코드 실행에 소비한 시간을 시각적으로 보여줍니다. 실행된 각 함수는 불꽃 그래프에서 막대로 표현됩니다. 사용자 정의 함수는 파란색으로 표시되고, MathWorks® 함수는 회색으로 표시됩니다.

그래프에 있는 함수는 계층적 순서대로 표시되는데, 부모 함수는 그래프 아래쪽에 나타나고 자식 함수는 그래프 위쪽에 나타납니다. 프로파일 요약 레이블이 지정된 그래프에서 바닥 전체를 가로지르는 막대는 실행된 모든 코드를 나타냅니다. 그래프에 표시된 막대의 너비는 함수 실행에 걸린 시간을 총 실행 시간의 백분율로 나타냅니다.

전체 함수 이름뿐 아니라 실제 백분율과 시간 값을 보려면 그래프의 막대 위로 마우스 커서를 이동하십시오. 개별 코드 라인에 대한 정보를 포함하여, 함수에 대한 세부 정보를 표시하려면 해당 함수를 나타내는 막대를 클릭하십시오.

불꽃 프레임 아래에 있는 함수 테이블은 불꽃 그래프와 유사한 정보를 표시합니다. 처음에 함수가 처리되는 데 걸린 시간순으로 표시됩니다. 아래 표에는 각 열의 정보에 대한 설명이 나와 있습니다.

설명
함수 이름

프로파일링된 코드가 호출한 함수의 이름입니다.

호출

프로파일링된 코드가 함수를 호출한 횟수입니다.

총 시간

함수에 소요된 총 시간(단위: 초)입니다. 함수에 소요된 시간은 자식 함수에 소요된 시간을 포함합니다. 프로파일러 자체가 사용하는 시간도 있으며, 이 시간도 결과에 포함됩니다. 실행 시간이 매우 짧은 파일의 경우 총 시간이 0일 수 있습니다.

자체 시간

함수에 소요된 총 시간(초)으로, 자식 함수에 사용된 시간은 포함되지 않습니다. 자체 시간에는 프로파일링 과정에서 초래된 일부 오버헤드도 포함됩니다.

총 시간 플롯

총 시간과 자체 시간을 비교하여 그래프로 보여줍니다.

특정 열을 기준으로 함수 테이블을 정렬하려면 열 제목에 있는 화살표를 클릭하십시오. 예를 들어, 함수 이름 열에 있는 화살표를 클릭하면 함수를 사전순으로 정렬할 수 있습니다. 처음 결과는 총 시간을 기준으로 정렬한 것입니다. 개별 코드 라인에 대한 정보를 포함하여, 함수에 대한 세부 정보를 표시하려면 함수 이름을 클릭하십시오.

함수와 개별 코드 라인 조사하기

코드에서 개선 가능한 점을 찾으려면 불꽃 그래프나 함수 테이블에서 상당한 시간을 소모하거나 가장 빈번하게 호출되는 함수를 찾아야 합니다. 함수 이름을 클릭하면 개별 코드 라인에 대한 정보를 포함하여, 함수에 대한 세부 정보를 표시할 수 있습니다. solvelotka>calculatepeaks 함수를 클릭하는 경우를 예로 들어보겠습니다. 그러면 프로파일러가 이 함수에 대한 세부 정보를 표시합니다.

프로파일러는 페이지 상단에서 현재 함수의 이름 옆에 부모 함수가 이 함수를 호출한 횟수와 이 함수에 소요된 총 시간을 표시합니다. 불꽃 그래프 아래에 표시되는 링크를 사용하여 디폴트 편집기에서 함수를 열거나 표시되는 결과를 별개의 창에 복사합니다.

프로파일 요약으로 돌아가려면 프로파일러 탭에서 프로파일 요약 버튼을 클릭하십시오. 또한 불꽃 그래프 하단의 프로파일 요약 막대를 클릭할 수도 있습니다.

개별 함수를 클릭하면 프로파일러가 다음 섹션에 추가 정보를 표시합니다.

섹션세부 정보
불꽃 그래프

MATLAB이 프로파일링된 함수를 실행하는 데 소비한 시간의 시각적 표현을 보여주는 불꽃 그래프입니다. 이 그래프는 자식 함수(현재 함수 위에 표시됨)와 부모 함수(현재 함수 아래에 표시됨)를 포함하여 프로파일링된 함수의 계층을 보여줍니다. 사용자 정의 함수는 파란색으로 표시되고(), MathWorks 함수는 회색으로 표시됩니다().

그래프의 막대 위로 마우스 커서를 이동하면 전체 함수 이름뿐 아니라 실제 백분율과 시간 값이 표시됩니다. 함수를 나타내는 막대를 클릭하면 함수에 대한 세부 정보가 표시됩니다.

부모

부모 함수에서 프로파일링된 함수를 호출한 횟수를 포함하여, 프로파일링된 함수를 호출하는 함수의 목록입니다.

목록에 있는 함수 이름을 클릭하면 그 함수에 대한 세부 정보가 표시됩니다.

가장 많은 시간이 소요되는 라인

프로파일링된 함수 중 처리 시간이 가장 길었던 코드 라인의 목록입니다.

코드 라인을 클릭하면 함수 목록 표시 섹션에 나머지 함수 코드 부분의 컨텍스트 내에서 해당 라인이 표시됩니다.

자식

프로파일링된 함수가 호출한 모든 함수의 목록입니다.

목록에 있는 함수 이름을 클릭하면 그 함수에 대한 세부 정보가 표시됩니다.

코드 분석기 결과

프로파일링된 함수의 문제점과 잠재적인 개선 사항의 목록입니다.

실행률 결과

프로파일링하는 동안 MATLAB에서 실행한 함수의 코드 라인에 대한 코드 실행률 통계입니다.

코드에 대한 코드 커버리지 분석을 추가로 수행하려면 Collect Statement and Function Coverage Metrics for MATLAB Source Code 항목을 참조하십시오.

함수 목록 표시

함수가 MATLAB 코드 파일인 경우 함수의 소스 코드입니다.

각 코드 라인에 대해 함수 목록 표시에 다음 열이 포함됩니다.

  • 각 코드 라인의 실행 시간

  • MATLAB에서 코드 라인을 실행한 횟수

  • 라인 번호.

    함수 목록 표시에서 라인 번호를 클릭하면 디폴트 편집기에서 함수가 열립니다.

  • 함수의 소스 코드. 텍스트 색은 각각 다음을 나타냅니다.

    • 녹색 — 주석 처리된 라인

    • 검은색 — 실행된 코드 라인

    • 회색 — 실행되지 않은 코드 라인

기본적으로 프로파일러는 실행 시간이 가장 긴 코드 라인을 강조 표시합니다. 강조 표시 색이 진할수록 코드 라인의 실행 시간이 긴 것을 나타냅니다. 강조 표시 조건을 변경하려면 프로파일러 탭으로 이동하여 보기 섹션에서 강조 표시 를 클릭하십시오. 사용 가능한 강조 표시 옵션 중에서 선택합니다. 예를 들어, 실행되지 않은 코드 라인을 강조 표시하려면 코드 미실행 옵션을 선택하십시오.

결과 저장하기

코드를 개선한 후 변경 사항의 영향을 비교하려면 프로파일링 결과를 저장하십시오. 결과를 저장하려면 불꽃 그래프 아래에 표시되는 링크를 사용하여 표시되는 결과를 별개의 창으로 복사하십시오.

프로파일러 탭으로 이동하여 인쇄 버튼을 클릭하여 프로파일러에서 결과를 인쇄할 수도 있습니다.

명령 창에서 여러 명령문 프로파일링하기

명령 창에서 둘 이상의 명령문을 프로파일링하려면 다음을 수행하십시오.

  1. 명령 창으로 이동하여 profile on을 입력합니다.

  2. 프로파일링하려는 명령문을 입력하고 실행합니다.

  3. 모든 명령문을 실행한 후 profile off를 입력합니다.

  4. profile viewer를 입력하여 프로파일러를 엽니다. 탭으로 이동하여 MATLAB 아래에 있는프로파일러 앱 아이콘을 클릭해도 됩니다.

  5. 프로파일 요약 결과를 검토합니다.

앱 프로파일링하기

앱 디자이너에서 만드는 앱을 프로파일링할 수 있습니다. 또한 Signal Processing Toolbox™에 함께 포함된 필터 설계 및 분석 툴과 같이 MathWorks 제품과 함께 제공되는 앱을 프로파일링할 수도 있습니다.

앱을 프로파일링하려면 다음을 수행하십시오.

  1. 탭으로 이동하여 MATLAB 아래에 있는 프로파일러 앱 아이콘을 클릭하여 프로파일러를 엽니다. 명령 창에 profile viewer를 입력할 수도 있습니다.

  2. 프로파일러 툴스트립의 프로파일 섹션에서 프로파일링 시작을 클릭합니다. 버튼 오른쪽의 편집 상자에 코드가 없는지 확인합니다.

  3. 앱을 시작합니다.

  4. 앱을 사용합니다.

  5. 마쳤으면 프로파일러 툴스트립에서 프로파일링 중지를 클릭합니다.

  6. 프로파일 요약 결과를 검토합니다.

참고

앱 시작 과정이 프로파일링되지 않도록 하려면 2단계와 3단계를 반대로 수행하십시오. 즉, 프로파일링 시작을 클릭하기 전에 앱을 시작하십시오.

참고 항목

함수

관련 항목