Main Content

gpuDevice

GPU 장치 쿼리 또는 선택

설명

GPUDevice 객체는 컴퓨터에 있는 GPU(그래픽 처리 장치)를 나타냅니다. GPU를 사용하면 gpuArray 변수를 지원하는 MATLAB® 코드를 실행하거나 CUDAKernel 객체를 사용하여 CUDA 커널을 실행할 수 있습니다.

GPUDevice 객체를 사용하여 GPU 장치의 속성을 검사하거나, GPU 장치를 재설정하거나, GPU가 계산 실행을 마칠 때까지 대기할 수 있습니다. GPUDevice 객체를 가져오려면 gpuDevice 함수를 사용하십시오. gpuDevice 함수를 사용하여 GPU 장치를 선택하거나 선택 취소할 수도 있습니다. 여러 GPU에 액세스할 수 있는 경우에는 gpuDevice 함수를 사용하여 코드를 실행할 특정 GPU 장치를 선택하십시오.

GPU에서 함수를 실행하기 위해 GPUDevice 객체를 사용할 필요는 없습니다. GPU 지원 함수의 사용 방법에 대한 자세한 내용은 GPU에서 MATLAB 함수 실행하기 항목을 참조하십시오.

생성

설명

gpuDevice는 현재 선택된 GPU 장치의 속성을 표시합니다. 현재 선택된 장치가 없는 경우 gpuDevice는 디폴트 장치를 선택하며 그 내용을 지우지 않습니다. GPU 장치의 속성을 검사하려는 경우 이 구문을 사용하십시오.

예제

D = gpuDevice는 현재 선택된 장치를 나타내는 GPUDevice 객체를 반환합니다. 현재 선택된 장치가 없는 경우 gpuDevice는 디폴트 장치를 선택하며, 그 내용을 지우지 않고 이 장치를 나타내는 GPUDevice 객체를 반환합니다.

예제

D = gpuDevice(indx)는 인덱스 indx로 지정된 GPU 장치를 선택합니다. 지정된 GPU 장치가 지원되지 않는 경우에는 오류가 발생합니다. 이 구문은 지정된 장치가 이미 현재 선택되어 있는 경우에도 이 장치를 재설정하고 장치의 메모리를 지웁니다(reset 함수와 동일). gpuArray 또는 CUDAKernel 변수를 나타내는 모든 작업 공간 변수는 이제 유효하지 않으므로, 작업 공간에서 지우거나 다시 정의해야 합니다.

예제

gpuDevice([])는 빈 인수를 가지며(인수가 없는 것이 아님), GPU 장치를 선택 취소하고 장치의 메모리에서 gpuArrayCUDAKernel 변수를 지웁니다. 이 구문을 실행하면 현재 장치로 선택된 GPU 장치가 없게 됩니다.

입력 인수

모두 확장

GPU 장치의 인덱스로, 1에서 gpuDeviceCount 사이의 정수로 지정됩니다.

예: gpuDevice(1);

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

속성

모두 확장

읽기 전용 속성입니다.

GPU 장치의 이름으로, 문자형 배열로 지정됩니다. 장치에 할당되는 이름은 GPU 장치 모델에서 도출됩니다.

읽기 전용 속성입니다.

GPU 장치의 인덱스로, 1에서 gpuDeviceCount 사이의 정수로 지정됩니다. 이 인덱스를 사용하여 특정 GPU 장치를 선택합니다.

읽기 전용 속성입니다.

GPU 장치의 계산 성능으로, 문자형 배열로 지정됩니다. 선택한 GPU 장치를 MATLAB에서 사용하려면 ComputeCapabilityGPU 연산 요구 사항에 나와 있는 필수 사양을 충족해야 합니다.

읽기 전용 속성입니다.

배정밀도 연산의 지원 여부에 대한 플래그이며, 논리값 0(false) 또는 1(true)로 지정됩니다.

R2023a 이후

읽기 전용 속성입니다.

GPU 장치가 현재 사용 중인 그래픽스 드라이버 버전으로, 문자형 배열로 지정됩니다.

GPU를 위한 최신 그래픽스 드라이버는 NVIDIA 드라이버 다운로드 페이지에서 다운로드하십시오.

R2023a 이후

읽기 전용 속성입니다.

그래픽스 드라이버의 운영 모델로, 다음 값 중 하나로 지정됩니다.

  • 'WDDM' – 디스플레이 운영 모델을 사용합니다.

  • 'TCC' – 연산 운영 모델을 사용합니다. 'TCC'는 Windows® 그래픽을 비활성화하고 대규모 계산의 성능을 향상시킬 수 있습니다.

  • 'N/A''WDDM''TCC'는 Windows에서만 사용할 수 있습니다. 기타운영 체제에서는 드라이버 모델이 'N/A'입니다.

모델 전환과 'TCC'를 지원하는 GPU 장치에 대한 자세한 내용은 NVIDIA® 문서를 참조하십시오.

읽기 전용 속성입니다.

현재 MATLAB 릴리스에서 사용하는 CUDA 툴킷 버전으로, 스칼라 값으로 지정됩니다.

읽기 전용 속성입니다.

CUDAKernel 실행 중에 지원되는 최대 블록당 스레드 수로, 스칼라 값으로 지정됩니다.

예: 1024

읽기 전용 속성입니다.

CUDAKernel 실행 중에 스레드 블록이 사용할 수 있는 공유 메모리의 지원되는 최대 크기로, 스칼라 값으로 지정됩니다.

예: 49152

읽기 전용 속성입니다.

스레드 블록의 각 차원의 최대 크기로, 벡터로 지정됩니다. 스레드 블록의 각 차원은 이러한 차원 값을 초과해서는 안 됩니다. 또한 스레드 블록 크기의 곱은 MaxThreadsPerBlock을 초과해서는 안 됩니다.

읽기 전용 속성입니다.

스레드 블록 그리드의 최대 크기로, 벡터로 지정됩니다.

읽기 전용 속성입니다.

동시에 실행되는 스레드 수로, 스칼라 값으로 지정됩니다.

읽기 전용 속성입니다.

장치의 총 메모리(단위: 바이트)로, 스칼라 값으로 지정됩니다.

읽기 전용 속성입니다.

데이터에 사용 가능한 총 메모리(단위: 바이트)로, 스칼라 값으로 지정됩니다. 이 속성은 현재 선택된 장치에만 사용할 수 있습니다. 이 값은 메모리 캐싱으로 인해 NVIDIA System Management Interface가 보고한 값과 다를 수 있습니다.

R2023a 이후

GPU 장치의 캐싱 정책으로, 'balanced', 'minimum' 또는 'maximum'으로 지정됩니다. 캐싱 정책은 계산을 가속화하기 위해 캐시할 수 있는 GPU 메모리 양을 결정하며, 다음 값 중 하나로 지정됩니다.

  • 'minimum' – GPU 장치에서 캐시할 수 있는 메모리 양이 매우 적습니다.

  • 'balanced' – GPU 장치에서 캐시할 수 있는 메모리 양이 균형을 이룹니다. 이 정책은 GPU 메모리 사용량과 계산 성능 간의 균형을 제공합니다.

  • 'maximum' – GPU 장치에 캐시할 수 있는 메모리 양이 장치의 총 메모리에 의해서만 제한됩니다.

디폴트 값은 'Default' 또는 'Prohibited' 계산 모드에 있는 장치의 경우 'balanced'이고, 'Exclusive process' 계산 모드에 있는 장치의 경우 'maximum'입니다. 계산 모드 속성에 대한 자세한 내용은 ComputeMode 항목을 참조하십시오.

참고

  • reset을 사용하여 장치를 재설정하거나, gpuDevice([])를 사용하여 장치를 지우거나, gpuDevice를 사용하여 다른 장치를 선택하면 캐싱 정책이 디폴트 정책으로 재설정됩니다.

  • GPUDevice 객체가 포함된 MAT 파일을 저장하고 불러와도 캐싱 정책은 유지되지 않습니다.

  • 선택하지 않은 장치의 캐싱 정책은 설정할 수 없습니다. 예를 들어 첫 번째 GPUDevice 객체를 배열에 저장하고 다른 장치를 선택한 후에는 첫 번째 GPUDevice 객체의 캐싱 정책을 설정할 수 없습니다.

읽기 전용 속성입니다.

장치에 있는 스트리밍 멀티프로세서 개수로, 스칼라 값으로 지정됩니다.

읽기 전용 속성입니다.

GPU의 피크 클록 속도(단위: kHz)로, 스칼라 값으로 지정됩니다.

읽기 전용 속성입니다.

장치의 계산 모드로, 다음 값 중 하나로 지정됩니다.

'Default'장치가 제한되지 않으며, 여러 응용 프로그램에서 이 장치를 동시에 사용할 수 있습니다. MATLAB은 다른 MATLAB 세션 또는 워커를 포함하여 다른 응용 프로그램과 장치를 공유할 수 있습니다.
'Exclusive process'한 번에 하나의 응용 프로그램만 장치를 사용할 수 있습니다. MATLAB에서 장치가 선택되어 있는 동안, 다른 MATLAB 세션 또는 워커를 포함한 다른 응용 프로그램에서 이 장치를 사용할 수 없습니다.
'Prohibited'장치를 사용할 수 없습니다.

GPU 장치의 계산 모드 변경에 대한 자세한 내용은 NVIDIA 문서를 참조하십시오.

읽기 전용 속성입니다.

중첩된 전송의 지원 여부에 대한 플래그이며, 논리값 0 또는 1로 지정됩니다.

읽기 전용 속성입니다.

장시간 실행되는 커널의 시간 제한 여부에 대한 플래그이며, 논리값 0 또는 1로 지정됩니다. 1인 경우, 운영 체제가 CUDA 커널 실행에 허용되는 시간의 상한값을 설정합니다. 이 시간이 지나면 CUDA 드라이버가 커널의 실행을 자동으로 중단하고 오류를 반환합니다.

읽기 전용 속성입니다.

호스트 메모리를 CUDA 주소 공간으로 매핑하는 기능의 지원 여부에 대한 플래그이며, 논리값 0 또는 1로 지정됩니다.

읽기 전용 속성입니다.

지원되는 장치에 대한 플래그이며, 논리값 0 또는 1로 지정됩니다. 일부 장치는 지원되지 않습니다(예: ComputeCapability가 불충분한 장치).

읽기 전용 속성입니다.

사용 가능한 장치에 대한 플래그이며, 논리값 0 또는 1로 지정됩니다. 이 속성은 현재 MATLAB 세션에서 장치를 사용할 수 있는지 여부를 나타냅니다. DeviceSupported 속성값이 0인 지원되지 않는 장치는 언제나 사용할 수 없습니다. ComputeMode 속성이 'Exclusive thread', 'Exclusive process' 또는 'Prohibited'로 설정된 경우에도 장치를 사용할 수 없습니다.

읽기 전용 속성입니다.

현재 선택된 장치에 대한 플래그이며, 논리값 0 또는 1로 지정됩니다.

객체 함수

다음 함수를 사용하여 GPU 장치를 식별, 선택, 재설정하거나, 대기할 수 있습니다.

gpuDeviceCount컴퓨터에 있는 GPU 장치 개수
resetGPU 장치를 재설정하고 메모리를 지웁니다.
wait (GPUDevice)Wait for GPU calculation to complete

다음 함수도 사용할 수 있습니다.

parallel.gpu.GPUDevice.isAvailable(indx)인덱스 indx로 지정된 GPU가 지원되고 이 GPU를 선택할 수 있으면 논리값 1 또는 true를 반환합니다. indx는 정수이거나 정수로 구성된 벡터일 수 있습니다. 디폴트 인덱스는 현재 장치입니다.
parallel.gpu.GPUDevice.getDevice(indx)GPUDevice 객체를 선택하지 않고 반환합니다.

전체 함수 목록을 보려면 다음과 같이 GPUDevice 객체에 대해 methods 함수를 사용하십시오.

methods('parallel.gpu.GPUDevice')

다음 명령을 사용하면 원하는 객체 함수에 대한 도움말을 볼 수 있습니다.

help parallel.gpu.GPUDevice.functionname

여기서 functionname은 함수의 이름입니다. 예를 들어, isAvailable에 대한 도움말을 가져오려면 다음을 입력하십시오.

help parallel.gpu.GPUDevice.isAvailable

예제

모두 축소

이 예제에서는 gpuDevice를 사용하여 사용할 장치를 식별 및 선택하는 방법을 보여줍니다.

컴퓨터에서 사용할 수 있는 GPU 장치 수를 확인하려면 gpuDeviceCount 함수를 사용하십시오.

gpuDeviceCount("available")
ans = 2

장치가 여러 대 있는 경우 첫 번째가 디폴트 값입니다. gpuDeviceTable 함수로 장치의 속성을 검토하여 그 장치를 사용할지 여부를 결정할 수 있습니다.

gpuDeviceTable
ans=2×5 table
    Index           Name           ComputeCapability    DeviceAvailable    DeviceSelected
    _____    __________________    _________________    _______________    ______________

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

첫 번째 장치가 사용할 장치인 경우 계속 진행하면 됩니다. GPU에서 계산을 실행하려면 gpuArray 지원 함수를 사용하십시오. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 항목을 참조하십시오.

다른 장치를 사용하려면 사용할 장치의 인덱스를 지정하여 gpuDevice 함수를 호출하십시오.

gpuDevice(2)
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: 0
               ComputeMode: 'Default'
      GPUOverlapsTransfers: 1
    KernelExecutionTimeout: 1
          CanMapHostMemory: 1
           DeviceSupported: 1
           DeviceAvailable: 1
            DeviceSelected: 1

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

gpuDevice2.png

디폴트 GPU 장치를 나타내는 객체를 만들고 Compute Capability를 쿼리합니다.

D = gpuDevice;
D.ComputeCapability
ans = 
'8.6'

사용 가능한 모든 GPU 장치의 Compute Capability를 쿼리합니다.

for idx = 1:gpuDeviceCount
    D = gpuDevice(idx);
    fprintf(1,"Device %i has ComputeCapability %s \n", ...
        D.Index,D.ComputeCapability)
end
Device 1 has ComputeCapability 8.6 
Device 2 has ComputeCapability 6.1 

gpuDeviceTable을 사용하여 시스템에 있는 GPU 장치의 Compute Capability와 가용성을 비교합니다.

gpuDeviceTable
ans=2×5 table
    Index           Name           ComputeCapability    DeviceAvailable    DeviceSelected
    _____    __________________    _________________    _______________    ______________

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

GPU의 캐싱 정책을 변경합니다.

디폴트 GPU 장치를 나타내는 객체를 만듭니다.

D = gpuDevice
D = 
  CUDADevice with properties:

                      Name: 'NVIDIA RTX A5000'
                     Index: 1
         ComputeCapability: '8.6'
            SupportsDouble: 1
     GraphicsDriverVersion: '511.79'
               DriverModel: 'TCC'
            ToolkitVersion: 11.2000
        MaxThreadsPerBlock: 1024
          MaxShmemPerBlock: 49152 (49.15 KB)
        MaxThreadBlockSize: [1024 1024 64]
               MaxGridSize: [2.1475e+09 65535 65535]
                 SIMDWidth: 32
               TotalMemory: 25553076224 (25.55 GB)
           AvailableMemory: 25145376768 (25.15 GB)
               CachePolicy: 'balanced'
       MultiprocessorCount: 64
              ClockRateKHz: 0
               ComputeMode: 'Default'
      GPUOverlapsTransfers: 1
    KernelExecutionTimeout: 0
          CanMapHostMemory: 1
           DeviceSupported: 1
           DeviceAvailable: 1
            DeviceSelected: 1

GPU 장치의 CachePolicy 속성에 액세스합니다.

D.CachePolicy
ans = 
'balanced'

계산을 가속화하기 위해 GPU가 최대 메모리 양을 캐시할 수 있도록 캐싱 정책을 변경합니다.

D.CachePolicy = "maximum";
D.CachePolicy
ans = 
'maximum'

속성을 []로 설정하여 캐싱 정책을 디폴트 정책으로 재설정합니다.

D.CachePolicy = [];

reset(D)를 호출하거나 gpuDevice로 다른 장치를 선택하면 캐싱 정책도 디폴트 값으로 재설정됩니다.

여러 개의 GPU에 액세스할 수 있는 경우에는 병렬 풀을 사용하여 여러 개의 GPU에서 병렬로 계산을 수행할 수 있습니다.

MATLAB에서 사용 가능한 GPU 개수를 확인하려면 gpuDeviceCount 함수를 사용하십시오.

availableGPUs = gpuDeviceCount("available")
availableGPUs = 3

사용 가능한 GPU와 같은 수의 워커를 사용하여 병렬 풀을 시작합니다. MATLAB은 최적의 성능을 위해 기본적으로 각 워커에 다른 GPU를 할당합니다.

parpool('Processes',availableGPUs);
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to the parallel pool (number of workers: 3).

각 워커가 사용하는 GPU를 식별하려면 spmd 블록 내에서 gpuDevice를 호출하십시오. spmd 블록은 모든 워커에서 gpuDevice를 실행합니다.

spmd
    gpuDevice
end

parfor 또는 parfeval과 같은 병렬 언어 기능을 사용하여 계산을 병렬 풀의 워커로 분산합니다. 계산에 gpuArray 지원 함수를 사용하는 경우 이러한 함수는 워커의 GPU에서 실행됩니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 항목을 참조하십시오. 예제는 Run MATLAB Functions on Multiple GPUs 항목을 참조하십시오.

계산이 완료되면 병렬 풀을 종료합니다. gcp 함수를 사용하여 현재 병렬 풀을 가져올 수 있습니다.

delete(gcp('nocreate'));

다른 GPU를 선택하려면 gpuDevice를 사용하여 GPU 장치 인덱스를 통해 각 워커에서 특정 GPU를 선택할 수 있습니다. gpuDeviceCount 함수를 사용하여 시스템에 있는 각 GPU 장치의 인덱스를 가져올 수 있습니다.

시스템에 3개의 GPU가 있지만 2개만 계산에 사용하려 한다고 가정하겠습니다. 장치의 인덱스를 가져옵니다.

[availableGPUs,gpuIndx] = gpuDeviceCount("available")
availableGPUs = 3
gpuIndx = 1×3

     1     2     3

사용할 장치의 인덱스를 정의합니다.

useGPUs = [1 3];

병렬 풀을 시작합니다. spmd 블록과 gpuDevice를 사용하여 장치 인덱스를 통해 각 워커를 사용하려는 GPU 중 하나와 연결합니다. spmdIndex 함수는 각 워커의 인덱스를 식별합니다.

parpool('Processes',numel(useGPUs));
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to the parallel pool (number of workers: 2).
spmd
    gpuDevice(useGPUs(spmdIndex));
end

최상의 성능을 구현하려면 각 워커에 다른 GPU를 할당하는 것이 좋습니다.

계산이 완료되면 병렬 풀을 종료합니다.

delete(gcp('nocreate'));

버전 내역

R2010b에 개발됨

모두 확장