MATLAB 멀티스레딩이란?
테크니컬 컴퓨팅에서 멀티스레딩이란 계산 효율성과 리소스 사용률을 개선하기 위해 단일 프로세스 내에서 여러 스레드를 동시에 실행하는 것을 말합니다. 멀티스레딩을 사용하면 작업을 여러 CPU 코어에 나눠 동시에 실행할 수 있으므로 연산 집약적 애플리케이션의 성능을 개선할 수 있습니다. 이 접근법을 통해 특히 행렬 계산, 푸리에 변환, 영상 처리 등 병렬화가 가능한 작업의 실행 시간을 단축할 수 있습니다. 하지만 경쟁 상태, 교착 상태 및 기타 문제를 방지할 수 있도록 공유 리소스의 신중한 관리가 필요하기도 합니다.
MATLAB 멀티스레딩은 사용하기 쉽습니다. MATLAB® 및 Simulink®를 사용하면 내장 MATLAB 멀티스레딩 및 Parallel Computing Toolbox™의 함수를 사용하는 명시적 병렬성의 두 가지 주요 방법으로 멀티코어 및 멀티프로세서 컴퓨터를 활용할 수 있습니다. 컴퓨터의 연산 능력을 최대치로 사용하여 MATLAB 애플리케이션 및 Simulink 모델을 더 빠르고 효율적으로 실행할 수 있습니다.
암시적 및 명시적 MATLAB 멀티스레딩과 직렬 처리 비교.
내장 MATLAB 멀티스레딩
MATLAB의 내장 멀티스레딩 기능은 런타임에 기본 라이브러리를 사용해 계산을 자동으로 병렬화함으로써 선형대수 및 수치 함수(예: fft, eig, mldivide, svd, sort) 등 많은 함수의 성능을 대폭 개선할 수 있습니다. MATLAB에서는 이 작업을 암시적으로 수행하므로 이를 직접 활성화할 필요가 없습니다. 계산 스레드 개수를 제어하려면 maxNumCompThreads 함수를 사용할 수 있습니다.
마찬가지로, Simulink는 서브시스템, 연동 시뮬레이션, 데이터 흐름을 위한 내장 멀티스레딩 기능을 제공합니다. 필요한 경우 Simulink는 모든 실행 가능한 모델 및 블록을 여러 스레드에서 실행할 수 있도록 준비합니다. Simulink에서 성능 개선 가능성을 감지하면 여러 스레드를 사용해 적합한 모델을 자동으로 실행함으로써 실행 시간을 단축할 수 있습니다.
MATLAB 워커를 사용한 명시적 병렬성
Parallel Computing Toolbox는 병렬 풀을 만들고 사용하기 위한 함수를 제공하여 사용자는 스레드 및 프로세스를 통해 추가적인 하드웨어 리소스를 사용해 애플리케이션의 성능을 향상하고 결과 도출 시간을 단축할 수 있습니다. 병렬 for 루프(parfor), 병렬 대기열(parfeval), 여러 데이터로 단일 프로그램의 병렬 실행(spmd), 병렬 Simulink 시뮬레이션(parsim) 및 기타 병렬 프로그래밍 기능을 사용해 MATLAB 및 Simulink에서 병렬 풀을 활용할 수 있습니다.
점점 더 많은 MATLAB 및 Simulink의 함수와 기능이 추가적인 코딩을 수행하지 않고 병렬 연산 리소스를 활용할 수 있습니다. 예를 들어, Simulink에서 기본 설정 또는 플래그 설정을 통해 일부 인터페이스에서 손쉽게 병렬 지원을 활성화할 수 있습니다.
스레드 기반 병렬 풀
스레드 기반 병렬 풀을 사용하면 병렬성을 달성하고 단일 MATLAB 프로세스 내 여러 스레드로 연산을 분산할 수 있습니다. 이러한 풀은 통신 오버헤드가 낮고 공유 메모리 액세스를 제공하지만, 단일 컴퓨터의 연산에만 사용할 수 있습니다. MATLAB을 사용하면 backgroundPool로 단일 추가 스레드 워커를 활성화할 수 있고, Parallel Computing Toolbox를 사용하면 parpool("Threads")를 통해 여러 스레드 워커를 사용할 수 있습니다.
프로세스 기반 병렬 풀
Parallel Computing Toolbox를 사용하면 로컬 컴퓨터나 원격 클러스터에서 여러 워커 프로세스(계산 엔진)를 사용해 MATLAB 애플리케이션을 병렬로 실행할 수도 있습니다. 기본적으로 이러한 프로세스 워커는 계산 측면에서 단일 스레드로 작동합니다.
멀티스레딩과 달리, 병렬 프로세스 기반 풀에서 제공되는 명시적 병렬성은 MATLAB Parallel Server™로 활성화된 연산 클러스터를 활용해 MATLAB 워커를 사용하는 병렬 애플리케이션을 단일 컴퓨터 너머로 확장할 수 있습니다.
예제 및 방법
소프트웨어 참조
MATLAB 멀티스레딩 FAQ
MATLAB 멀티스레딩은 단일 프로세스 내에서 여러 스레드를 동시에 실행하여 계산 효율성과 자원 활용도를 개선하는 것을 말합니다. MATLAB 멀티스레딩은 암묵적(내장되어 있어 사용자가 제어할 수 없음)일 수도 있고, 명시적(Parallel Computing Toolbox를 통해 활성화하며 사용자가 제어)일 수도 있습니다. 명시적 멀티스레딩은 스레드 기반 또는 프로세스 기반일 수 있습니다.
예. MATLAB에는 실행 시 적절하게 하위 라이브러리의 병렬 기능을 사용하여 계산을 자동으로 병렬화하는 내장 멀티스레딩 기능이 있습니다. 내장 멀티스레딩은 선형대수 및 fft, eig, mldivide, svd, sort와 같은 수치 함수 등 많은 함수에서 지원됩니다.
maxNumCompThreads 함수로 MATLAB이 사용하는 계산 스레드 수를 제어할 수 있습니다.
내장 멀티스레딩은 하위 라이브러리를 사용해 스레드 수준에서 적절히 실행을 암묵적으로 병렬화하는 반면, Parallel Computing Toolbox는 parfor, parfeval, spmd 및 Parallel Pool과 같은 기능을 통해 코드를 명시적으로 병렬화할 수 있는 방법을 제공합니다.
스레드 기반 Parallel Pool은 단일 MATLAB 프로세스 내 여러 스레드에 계산을 명시적으로 분산시켜 통신 오버헤드가 적고 메모리를 공유할 수 있게 합니다. 스레드 기반 병렬 처리는 단일 머신에만 제한됩니다. backgroundPool 또는 parpool(""Threads"")로 스레드 기반 Parallel Pool을 활성화할 수 있습니다.
프로세스 기반 Parallel Pool은 로컬 머신 또는 컴퓨트 클러스터의 여러 MATLAB 프로세스에 계산을 명시적으로 분산시킵니다. (여러 머신에서 실행하려면 MATLAB Parallel Server가 필요합니다.)
스레드 기반 Parallel Pool은 단일 머신에서만 계산이 가능하도록 제한됩니다. 또한 일부 MATLAB 기능은 스레드 기반 Parallel Pool에서 지원되지 않습니다.
예. Simulink는 서브시스템, 코시뮬레이션 및 데이터 흐름에 대해 내장 멀티스레딩 기능을 제공하며, 성능이 개선될 수 있는 경우 적합한 모델을 여러 스레드로 자동 실행합니다.