Main Content

성능을 개선하기 위한 기법

코드 성능의 속도를 높이기 위하여 다음 기법을 고려합니다.

환경

계산 리소스를 공유하면서 MATLAB® 코드의 성능을 저하시키는 백그라운드 프로세스를 확인하십시오.

코드 구조

코드를 구성할 때 다음에 유의합니다.

  • 스크립트 대신 함수를 사용합니다. 일반적으로 함수가 더 빠릅니다.

  • 중첩 함수보다는 로컬 함수를 사용합니다. 이는 함수에서 메인 함수의 변수에 액세스하지 않아도 되는 경우에 특히 유용합니다.

  • 모듈식 프로그래밍을 사용합니다. 드물게 액세스되는 코드가 들어 있는 파일이나 덩치가 큰 파일을 방지하려면 잘 짜인 간단한 함수로 코드를 분할하십시오. 이 방법으로 최초 실행에 걸리는 시간을 줄일 수 있습니다.

성능 개선을 위한 프로그래밍 사례

코드 성능 개선을 위해 다음의 프로그래밍 방식을 고려하십시오.

  • 사전할당(Preallocation) — 계속해서 배열의 크기를 조정하는 대신 배열에 필요한 최대 공간을 사전할당하는 것이 좋습니다. 자세한 내용은 사전할당(Preallocation) 항목을 참조하십시오.

  • 벡터화 — 루프 기반 코드를 작성하는 대신 MATLAB 행렬과 벡터 연산을 사용하는 것이 좋습니다. 자세한 내용은 벡터화 항목을 참조하십시오.

  • 루프 밖에 독립적인 연산 배치 — 코드가 for 루프 반복이나 while 루프 반복과 다르게 실행되지 않는 경우 코드를 루프 밖으로 옮겨 중복 계산을 피하도록 합니다.

  • 데이터형이 변경된 경우 새 변수 생성 — 기존 변수에 다른 형식의 데이터를 대입하기보다는 새 변수를 생성합니다. 기존 변수의 클래스나 배열 형태를 변경하면 이를 처리하는 데 시간이 더 걸립니다.

  • 쇼트서킷 연산자 사용 — 가능하다면 쇼트서킷 논리 연산자(&&, ||)를 사용합니다. 쇼트서킷을 적용하면 MATLAB이 첫 번째 피연산자로 결과를 완전하게 구할 수 없는 경우에만 두 번째 피연산자를 실행하므로 더욱 효율적입니다. 자세한 내용은 Short-Circuit AND 항목과 Short-Circuit OR 항목을 참조하십시오.

  • 전역 변수 사용 지양 — 전역 변수는 MATLAB 코드의 성능을 저하시킬 수 있으므로 전역 변수의 사용을 최소화하는 것이 바람직한 프로그래밍 방식입니다.

  • 내장 함수 오버로드 지양 — 표준 MATLAB 데이터 클래스에 내장 함수를 오버로드하는 것은 피하십시오.

  • "코드로서의 데이터" 사용 지양 — 상수 값을 가진 변수를 생성하는 큰 규모의 코드(예: 500라인 이상)가 있는 경우 변수를 생성하여 예를 들면 MAT 파일이나 .csv 파일에 저장하는 것이 좋습니다. 그러면 변수를 생성하는 코드를 실행하는 대신 해당 변수를 불러올 수 있습니다.

  • 백그라운드에서 코드 실행 — 백그라운드에서 함수를 실행하려면 parfevalbackgroundPool을 함께 사용하십시오. MATLAB에서 다른 코드를 동시에 실행하고 앱의 반응성을 더 높일 수 있습니다. 자세한 내용은 백그라운드에서 함수 실행하기 항목을 참조하십시오.

  • GPU에서 또는 병렬로 코드 실행 — Parallel Computing Toolbox™ 라이선스가 있는 경우 gpuArray 데이터를 지원되는 함수에 전달하여 GPU에서 코드를 실행하거나 parfor 루프 등을 사용하여 코드를 병렬로 실행하십시오. 자세한 내용은 병렬 연산 해결책 선택하기 (Parallel Computing Toolbox) 항목을 참조하십시오.

특정 MATLAB 함수에 대한 팁

좋은 성능이 요구되는 코드를 작성할 경우 특정 MATLAB 함수에 대한 다음 팁을 고려하십시오.

  • 필요 이상으로 코드를 지우지 않도록 합니다. clear all을 프로그래밍 방식으로 사용하지 마십시오. 자세한 내용은 clear 항목을 참조하십시오.

  • inputname, which, whos, exist(var), dbstack 등 MATLAB의 상태를 쿼리하는 함수 사용을 지양하십시오. 런타임 내부 검사는 많은 계산량을 요합니다.

  • eval, evalc, evalin, feval(fname) 등의 함수 사용을 지양하십시오. 가능하다면 항상 feval에 대한 함수 핸들 입력을 사용하십시오. 텍스트에서 MATLAB 표현식을 간접적으로 실행하는 것은 많은 계산량을 요합니다.

  • 가능하다면 cd, addpath, rmpath 등의 프로그래밍 방식 사용을 지양하십시오. 런타임 중간에 MATLAB 경로를 변경하면 코드가 다시 컴파일됩니다.

관련 항목