Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

For Each Subsystem을 사용한 멀티스레드 시뮬레이션

이 예제에서는 고속 액셀러레이터 시뮬레이션 모드에서 For Each Subsystem을 사용하여 다중 코어에서 모델 실행 속도를 높이는 방법을 보여줍니다.

단일 스레드 시뮬레이션의 시간 측정하기

이 모델에서 For Each Subsystem은 숫자형 배열 입력을 받습니다. 배열의 각 요소는 각 반복에서 상한으로 사용되고 서브시스템 내에서 MATLAB Function 블록으로 표현되는 계산 집약적인 알고리즘으로 전달됩니다. MATLAB Function 블록에 구현된 알고리즘은 완전 탐색(Brute Force) 방법을 사용하여 지정된 범위 내에서 가장 큰 소수를 계산합니다. 이 방법은 설명을 도울 용도로만 사용됩니다.

modelName = 'slexForEachMultithreaded';
open_system(modelName);

기본적으로 For Each Subsystem에는 멀티스레드 시뮬레이션이 지원됩니다. 멀티스레드 시뮬레이션을 적용하지 않으려면 MATLAB® 명령 창에서 set_param 명령을 실행하십시오. 단일 스레드 시뮬레이션에서 For Each Subsystem의 여러 반복에서 수행되는 계산은 각 시간 스텝 동안 순차적으로 실행됩니다.

set_param(modelName, 'MultithreadedSim', 'off');

고속 액셀러레이터 모드로 실행하면 몇 개의 파일이 만들어지므로 먼저 임시 디렉터리를 만들고 임시 디렉터리로 이동합니다.

originalDir = pwd;
tempDir = tempname;
mkdir(tempDir);
cd(tempDir);

모델의 고속 액셀러레이터 타깃을 빌드합니다. MATLAB 명령 창에 코드 생성과 빌드 프로세스의 진행률이 표시됩니다. 이 표시를 없애려면 명령을 evalc 안에 래핑하십시오.

evalc('Simulink.BlockDiagram.buildRapidAcceleratorTarget(modelName)');

모델을 처음 시뮬레이션할 때 Simulink®가 자동으로 고속 액셀러레이터 시뮬레이션 타깃을 생성하므로 이 빌드 단계는 선택 사항입니다. 이 예제에서 이 단계는 실제 모델 실행 시간에서 고속 액셀러레이터 타깃을 생성하는 데 드는 오버헤드를 분리하는 데 사용됩니다.

고속 액셀러레이터 타깃이 생성된 후에는 모델을 시뮬레이션하고 tictoc를 사용하여 시뮬레이션 시간을 측정합니다.

tic
evalc('sim(modelName)');
toc
Elapsed time is 54.675592 seconds.

멀티스레드 시뮬레이션을 사용하여 다중 코어에서 속도 높이기

명시적으로 멀티스레드 지원을 사용하려면 MATLAB 명령 창에서 set_param 명령을 실행하십시오. 멀티스레드 시뮬레이션에서 For Each Subsystem의 여러 반복에서 수행되는 계산은 다중 코어에 할당되고 속도를 높이기 위해 병렬로 실행됩니다.

set_param(modelName, 'MultithreadedSim', 'auto');

모델이 재구성되었으므로 고속 액셀러레이터 타깃을 다시 빌드합니다.

evalc('Simulink.BlockDiagram.buildRapidAcceleratorTarget(modelName)');

모델을 다시 시뮬레이션하고 멀티스레드 시뮬레이션 시간을 측정합니다. 모델 시뮬레이션이 4개 이상의 코어를 가진 컴퓨터에서 단일 스레드 시뮬레이션보다 두 배 이상 빠르게 실행됨을 알 수 있습니다. 멀티스레드 시뮬레이션에서 운영 체제 문맥 전환은 항상 추가 오버헤드를 일으킨다는 것을 기억하십시오.

tic
evalc('sim(modelName)');
toc
Elapsed time is 22.536143 seconds.

정리하기

모델을 닫고 생성된 파일을 제거합니다.

bdclose(modelName);
cd(originalDir);
rmdir(tempDir, 's');
clear originalDir tempDir;

참고 항목

|