주요 콘텐츠

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

R2026b

이 예제에서는 For Each Subsystem을 사용하여 다중 코어에서 모델 실행 속도를 높이는 방법을 보여줍니다. 멀티스레드 실행의 효과를 알아보기 위해 이 예제에서는 고속 액셀러레이터 모드에서 단일 스레드 실행과 멀티스레드 실행 간의 시뮬레이션 성능을 비교합니다.

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

모델을 엽니다.

mdl = 'slexForEachMultithreaded';
open_system(mdl);

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

다음 코드는 slexForEachMultithreaded 모델 시뮬레이션의 타이밍 정보를 캡처하는 방법을 보여줍니다. 기준 시뮬레이션을 구성하려면 Simulink.SimulationInput 객체를 생성하십시오. SimulationInput 객체는 시뮬레이션에 사용할 파라미터 값을 저장합니다.

simIn = Simulink.SimulationInput(mdl);

기본적으로 For Each Subsystem에는 멀티스레드 시뮬레이션이 지원됩니다. 멀티스레드 시뮬레이션이 적용되지 않도록 하기 위해 setModelParameter를 사용하여 MultithreadedSim 파라미터를 설정합니다. 단일 스레드 시뮬레이션에서 For Each Subsystem의 여러 반복에서 수행되는 계산은 각 시간 스텝 동안 순차적으로 실행됩니다. MultithreadedSim 파라미터에 대한 자세한 내용은 Using the MultithreadedSim Parameter 항목을 참조하십시오.

simIn = setModelParameter(simIn, MultithreadedSim='off');

단일 스레드 타이밍 정보를 캡처하기 위해 모델을 시뮬레이션하고 총 실행 시간을 추출합니다.

simOut = sim(simIn);
singleThreadTimingInfo = simOut.SimulationMetadata.TimingInfo;
singleThreadExec = singleThreadTimingInfo.ExecutionElapsedWallTime;
### Searching for referenced models in model 'slexForEachMultithreaded'.
### Total of 1 models to build.
### Building the rapid accelerator target for model: slexForEachMultithreaded
### Successfully built the rapid accelerator target for model: slexForEachMultithreaded

멀티스레드 시뮬레이션 시간 측정하기

명시적으로 멀티스레딩 지원을 사용하기 위해 setModelParameter를 사용합니다. 멀티스레드 시뮬레이션에서 For Each Subsystem의 여러 반복에서 수행되는 계산은 다중 코어에 할당됩니다. 시뮬레이션 속도를 높이기 위해 시스템은 이러한 계산을 병렬로 수행합니다.

simIn = setModelParameter(simIn, MultithreadedSim='auto');

멀티스레드 타이밍 정보를 캡처하기 위해 모델을 시뮬레이션하고 총 실행 시간을 추출합니다.

simOut = sim(simIn);
multithreadTimingInfo = simOut.SimulationMetadata.TimingInfo;
multithreadExec = multithreadTimingInfo.ExecutionElapsedWallTime;
### Searching for referenced models in model 'slexForEachMultithreaded'.
### Total of 1 models to build.
### Building the rapid accelerator target for model: slexForEachMultithreaded
### Successfully built the rapid accelerator target for model: slexForEachMultithreaded

시뮬레이션 성능 계산하기

성능 향상 정도를 계산하기 위해, 실행 시간을 단일 스레드 시뮬레이션의 실행 시간으로 나눕니다. 시뮬레이션 시간 성능은 하드웨어에 따라 다를 수 있습니다.

각 시뮬레이션의 타이밍을 비교하기 위한 테이블을 만듭니다.

ExecutionTime = [singleThreadExec; multithreadExec];
SimulationPerformance = [singleThreadExec/singleThreadExec;
    multithreadExec/singleThreadExec];

simNames = ["Single-Threaded"; "Multithreaded"];
timingTable = table(ExecutionTime, SimulationPerformance, RowNames=simNames);
timingTable
timingTable =

  2×2 table

                       ExecutionTime    SimulationPerformance
                       _____________    _____________________

    Single-Threaded       67.646                     1       
    Multithreaded         44.339               0.65546       

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

참고 항목

| |

도움말 항목