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
オブジェクトをクリアせずに返します。
gpuDevice([])
に空の引数が指定されると (引数がない場合とは異なる)、GPU デバイスの選択を解除し、メモリから gpuArray
と CUDAKernel
の変数をクリアします。この構文では、現在のデバイスとして選択されている GPU デバイスがなくなります。
入力引数
indx
— GPU デバイスのインデックス
整数
GPU デバイスのインデックス。1
からgpuDeviceCount
までの範囲の整数として指定します。
例: gpuDevice(1);
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
プロパティ
Name
— GPU デバイスの名前
文字配列
この プロパティ は読み取り専用です。
GPU デバイスの名前。文字配列として指定します。デバイスに割り当てられる名前は、GPU デバイス モデルから派生します。
Index
— GPU デバイスのインデックス
整数
この プロパティ は読み取り専用です。
GPU デバイスのインデックス。1
からgpuDeviceCount
までの範囲の整数として指定します。このインデックスを使用して、特定の GPU デバイスを選択します。
ComputeCapability
— GPU デバイスの計算能力
文字配列
この プロパティ は読み取り専用です。
GPU デバイスの計算能力。文字配列として指定します。選択した GPU デバイスを MATLAB で使用するには、ComputeCapability
がGPU 計算の要件の必要な仕様を満たしていなければなりません。
SupportsDouble
— 倍精度のサポート フラグ
0
| 1
この プロパティ は読み取り専用です。
倍精度演算のサポート フラグ。false
の場合は 0
、true
の場合は 1
の logical 値として指定します。
GraphicsDriverVersion
— 使用しているグラフィックス ドライバーのバージョン
文字配列
R2023a 以降
この プロパティ は読み取り専用です。
GPU デバイスで現在使用されているグラフィックス ドライバーのバージョン。文字配列として指定します。
ご使用の GPU の最新のグラフィックス ドライバーを、NVIDIA Driver Downloads からダウンロードします。
DriverModel
— グラフィックス ドライバーの動作モデル
'WDDM'
| 'TCC'
| 'N/A'
R2023a 以降
この プロパティ は読み取り専用です。
グラフィックス ドライバーの動作モデル。次の値のいずれかとして指定します。
'WDDM'
– 表示動作モデルを使用します。'TCC'
– 計算動作モデルを使用します。'TCC'
では Windows® グラフィックスが無効にされ、大規模な計算のパフォーマンスが向上することがあります。'N/A'
–'WDDM'
および'TCC'
は Windows でのみ使用可能です。他のオペレーティング システムでは、ドライバー モデルは'N/A'
です。
モデルの変更や 'TCC'
をサポートする GPU デバイスの詳細については、NVIDIA® のドキュメンテーションを参照してください。
ToolkitVersion
— CUDA ツールキットのバージョン
スカラー
この プロパティ は読み取り専用です。
現在の MATLAB リリースで使用されている CUDA ツールキットのバージョン。スカラー値として指定します。
MaxThreadsPerBlock
— サポートされる最大スレッド数/ブロック
スカラー
この プロパティ は読み取り専用です。
CUDAKernel
の実行中にサポートされる最大スレッド数/ブロック。スカラー値として指定します。
例: 1024
MaxShmemPerBlock
— サポートされる共有メモリの最大量
スカラー
この プロパティ は読み取り専用です。
CUDAKernel
の実行中にスレッド ブロックが使用可能な、サポートされる共有メモリの最大量。スカラー値として指定します。
例: 49152
MaxThreadBlockSize
— スレッド ブロックの各次元の最大サイズ
ベクトル
この プロパティ は読み取り専用です。
スレッド ブロックの各次元の最大サイズ。ベクトルとして指定します。スレッド ブロックの各次元はこれらの次元サイズを超えてはなりません。また、スレッド ブロック サイズの積は MaxThreadsPerBlock
を超えてはなりません。
MaxGridSize
— スレッド ブロックのグリッドの最大サイズ
ベクトル
この プロパティ は読み取り専用です。
スレッド ブロックのグリッドの最大サイズ。ベクトルとして指定します。
SIMDWidth
— 同時に実行されるスレッドの数
スカラー
この プロパティ は読み取り専用です。
同時に実行されるスレッドの数。スカラー値として指定します。
TotalMemory
— 合計メモリ
スカラー
この プロパティ は読み取り専用です。
デバイス上の合計メモリ (バイト単位)。スカラー値として指定します。
AvailableMemory
— データに使用可能な合計メモリ
スカラー
この プロパティ は読み取り専用です。
データに使用可能な合計メモリ (バイト単位)。スカラー値として指定します。このプロパティは現在選択されているデバイスに対してのみ使用可能です。メモリのキャッシュにより、この値は NVIDIA System Management Interface で報告される値と異なる場合があります。
CachePolicy
— GPU デバイスの現在のキャッシュ ポリシー
'balanced'
| 'minimum'
| 'maximum'
R2023a 以降
GPU デバイスのキャッシュ ポリシー。'balanced'
、'minimum'
、または 'maximum'
として指定します。計算を高速化するためにキャッシュできる GPU メモリの量を決定するキャッシュ ポリシー。次の値のいずれかとして指定します。
'minimum'
– GPU デバイスにキャッシュできるメモリの量は最小です。'balanced'
– GPU デバイスにキャッシュできるメモリの量はバランスが取られます。このポリシーでは、GPU メモリ使用量と計算パフォーマンスのバランスが取られます。'maximum'
– GPU デバイスにキャッシュできるメモリの量は、デバイスの合計メモリの量によってのみ制限されます。
既定値は 'balanced'
('Default'
または 'Prohibited'
計算モードのデバイスの場合) または 'maximum'
('Exclusive process'
計算モードのデバイスの場合) です。計算モード プロパティの詳細については、ComputeMode
を参照してください。
メモ
reset
を使用してデバイスをリセットするか、gpuDevice([])
を使用してデバイスを消去するか、gpuDevice
を使用して別のデバイスを選択すると、キャッシュ ポリシーが既定のポリシーにリセットされます。GPUDevice
オブジェクトが含まれている MAT ファイルを保存して読み込んでも、キャッシュ ポリシーは保持されません。選択されていないデバイスのキャッシュ ポリシーを設定することはできません。たとえば、最初の
GPUDevice
オブジェクトを配列に格納して別のデバイスを選択した後には、最初のGPUDevice
オブジェクトのキャッシュ ポリシーを設定できません。
MultiprocessorCount
— ストリーミングを行うマルチプロセッサの数
スカラー
この プロパティ は読み取り専用です。
デバイス上に存在し、ストリーミングを行うマルチプロセッサの数。スカラー値として指定します。
ClockRateKHz
— ピーク クロック レート
スカラー
この プロパティ は読み取り専用です。
GPU のピーク クロック レート (kHz 単位)。スカラー値として指定します。
ComputeMode
— 計算モード
文字配列
この プロパティ は読み取り専用です。
デバイスの計算モード。次の値のいずれかとして指定します。
'Default' | このデバイスは制限を受けず、複数のアプリケーションで同時に使用できます。MATLAB は他の MATLAB セッションやワーカーなど、他のアプリケーションとデバイスを共有できます。 |
'Exclusive process' | このデバイスは一度に 1 つのアプリケーションのみで使用できます。このデバイスが MATLAB で選択されている間は、他の MATLAB セッション、ワーカーなどの他のアプリケーションでこのデバイスを使用できません。 |
'Prohibited' | このデバイスは使用できません。 |
GPU デバイスの計算モードの変更の詳細については、NVIDIA のドキュメンテーションを参照してください。
GPUOverlapsTransfers
— 転送のオーバーラップのサポート フラグ
0
| 1
この プロパティ は読み取り専用です。
転送のオーバーラップのサポート フラグ。logical 値 0
または 1
として指定します。
KernelExecutionTimeout
— 長時間実行されているカーネルのタイムアウト フラグ
0
| 1
この プロパティ は読み取り専用です。
長時間実行されているカーネルのタイムアウト フラグ。logical 値 0
または 1
として指定します。1
の場合は、オペレーティング システムによって CUDA カーネルを実行できる時間に上限が設定されます。この時間を過ぎると、CUDA ドライバーによりカーネルがタイムアウトし、エラーが返されます。
CanMapHostMemory
— ホスト メモリのマッピングのサポート フラグ
0
| 1
この プロパティ は読み取り専用です。
ホスト メモリの CUDA アドレス空間へのマッピングのサポート フラグ。logical 値 0
または 1
として指定します。
DeviceSupported
— サポートされているデバイスのフラグ
0
| 1
この プロパティ は読み取り専用です。
サポートされているデバイスのフラグ。logical 値 0
または 1
として指定します。ComputeCapability
が不十分なデバイスなど、サポートされないデバイスもあります。
DeviceAvailable
— 使用可能なデバイスのフラグ
0
| 1
この プロパティ は読み取り専用です。
使用可能なデバイスのフラグ。logical 値 0
または 1
として指定します。このプロパティは、現在の MATLAB セッションでデバイスが使用可能かどうかを示します。サポートされていないデバイス (DeviceSupported
プロパティが 0
) は、常に使用不可です。ComputeMode
プロパティが 'Exclusive thread'
、'Exclusive process'
、'Prohibited'
のいずれかに設定されているデバイスも、使用できない可能性があります。
DeviceSelected
— 現在選択されているデバイスのフラグ
0
| 1
この プロパティ は読み取り専用です。
現在選択されているデバイスのフラグ。logical 値 0
または 1
として指定します。
UUID
— 汎用一意識別子
文字配列
R2024a 以降
この プロパティ は読み取り専用です。
汎用一意識別子。文字配列として指定します。
各 UUID は通常、'GPU-'
で始まり、36 文字からなる 16 進数のシーケンスが続きます。UUID を使用すると、それ以外は同一の GPU を区別することができます。
gpuDevice
を呼び出しても、このプロパティは表示されません。このプロパティをクエリするには、ドット表記を使用するか、gpuDeviceTable
を使用します。
データ型: char
オブジェクト関数
reset | GPU デバイスをリセットし、そのメモリを消去する |
wait (GPUDevice) | GPU の計算が完了するまで待機 |
次の関数も使用できます。
parallel.gpu.GPUDevice.isAvailable(indx) | インデックス indx によって指定された GPU がサポートされていて選択可能な場合は、logical 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
例
GPU デバイスの識別と選択
この例では、gpuDevice
を使用して、使用するデバイスの識別と選択を行う方法を説明します。
お使いのコンピューターで利用できる GPU デバイスの数を確認するには、関数gpuDeviceCount
を使用します。
gpuDeviceCount("available")
ans = 2
デバイスが複数ある場合は、1 番目のデバイスが既定になります。関数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
あるいは、利用できる GPU デバイスの数を判別し、デバイスのプロパティのいくつかを検査して、MATLAB® デスクトップから使用するデバイスを選択することもできます。[ホーム] タブの [環境] 領域で、[並列]、[GPU 環境の選択] を選択します。
計算機能のクエリ
既定の GPU デバイスを表すオブジェクトを作成し、その計算能力をクエリします。
D = gpuDevice; D.ComputeCapability
ans = '8.6'
使用可能なすべての GPU デバイスの計算能力をクエリします。
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 デバイスの計算能力および可用性を比較します。
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 にアクセスできる場合、並列プールを使用して複数の 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 関数の実行を参照してください。例は、複数の GPU での MATLAB 関数の実行を参照してください。
計算が完了したら、並列プールをシャットダウンします。関数gcp
を使用して、現在の並列プールを取得できます。
delete(gcp("nocreate"));
他の GPU を選択して使用する場合は、gpuDevice
で GPU デバイス インデックスを使用して、各ワーカーで特定の GPU を選択できます。関数 gpuDeviceCount
を使用すると、システム内の各 GPU デバイスのインデックスを取得できます。
システム内に使用可能な GPU が 3 つあり、その中の 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"));
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
バージョン履歴
R2010b で導入R2024a: UUID を使用した GPU の識別
GPUDevice
オブジェクトの UUID
プロパティを使用して、GPU の汎用一意識別子 (UUID) を調べます。UUID を使用すると、それ以外は同一の GPU を区別することができます。
たとえば、関数 gpuDeviceTable
を使用して、2 つの GPU の UUID を調べることができます。
gpuDeviceTable(["Index","Name","UUID"])
Index Name UUID _____ __________________ __________________________________________ 1 "NVIDIA RTX A5000" "GPU-957b509e-322a-ae88-59c8-b7435d0f98f4" 2 "NVIDIA RTX A5000" "GPU-6f3ad2c0-5ea1-b1a2-1dca-cd756d10dbc0" 3 "NVIDIA RTX A5000" "GPU-41c24f34-c915-919b-0bb3-20d07117e0ec" 4 "NVIDIA RTX A5000" "GPU-23ab01ce-2f42-2d0c-0f6b-db7ac8c10867"
あるいは、関数 gpuDevice
を使用して GPU を選択し、その UUID をクエリすることができます。
D = gpuDevice; D.UUID
'GPU-957b509e-28ca-ae88-59c8-b7435d0f98f4'
R2023a: デバイスのプロパティへの変更
現在使用されているグラフィックス ドライバーのバージョンを示す
GraphicsDriverVersion
プロパティが追加されました。Windows 上のグラフィックス ドライバーの動作モデルを示す
DriverModel
プロパティが追加されました。GPU メモリ キャッシュ ポリシーを変更できる
CachePolicy
プロパティが追加されました。DriverVersion
プロパティは既定では表示されなくなりましたが、引き続きドット表記を使用してこのプロパティをクエリできます。DriverVersion
プロパティを削除する予定はありません。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)