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에서 사용하려면 ComputeCapability릴리스별 GPU 지원에 나와 있는 필수 사양을 충족해야 합니다.

이 속성은 읽기 전용입니다.

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

이 속성은 읽기 전용입니다.

현재 사용 중인 GPU 장치 드라이버 버전으로, 스칼라 값으로 지정됩니다. 선택한 GPU 장치를 MATLAB에서 사용하려면 DriverVersion릴리스별 GPU 지원에 나와 있는 필수 사양을 충족해야 합니다.

이 속성은 읽기 전용입니다.

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

이 속성은 읽기 전용입니다.

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

예: 1024

이 속성은 읽기 전용입니다.

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

예: 49152

이 속성은 읽기 전용입니다.

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

이 속성은 읽기 전용입니다.

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

이 속성은 읽기 전용입니다.

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

이 속성은 읽기 전용입니다.

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

이 속성은 읽기 전용입니다.

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

이 속성은 읽기 전용입니다.

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

이 속성은 읽기 전용입니다.

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

이 속성은 읽기 전용입니다.

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

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

이 속성은 읽기 전용입니다.

중첩된 전송의 지원 여부에 대한 플래그이며, 논리값 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 장치를 식별, 선택, 재설정하거나, 대기할 수 있습니다.

gpuDeviceCountNumber of GPU devices present
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      "TITAN RTX"            "7.5"               true              true      
      2      "Quadro K620"          "5.0"               true              false     

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

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

gpuDevice(2)
ans = 
  CUDADevice with properties:

                      Name: 'Quadro K620'
                     Index: 2
         ComputeCapability: '5.0'
            SupportsDouble: 1
             DriverVersion: 11
            ToolkitVersion: 10.2000
        MaxThreadsPerBlock: 1024
          MaxShmemPerBlock: 49152
        MaxThreadBlockSize: [1024 1024 64]
               MaxGridSize: [2.1475e+09 65535 65535]
                 SIMDWidth: 32
               TotalMemory: 2.1475e+09
           AvailableMemory: 1.6776e+09
       MultiprocessorCount: 3
              ClockRateKHz: 1124000
               ComputeMode: 'Default'
      GPUOverlapsTransfers: 1
    KernelExecutionTimeout: 1
          CanMapHostMemory: 1
           DeviceSupported: 1
           DeviceAvailable: 1
            DeviceSelected: 1

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

D = gpuDevice;

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

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

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

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

availableGPUs = gpuDeviceCount("available")
availableGPUs = 3

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

parpool('local',availableGPUs);
Starting parallel pool (parpool) using the 'local' 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 중 하나와 연결합니다. labindex 함수는 각 워커의 인덱스를 식별합니다.

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

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

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

delete(gcp('nocreate'));
R2010b에 개발됨