Main Content

GPU에서 MATLAB 함수 실행하기

GPU에서 MATLAB® 함수를 실행하여 코드의 속도를 높일 수 있습니다. MATLAB에서의 GPU 연산은 Parallel Computing Toolbox™를 필요로 합니다.

gpuArray 인수를 갖는 MATLAB 함수

MATLAB과 기타 툴박스의 많은 함수는 gpuArray 데이터 인수를 제공받으면 자동으로 GPU에서 실행됩니다. MATLAB에서 gpuArray는 GPU에 저장되는 배열을 나타냅니다.

A = gpuArray([1 0 1; -1 -2 0; 0 1 -1]);
e = eig(A);

하나 이상의 gpuArray를 데이터 입력 인수로 사용하여 이러한 함수를 호출할 때마다 함수가 GPU에서 실행됩니다. size처럼 숫자형 데이터를 로컬 작업 공간으로 반환하는 것이 더 적합한 경우를 제외하고, 이 함수는 결과로 gpuArray를 생성합니다. 동일한 함수 호출에서 호스트 메모리에 저장된 gpuArray 데이터와 배열을 둘 다 사용하여 입력값을 혼합할 수 있습니다.gpuArray 지원 함수에는 이산 푸리에 변환(fft), 행렬 곱셈(mtimes), 행렬 왼쪽 나눗셈(mldivide)을 비롯하여 수백 개가 있습니다.

gpuArray 입력값의 조건

GPU 지원 함수는 입력 데이터가 GPU에 있는 경우에만 GPU에서 실행됩니다. 차원 또는 인덱스와 같은 파라미터 인수의 데이터형은 함수가 실행되는 위치에 영향을 주지 않습니다. 예를 들어, 다음 코드에 있는 sum 함수는 첫 번째 입력값인 데이터가 GPU에 있기 때문에 GPU에서 실행됩니다.

A = rand(10);
d = 2;
sum(gpuArray(A),d);
그러나 다음 코드에 있는 sum 함수는 첫 번째 입력값인 데이터가 GPU에 있지 않기 때문에 GPU에서 실행되지 않습니다.
A = rand(10);
d = 2;
sum(A,gpuArray(d));

GPU에서 복소수 사용하기

GPU에서 실행되는 함수의 출력값이 복소수일 수 있는 경우, 이 함수의 입력 인수를 명시적으로 복소수로 지정해야 합니다. 자세한 내용은 GPU에서 복소수 사용하기 항목을 참조하십시오.

GPU에서 희소 형식 배열 사용하기

sparse 함수는 희소 형식 gpuArray 객체를 만드는 데 사용할 수 있습니다. 많은 MATLAB 함수가 희소 형식 gpuArray 객체를 지원합니다. 자세한 내용은 GPU에서 희소 형식 배열 사용하기 항목을 참조하십시오.

gpuArray 지원 함수 확인하기

몇몇 MATLAB 툴박스에는 gpuArray를 지원하는 함수가 포함되어 있습니다. 이러한 툴박스에서 gpuArray 객체를 지원하는 모든 함수 목록을 보려면 다음 표에 나와 있는 링크를 사용하십시오. 목록에서 정보 표시가 있는 함수에는 GPU에서 함수 실행 시 유의해야 할 사용법 관련 참고 및 제한 사항이 있습니다. 함수 도움말 페이지의 확장 기능 섹션에서 사용법 관련 참고 및 제한 사항을 확인할 수 있습니다. gpuArray를 지원하는 각 함수의 업데이트에 대한 자세한 내용은 릴리스 정보를 참조하십시오.

툴박스 이름gpuArray를 지원하는 함수 목록GPU 관련 문서
MATLABgpuArray를 지원하는 함수 
Statistics and Machine Learning Toolbox™gpuArray를 지원하는 함수 (Statistics and Machine Learning Toolbox)Analyze and Model Data on GPU (Statistics and Machine Learning Toolbox)
Image Processing Toolbox™gpuArray를 지원하는 함수 (Image Processing Toolbox)GPU 연산 (Image Processing Toolbox)
Deep Learning Toolbox™

gpuArray를 지원하는 함수 (Deep Learning Toolbox)

*(GPU를 사용한 딥러닝 항목 참조)

Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud (Deep Learning Toolbox)

복수의 GPU에서 MATLAB을 사용한 딥러닝 (Deep Learning Toolbox)

Computer Vision Toolbox™gpuArray를 지원하는 함수 (Computer Vision Toolbox)GPU 코드 생성 및 가속 (Computer Vision Toolbox)
Communications Toolbox™gpuArray를 지원하는 함수 (Communications Toolbox)코드 생성 및 가속 지원 (Communications Toolbox)
Signal Processing Toolbox™gpuArray를 지원하는 함수 (Signal Processing Toolbox)코드 생성 및 GPU 지원 (Signal Processing Toolbox)
Audio Toolbox™gpuArray를 지원하는 함수 (Audio Toolbox)Code Generation and GPU Support (Audio Toolbox)
Wavelet Toolbox™gpuArray를 지원하는 함수 (Wavelet Toolbox)코드 생성 및 GPU 지원 (Wavelet Toolbox)
Curve Fitting Toolbox™gpuArray를 지원하는 함수 (Curve Fitting Toolbox) 

모든 MathWorks® 제품에서 gpuArray를 지원하는 함수의 목록은 gpuArray 지원 함수 페이지를 참조하십시오. 또는 제품별로 필터링할 수도 있습니다. 도움말 표시줄에서 함수를 클릭합니다. 함수 목록의 왼쪽 창에서 찾아볼 제품, 예를 들어, MATLAB을 선택합니다. 왼쪽 창 하단에서 GPU 배열을 선택합니다. gpuArray를 지원하는 함수가 없는 제품을 선택할 경우 GPU 배열 필터가 제공되지 않습니다.

GPU를 사용한 딥러닝

지원되는 GPU 및 Parallel Computing Toolbox를 사용하고 있다면 Deep Learning Toolbox의 함수 대부분에서 GPU가 자동으로 지원됩니다. 데이터를 gpuArray로 변환할 필요가 없습니다. 다음은 사용 가능한 경우 GPU에서 기본적으로 실행되는 함수에 관한 일부 목록입니다.

Deep Learning Toolbox에서의 GPU 자동 지원에 대한 자세한 내용은 Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud (Deep Learning Toolbox) 항목을 참조하십시오.

dlnetwork (Deep Learning Toolbox) 객체 또는 모델 함수로 정의된 신경망을 사용하는 신경망 및 워크플로의 경우 데이터를 gpuArray로 변환하십시오. GPU에서 사용자 지정 훈련 루프 또는 추론을 실행하려면 gpuArray를 지원하는 함수 (Deep Learning Toolbox)를 사용합니다.

GPU를 확인하거나 선택하기

지원되는 GPU가 있는 경우 MATLAB은 GPU 연산에 자동으로 GPU를 사용합니다. 여러 개의 GPU가 있는 경우에는 gpuDeviceTable을 사용하여 시스템에서 감지된 모든 GPU의 속성을 검토할 수 있습니다. gpuDevice를 사용하여 그중 하나를 선택하거나, 여러 개의 GPU를 병렬 풀에서 사용할 수 있습니다. 자세한 내용은 GPU 장치를 식별하고 선택하기 항목과 Run MATLAB Functions on Multiple GPUs 항목을 참조하십시오. GPU 지원 여부를 확인하려면 GPU 연산 요구 사항 항목을 참조하십시오.

gpuDeviceTable
    Index           Name           ComputeCapability    DeviceAvailable    DeviceSelected
    _____    __________________    _________________    _______________    ______________

      1      "NVIDIA RTX A5000"          "8.6"               true              true      
      2      "Quadro P620"               "6.1"               true              false     

또는 MATLAB® 데스크탑에서, 사용 가능한 GPU 장치 수를 확인하고, 몇 가지 속성을 검사하고, 사용할 장치를 선택할 수 있습니다. 탭의 환경 영역에서 병렬연산 > GPU 환경 선택을 선택합니다.

The Parallel menu, including the Select GPU Environment pane showing two GPU devices. A tick next to the first device indicates that it is the selected device.

GPU에서 MATLAB 함수 사용하기

이 예제에서는 gpuArray를 지원하는 MATLAB 함수를 사용하여 gpuArray 객체로 연산을 수행하는 방법을 보여줍니다. gpuDevice 함수를 사용하여 GPU의 속성을 확인할 수 있습니다.

gpuDevice
ans = 
  CUDADevice with properties:

                      Name: 'Quadro P620'
                     Index: 2
         ComputeCapability: '6.1'
            SupportsDouble: 1
     GraphicsDriverVersion: '511.79'
               DriverModel: 'WDDM'
            ToolkitVersion: 11.2000
        MaxThreadsPerBlock: 1024
          MaxShmemPerBlock: 49152 (49.15 KB)
        MaxThreadBlockSize: [1024 1024 64]
               MaxGridSize: [2.1475e+09 65535 65535]
                 SIMDWidth: 32
               TotalMemory: 2147287040 (2.15 GB)
           AvailableMemory: 1615209678 (1.62 GB)
               CachePolicy: 'balanced'
       MultiprocessorCount: 4
              ClockRateKHz: 1354000
               ComputeMode: 'Default'
      GPUOverlapsTransfers: 1
    KernelExecutionTimeout: 1
          CanMapHostMemory: 1
           DeviceSupported: 1
           DeviceAvailable: 1
            DeviceSelected: 1

-15에서 15까지의 값을 반복하는 행 벡터를 만듭니다. 이 벡터를 GPU로 전송하고 gpuArray 객체를 생성하기 위해 gpuArray 함수를 사용합니다.

X = [-15:15 0 -15:15 0 -15:15];
gpuX = gpuArray(X);
whos gpuX
  Name      Size            Bytes  Class       Attributes

  gpuX      1x95              760  gpuArray              

gpuArray 객체로 연산을 수행하려면 gpuArray를 지원하는 MATLAB 함수를 사용하십시오. MATLAB은 자동으로 GPU에서 계산을 실행합니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 항목을 참조하십시오. 예를 들면 diag, expm, mod, round, abs, fliplr을 함께 사용합니다.

gpuE = expm(diag(gpuX,-1)) * expm(diag(gpuX,1));
gpuM = mod(round(abs(gpuE)),2);
gpuF = gpuM + fliplr(gpuM);

결과를 플로팅합니다.

imagesc(gpuF);
colormap(flip(gray));

GPU에서 다시 데이터를 전송해야 하는 경우 gather를 사용합니다. 데이터를 다시 CPU로 전송하는 작업은 비용이 많이 들 수 있습니다. 작업 결과를 gpuArray를 지원하지 않는 함수에서 사용해야 하는 경우가 아니라면 일반적으로 CPU로 전송할 필요가 없습니다.

result = gather(gpuF);
whos result
  Name         Size            Bytes  Class     Attributes

  result      96x96            73728  double              

GPU와 CPU 사이에는 수치 정밀도와 알고리즘의 차이가 있으므로 일반적으로 CPU에서 코드를 실행한 결과와 GPU에서 코드를 실행한 결과가 서로 다를 수 있습니다. CPU와 GPU에서 계산되는 각각의 답은 참값인 해석적 결과에 대한 부동소수점 근삿값으로서 둘은 똑같이 타당한 답이지만, 계산 과정에서의 반올림 동작이 서로 다릅니다. 이 예제에서 결과는 정수이며 round는 반올림 오차를 제거합니다.

GPU 사용 예제

GPU에서의 MATLAB 함수 실행 예제

아래 나열된 예제에서는 gpuArray 객체를 지원되는 MATLAB 함수로 전달하여 이러한 함수가 GPU에서 실행되도록 합니다.

툴박스 이름예제
MATLAB
Image Processing Toolbox
Deep Learning Toolbox
Statistics and Machine Learning Toolbox
Signal Processing Toolbox
Audio Toolbox
Communications Toolbox
Wavelet Toolbox

GPU 사용 기타 예제

아래 나열된 예제에서는 기타 자동 GPU 지원을 활용합니다.

툴박스 이름예제
Deep Learning Toolbox
Communications Toolbox

감사의 글

MAGMA는 GPU 가속을 활용하는 선형 대수 루틴 라이브러리입니다. Parallel Computing Toolbox에서 gpuArray 객체에 구현된 선형 대수 함수는 우수한 성능과 정확도를 확보하기 위해 MAGMA를 활용합니다.

참고 항목

| | |

관련 예제

세부 정보