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

성능 개선을 위해 프로파일링하기

프로파일링이란?

프로파일링은 프로그램에서 시간이 소요되는 부분을 측정하는 방법입니다. 시간이 오래 걸리는 함수를 식별하고 나면 가능한 성능 개선을 위해 이러한 함수를 평가해 볼 수 있습니다. 또는, 디버그의 용도로 코드를 프로파일링해 볼 수도 있습니다. 예를 들어, 테스트 케이스를 개발하면서 어떤 코드 라인이 MATLAB®에서 실행되지 않는지 확인하는 데 사용해 볼 수 있습니다. 프로파일링할 때 파일에서 오류가 발생하는 경우 실행된 부분과 실행되지 않은 부분을 확인하여 문제를 분리할 수 있습니다.

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

MATLAB 프로파일러를 사용하여 코드를 프로파일링할 수 있습니다. 프로파일러는 profile 함수에서 반환한 결과를 기반으로 하는 사용자 인터페이스입니다. 병렬로 실행되는 코드를 프로파일링하는 경우 최상의 결과를 얻기 위해서는 Parallel Computing Toolbox™ 병렬 프로파일러를 사용해야 합니다. 자세한 내용은 Profiling Parallel Code (Parallel Computing Toolbox) 항목을 참조하십시오.

프로파일링 절차와 지침

코드의 성능을 개선하려면 다음의 일반적인 절차를 따르십시오.

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

  2. 프로파일 요약 리포트에서 상당한 시간을 소모하거나 가장 빈번하게 호출되는 함수를 찾습니다.

  3. 해당 함수에 대한 프로파일 세부 리포트를 확인하고 가장 많은 시간이 걸리거나 가장 자주 호출되는 코드 라인을 찾습니다.

    나중에 비교할 수 있도록, 첫 번째 세부 리포트 복사본을 보관해 두는 것이 좋습니다. 코드를 변경한 후 프로파일러를 다시 실행하여 리포트를 비교해 볼 수 있습니다.

  4. 해당 코드 라인을 변경하여 성능을 개선할 수 있는 사항이 있는지 확인합니다.

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

  5. 코드에 잠재적인 성능 개선 사항을 구현합니다. 파일을 저장하고 clear all을 실행합니다. 프로파일러를 다시 실행하고 결과를 원래 리포트와 비교합니다.

    동일한 코드를 두 번 프로파일링하는 경우 코드와 무관하게 기본적으로 존재하는 시간상의 변동으로 매번 약간씩 다른 결과를 얻을 수 있습니다.

  6. 이 절차를 반복하여 계속적으로 성능을 향상시킵니다.

코드에서 대부분의 시간이 몇 개의 내장 함수를 호출하는 데 쓰여지고 있다면, 코드가 최적화된 상태일 가능성이 높습니다.

프로파일러 사용하기

MATLAB 코드 파일 또는 코드 라인을 프로파일링하려면 다음을 수행하십시오.

  1. 다음 방법 중 하나를 사용하여 프로파일러를 엽니다.

    • 명령 창에 profile viewer를 입력합니다.

    • 홈(Home) 탭의 코드(Code) 섹션에서 실행 시간 측정(Run and Time)을 클릭합니다.

    • 편집기에서, 편집기(Editor) 탭의 실행(Evaluate) 섹션에서 실행 시간 측정(Run and Time)을 클릭합니다. 이 방법을 사용할 경우 프로파일러가 현재 편집기 탭에서 코드를 자동으로 프로파일링합니다. 프로파일링하려는 코드가 맞으면 4단계로 건너뜁니다.

  2. 이 코드 실행(Run this code) 필드에 실행할 명령문을 입력합니다.

    예를 들어, 다음과 같이 MATLAB과 함께 제공되는 로트카-볼테라(Lotka-Volterra) 예제를 실행할 수 있습니다.

    [t,y] = ode23('lotka',[0 2],[20;20])

    현재 MATLAB 세션에서 명령문을 이전에 프로파일링한 적이 있는 경우에는 이 코드 실행(Run this code) 목록에서 선택할 수 있습니다. 이 경우, MATLAB이 코드를 자동으로 프로파일링하므로 4단계로 건너뛸 수 있습니다.

  3. 프로파일링 시작(Start Profiling)을 클릭합니다.

    프로파일러가 실행되는 동안에는 프로파일 시간(Profile time) 표시가 녹색으로 나타나고 보고되는 시간(초)이 증가합니다. 프로파일 시간(Profile time) 표시는 프로파일러 창의 오른쪽 상단에 나타납니다.

    프로파일러가 완료되면 프로파일 시간(Profile time) 표시가 검은색으로 바뀌고 프로파일러가 실행된 시간이 표시됩니다. 프로파일링한 명령문은 명령 창에서 실행된 것으로 표시됩니다.

    이 시간은 명령문을 실행하는 데 걸린 실제 시간이 아닙니다. 프로파일링 시작(Start Profiling)을 클릭했을 때부터 프로파일링이 중지될 때까지 걸린 경과 시간입니다. 보고된 시간이 예상과 많이 다른 경우(예: 간단한 명령문이 수백 초가 걸린 경우), 사용자가 필요 이상으로 더 오래 프로파일링한 것일 수 있습니다. 이 시간은 프로파일 요약 리포트 통계에 보고된 시간과 일치하지 않습니다. 프로파일 요약 리포트 통계에 보고된 시간은 기본적으로 performance 클록 시간을 기반으로 합니다. 다른 유형의 클록을 사용하여 프로파일 통계를 확인하기 위해서는 프로파일러 대신, profile 함수를 사용하십시오.

  4. 프로파일링이 완료되면 프로파일러 창에 프로파일 요약 리포트가 나타납니다. 자세한 내용은 프로파일 요약 리포트 항목을 참조하십시오.

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

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

  1. 프로파일러에서 프로파일링 시작(Start Profiling)을 클릭합니다. 이 코드 실행(Run this code) 필드에 코드가 나타나지 않도록 하십시오.

  2. 명령 창에 프로파일링할 명령문을 입력한 후 실행합니다.

  3. 모든 명령문을 실행한 후 프로파일러에서 프로파일링 중지(Stop Profiling)를 클릭하고 프로파일 요약 리포트를 확인합니다.

사용자 인터페이스 프로파일링하기

Signal Processing Toolbox™에 포함된 필터 설계 및 해석 툴과 같은 사용자 인터페이스에 대해 프로파일러를 실행할 수 있습니다. 또는 GUIDE를 사용하여 빌드한 것과 같이 직접 생성한 인터페이스를 프로파일링할 수 있습니다.

사용자 인터페이스를 프로파일링하려면 다음을 수행하십시오.

  1. 프로파일러에서 프로파일링 시작(Start Profiling)을 클릭합니다. 이 코드 실행(Run this code) 필드에 코드가 나타나지 않도록 하십시오.

  2. 사용자 인터페이스를 시작합니다.

  3. 인터페이스를 사용합니다. 인터페이스를 다 사용한 뒤 프로파일러에서 프로파일링 중지(Stop Profiling)를 클릭하고 프로파일 요약 리포트를 확인합니다.

참고

사용자 인터페이스 시작 과정이 프로파일링되지 않도록 하려면 1단계와 2단계를 반대로 수행하십시오. 즉, 프로파일링 시작(Start Profiling)을 클릭하기 전에 사용자 인터페이스를 시작하십시오.

프로파일 요약 리포트

프로파일 요약 리포트는 함수의 전체 실행에 대한 통계를 보여주고 호출된 각 함수에 대한 요약 통계를 제공합니다. 다음은 로트카-볼테라(Lotka-Volterra) 모델에 대한 프로파일 요약 리포트 이미지입니다. 프로파일러 사용하기 항목을 참조하십시오.

프로파일 요약 리포트가 제공하는 정보는 다음과 같습니다.

설명
함수 이름(Function Name)

프로파일링된 코드가 호출한 모든 함수의 목록입니다. 처음에 함수가 처리되는 데 걸린 시간순으로 표시됩니다.

호출(Calls)

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

총 시간(Total Time)

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

자체 시간(Self Time)

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

총 시간 플롯(Total Time Plot)

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

요약 리포트에서는 다음을 수행할 수 있습니다.

  • 인쇄 버튼 을 클릭하여 리포트를 인쇄합니다.

  • 함수 이름(Function Name) 열에서 함수 이름을 클릭하여 특정 함수에 대한 세부 정보를 확인합니다. 자세한 내용은 프로파일 세부 리포트 항목을 참조하십시오.

  • 열 이름을 클릭하여 지정된 열을 기준으로 정렬합니다. 예를 들어, 함수 이름(Function Name) 링크를 클릭하면 함수를 사전순으로 정렬할 수 있습니다. 처음 결과는 총 시간(Total Time)을 기준으로 정렬한 것입니다.

프로파일 세부 리포트

프로파일 세부 리포트는 MATLAB에서 프로파일링 중에 호출한 함수에 대한 프로파일링 결과를 보여줍니다.

프로파일 세부 리포트를 열려면 프로파일 요약 리포트에서 함수 이름을 클릭하십시오. 프로파일 세부 리포트에서 프로파일 요약 리포트로 돌아가려면 프로파일 창의 도구 모음에서 을 클릭하십시오.

프로파일 세부 리포트의 헤더에는 다음 정보가 포함되어 있습니다.

  • 프로파일링된 함수 이름

  • 상위(부모) 함수에서 프로파일링된 함수를 호출한 횟수

  • 프로파일링된 함수에 소요된 시간

  • 디폴트 편집기에서 함수를 열기 위한 링크

  • 별도의 창에 리포트를 복사하기 위한 링크. 리포트의 복사본를 저장하면, 파일을 변경하고 변경 사항이 함수에 미치는 영향을 비교하려는 경우 유용합니다.

프로파일 세부 리포트에 포함시킬 섹션을 지정하려면 리포트 맨 위에 있는 체크박스를 선택하고 새로 고침(Refresh) 버튼을 클릭합니다. 다음과 같은 옵션을 체크박스에서 선택할 수 있습니다.

표시 옵션세부 정보
상위(부모) 함수 표시(Show parent functions)

상위(부모) 함수에 대한 정보를 세부 리포트에 대한 링크와 함께 표시합니다. 상위(부모) 함수에 대한 프로파일 세부 리포트를 열려면 함수 이름을 클릭하십시오.

시간 소요 큰 라인 표시(Show busy lines)

프로파일링된 함수 중 처리 시간이 가장 길었던 함수의 라인을 나열합니다.

하위(자식) 함수 표시(Show child functions)

프로파일링된 함수에 의해 호출된 모든 함수를 나열합니다. 하위(자식) 함수에 대한 프로파일 세부 리포트를 열려면 함수 이름을 클릭하십시오.

코드 분석기 결과 표시(Show Code Analyzer results)

프로파일링된 함수의 문제점과 잠재적인 개선 사항에 대한 정보를 표시합니다.

파일 실행률 표시(Show file coverage)

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

함수 목록 표시(Show function listing)

함수가 MATLAB 코드 파일인 경우 함수의 소스 코드를 표시합니다.

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

  • 각 코드 라인의 실행 시간

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

  • 라인 번호

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

    • 녹색 — 주석 처리된 라인

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

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

기본적으로 프로파일 세부 리포트는 실행 시간이 가장 긴 코드 라인을 강조 표시합니다. 강조 표시 색이 진할수록 코드 라인의 실행 시간이 긴 것을 나타냅니다. 강조 표시된 조건을 변경하려면 코드 색 강조 표시 드롭다운 목록을 사용하십시오.

참고 항목

관련 항목