솔버 프로파일러, 영점교차 검출, 솔버 재설정에 대해 자세히 알아보십시오.
모델 수정 및 단순화
지금까지 설명한 기법은 대부분 모델 자체를 거의 또는 전혀 변경할 필요가 없습니다. 모델 수정이 수반되는 기법을 적용하면 성능을 추가로 개선할 수 있습니다.
초기화 단계 가속화
모델을 업데이트하거나 열면 Simulink는 마스크 초기화 코드를 실행합니다. set_param을 여러 번 호출하는 복잡한 마스크 초기화 명령이 있다면 연속된 set_param() 호출을 여러 인수 쌍을 사용하는 단일 호출로 통합하는 것을 고려해 보십시오. 이렇게 하면 이러한 호출에 따르는 오버헤드를 줄일 수 있습니다.
마스크 코드 실행에 대해 자세히 알아보십시오.
MATLAB 스크립트를 사용하여 데이터를 로드하고 초기화하는 경우, 대신 MAT 파일을 로드하면 성능이 향상되는 경우가 많습니다. 단점은 MAT 파일의 데이터는 사람이 읽을 수 있는 형식이 아니므로 스크립트보다 다루기 어려울 수 있다는 것입니다. 그러나 로드 방식은 일반적으로 동등한 스크립트보다 데이터를 훨씬 빠르게 초기화합니다.
MAT 파일의 데이터를 작업 공간으로 로드하는 방법에 대해 자세히 알아보십시오.
모델 복잡도 줄이기
충실도를 희생하지 않고 모델을 단순화하는 것은 시뮬레이션 성능을 개선하는 효과적인 방법입니다. 다음은 모델 복잡도를 줄이는 세 가지 방법입니다.
서브시스템을 충실도가 낮은 대안으로 교체. 대부분의 경우 복잡한 서브시스템 모델을 다음 중 하나로 교체하여 모델을 단순화할 수 있습니다.
- System Identification Toolbox™를 사용하여 측정된 입출력 데이터로 만든 선형 또는 비선형 동적 모델
- Model-Based Calibration Toolbox™를 사용하여 만든 충실도 높은 비선형 통계 모델
- Simulink Control Design™을 사용하여 만든 선형 모델
- 룩업 테이블
라이브러리에서 서브시스템의 두 가지 표현을 모두 유지하고, Variant 서브시스템을 사용하여 이를 관리할 수 있습니다.
구성 가능한 서브시스템 블록 사용에 대해 자세히 알아보십시오.
룩업 테이블 사용, 룩업 테이블의 절점 간격 최적화, 룩업 테이블 블록용 생성 코드 최적화에 대해 자세히 알아보십시오.
차수 축소 모델링에 대해 자세히 알아보십시오.
블록 수 줄이기. 모델의 블록 수를 줄이면 시뮬레이션 중에 업데이트해야 하는 블록이 줄어들어 시뮬레이션 실행 속도가 빨라집니다. 벡터화는 블록 수를 줄이는 한 가지 방법입니다. 예를 들어, 비슷한 계산 과정을 거치는 병렬 신호가 여러 개 있다면 이를 하나의 벡터로 결합하여 한 번에 계산해 보십시오. 또 다른 방법은 구성 파라미터의 최적화 > 일반 섹션에서 블록 축소 최적화를 활성화하는 것입니다.
프레임 기반 처리 사용. 프레임 기반 처리에서는 샘플을 한 번에 하나씩 처리하는 대신 일괄 처리합니다. 예를 들어 모델에 아날로그-디지털 컨버터가 포함된 경우 출력 샘플을 버퍼에 수집한 다음 고속 푸리에 변환과 같은 단일 연산으로 버퍼를 처리할 수 있습니다. 이와 같이 데이터를 청크 단위로 처리하면 모델의 블록을 호출해야 하는 횟수가 줄어듭니다. 일반적으로 프레임 크기가 커질수록 스케줄링 오버헤드가 줄어듭니다. 그러나 프레임이 클수록 더 많은 메모리를 사용하며, 메모리 제한은 복잡한 모델의 성능에 부정적인 영향을 줄 수 있습니다. 다양한 프레임 크기로 실험하여 메모리 문제를 일으키지 않으면서 프레임 기반 처리의 성능 이점을 극대화하는 크기를 찾아보십시오.
상호작용성 줄이기
일반적으로 모델의 상호작용성이 높을수록 시뮬레이션에 시간이 더 오래 걸립니다. 이 섹션의 팁은 상호작용성을 일부 포기하여 성능을 개선하는 방법을 보여줍니다.
디버깅 진단 비활성화. 일부 진단 기능을 활성화하면 시뮬레이션이 눈에 띄게 느려집니다. 구성 파라미터 대화 상자의 진단 창에서 이러한 기능을 비활성화할 수 있습니다.
참고: 배열 경계를 초과함 및 솔버 데이터 불일치 진단을 실행하면 모델의 런타임 성능이 눈에 띄게 저하될 수 있습니다.
시뮬레이션 애니메이션 비활성화. 기본적으로 Stateflow 차트는 모델이 실행되는 동안 현재 활성 상태를 강조 표시하고 발생하는 상태 전환을 애니메이션으로 보여줍니다. 이 기능은 디버깅에 유용하지만 시뮬레이션 속도를 떨어뜨립니다. 시뮬레이션을 가속화하려면 Stateflow 차트를 모두 닫거나 애니메이션을 비활성화하십시오. 마찬가지로 Simulink 3D Animation™, SimMechanics™ 시각화, FlightGear 또는 기타 3D 애니메이션 패키지를 사용하는 경우, 애니메이션을 비활성화하거나 장면 충실도를 낮추어 성능을 개선하는 것을 고려해 보십시오.
Stateflow에서 시뮬레이션 속도를 높이는 방법에 대해 자세히 알아보십시오.
뷰어별 파라미터를 조정하고 Enabled Subsystem을 통해 뷰어 관리. 모델에 많은 수의 데이터 점을 표시하는 스코프 뷰어가 있고 스코프를 제거할 수 없다면 뷰어 파라미터를 조정하여 충실도를 낮추고 렌더링 속도를 높여 보십시오. 그러나 데시메이션을 사용하여 플로팅되는 데이터 점의 수를 줄이면 더 많은 데이터 점에서는 분명하게 드러날 짧은 과도 현상이나 기타 현상을 놓칠 위험이 있다는 점에 유의하십시오. Enabled Subsystem에 뷰어를 배치하면 어떤 시각화를 언제 활성화할지 더 정밀하게 제어할 수 있습니다.
스코프 신호 뷰어 파라미터 설정이 성능에 미치는 영향에 대해 자세히 알아보십시오.
Interpreted MATLAB Function 블록 대신 MATLAB 함수 사용
Simulink 모델 내에서 MATLAB 함수를 호출하려면 Interpreted MATLAB Function 블록이나 MATLAB S-function 대신 MATLAB Function 블록을 사용하십시오. MATLAB Function 블록이 더 빠른 대안입니다. 이 블록은 임베디드 가능한 C 코드 생성을 지원합니다. MATLAB Function 블록이 모든 MATLAB 함수를 지원하는 것은 아니지만, 지원하는 MATLAB 언어의 하위 집합은 광범위합니다.
모델의 Interpreted MATLAB Function 블록을 모두 빠르게 찾으려면 성능 어드바이저를 사용하십시오.
MATLAB Function 블록 사용에 대해 자세히 알아보십시오.
대규모 데이터셋을 기록하는 경우. 대량의 데이터를 기록하는 경우(예: To Workspace, To File 또는 Scope 블록이 포함된 모델), 데시메이션을 사용하거나 기록되는 출력을 시뮬레이션의 마지막 부분으로 제한하십시오. 중복 데이터(예: 시간은 한 번만 기록)와 불필요한 데이터(예: 가능하면 double형 대신 정수 값 기록)를 기록하지 마십시오. 기록 재정의를 사용하면 액셀러레이터 모드의 시뮬레이션 타겟을 다시 빌드하지 않고도 기록할 신호를 제어할 수 있습니다.
시뮬레이션 데이터 내보내기에 대해 자세히 알아보십시오.
기타 유용한 기법
다음 기법은 일부 특정 모델에 적용됩니다. 모델이 아래에 설명된 패턴에 해당한다면 이 기법을 사용하여 시뮬레이션 속도를 높일 수 있습니다.
하드웨어 가속 최적화
SIMD(단일 명령 복수 데이터)는 여러 데이터 점에 대해 동일한 연산을 동시에 수행하는 데이터 수준의 병렬 처리 기법입니다. 최신 CPU 중 상당수는 여러 개의 덧셈이나 곱셈을 한 번에 수행하는 등의 SIMD 명령을 갖추고 있습니다. 지원되는 블록에서 계산량이 많은 연산을 수행할 때 SIMD 내장 함수를 사용하면 시뮬레이션 성능을 개선할 수 있습니다.
Simulink는 코드 생성 기술을 사용하는 모든 시뮬레이션 모드(예: 액셀러레이터 모드 또는 고속 액셀러레이터 모드)에서 하드웨어 가속을 위해 SIMD를 지원합니다.
Simulink는 Simulation Target 패널에서 SIMD 유형을 제어하는 configset 파라미터를 제공합니다. 하드웨어 가속 옵션의 경우 기본 선택 항목(“범용 하드웨어 활용”)은 모든 X86 CPU에서 사용할 수 있으며 재빌드가 필요하지 않습니다. 다른 선택 항목(“네이티브 하드웨어 활용”)은 CPU에 따라 달라집니다. CPU가 SSE2/AVX2/AVX512와 같은 최신 SIMD 명령어 세트를 지원한다면 이 옵션을 선택하여 시뮬레이션 속도를 더욱 높일 수 있습니다. (그림 17)