主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

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デバイスがサポートされていない場合,エラーが発生します。この構文は,デバイスが現在既に選択されている場合でも,指定されたデバイスをリセットし,そのメモリをクリアします(関数重置と等価)。gpuArrayまたはCUDAKernelの変数を表すすべてのワークスペース変数が無効になるため,これらの変数をワークスペースからクリアするか,再定義しなければなりません。

gpuDevice ([])に空の引数が指定されると(引数がない場合とは異なる),GPUデバイスの選択を解除し,メモリからgpuArrayCUDAKernelの変数をクリアします。この構文では,現在のデバイスとして選択されているGPUデバイスがなくなります。

入力引数

すべて展開する

GPUデバイスのインデックス。1からgpuDeviceCountまでの範囲の整数として指定します。

例:gpuDevice (1);

データ型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

プロパティ

すべて展開する

このプロパティは読み取り専用です。

GPUデバイスの名前。文字配列として指定します。デバイスに割り当てられる名前は、GPU デバイス モデルから派生します。

このプロパティは読み取り専用です。

GPUデバイスのインデックス。1からgpuDeviceCountまでの範囲の整数として指定します。このインデックスを使用して,特定のGPUデバイスを選択します。

このプロパティは読み取り専用です。

GPUデバイスの計算能力。文字配列として指定します。選択したGPUデバイスをMATLABで使用するには,ComputeCapabilityリリース別のGPUサポートの必要な仕様を満たしていなければなりません。

このプロパティは読み取り専用です。

倍精度演算のサポートフラグ。の場合は0真正的の場合は1の逻辑値として指定します。

このプロパティは読み取り専用です。

現在使用しているGPUデバイスドライバーのバージョン。スカラー値として指定します。選択したGPUデバイスをMATLABで使用するには,DriverVersionリリース別のGPUサポートの必要な仕様を満たしていなければなりません。

このプロパティは読み取り専用です。

現在のMATLABリリースで使用されているCUDAツールキットのバージョン。スカラー値として指定します。

このプロパティは読み取り専用です。

CUDAKernelの実行中にサポートされる最大スレッド数/ブロック。スカラー値として指定します。

例:1024

このプロパティは読み取り専用です。

CUDAKernelの実行中にスレッドブロックが使用可能な,サポートされる共有メモリの最大的量。スカラー値として指定します。

例:49152

このプロパティは読み取り専用です。

スレッドブロックの各次元の最大サイズ。ベクトルとして指定します。スレッドブロックの各次元はこれらの次元サイズを超えてはなりません。また,スレッドブロックサイズの積はMaxThreadsPerBlockを超えてはなりません。

このプロパティは読み取り専用です。

スレッドブロックのグリッドの最大サイズ。ベクトルとして指定します。

このプロパティは読み取り専用です。

同時に実行されるスレッドの数。スカラー値として指定します。

このプロパティは読み取り専用です。

デバイス上の合計メモリ(バイト単位)。スカラー値として指定します。

このプロパティは読み取り専用です。

データに使用可能な合計メモリ(バイト単位)。スカラー値として指定します。このプロパティは現在選択されているデバイスに対してのみ使用可能です。メモリのキャッシュにより,この値はNVIDIA®系统管理界面で報告される値と異なる場合があります。

このプロパティは読み取り専用です。

デバイス上に存在し,ストリーミングを行うマルチプロセッサの数。スカラー値として指定します。

このプロパティは読み取り専用です。

GPUのピーククロックレート(kHz単位)。スカラー値として指定します。

このプロパティは読み取り専用です。

デバイスの計算モード。次の値のいずれかとして指定します。

“默认” このデバイスは制限を受けず,複数のアプリケーションで同時に使用できます。MATLABは他の MATLAB セッションやワーカーなど、他のアプリケーションとデバイスを共有できます。
“独家线程”または“独家过程” このデバイスは一度に1つのアプリケーションのみで使用できます。このデバイスがMATLABで選択されている間は,他のMATLABセッション,ワーカーなどの他のアプリケーションでこのデバイスを使用できません。
“禁止” このデバイスは使用できません。

このプロパティは読み取り専用です。

転送のオーバーラップのサポートフラグ。逻辑値0または1として指定します。

このプロパティは読み取り専用です。

長時間実行されているカーネルのタイムアウトフラグ。逻辑値0または1として指定します。1の場合は,オペレーティングシステムによってCUDAカーネルを実行できる時間に上限が設定されます。この時間を過ぎると,CUDAドライバーによりカーネルがタイムアウトし,エラーが返されます。

このプロパティは読み取り専用です。

ホストメモリのCUDAアドレス空間へのマッピングのサポートフラグ。逻辑値0または1として指定します。

このプロパティは読み取り専用です。

サポートされているデバイスのフラグ。逻辑値0または1として指定します。ComputeCapabilityが不十分なデバイスなど,サポートされないデバイスもあります。

このプロパティは読み取り専用です。

使用可能なデバイスのフラグ。逻辑値0または1として指定します。このプロパティは,現在のMATLABセッションでデバイスが使用可能かどうかを示します。サポートされていないデバイス(Device金宝appSupportedプロパティが0)は常に使用不可です。ComputeModeプロパティが“独家线程”“独家过程”“禁止”のいずれかに設定されているデバイスも,使用できない可能性があります。

このプロパティは読み取り専用です。

現在選択されているデバイスのフラグ。逻辑値0または1として指定します。

オブジェクト関数

次の関数を使用して,GPUデバイスの識別,選択,リセットまたは待機を行うことができます。

gpuDeviceCount 存在するGPUデバイスの数
重置 GPUデバイスをリセットし,そのメモリを消去する
等待(GPUDevice) GPUの計算が完了するまで待機

次の関数も使用できます。

parallel.gpu.GPUDevice.isAvailable (indx) インデックスindxによって指定されたGPUがサポートされていて選択可能な場合は,合乎逻辑的1または真正的を返します。indxは整数,または整数のベクトルで,既定のインデックスは現在のデバイスです。
parallel.gpu.GPUDevice.getDevice (indx) GPUDeviceオブジェクトを選択せずに返します。

関数の完全な一覧については,GPUDeviceオブジェクトに対して関数方法を使用してください。

方法(“parallel.gpu.GPUDevice”)

次のコマンドを使用して,任意のオブジェクト関数のヘルプを取得できます。

帮助parallel.gpu.GPUDevice.functionname

ここで,functionnameは関数の名前です。たとえば,isAvailableのヘルプを表示するには,次を入力します。

帮助parallel.gpu.GPUDevice.isAvailable

すべて折りたたむ

この例では,gpuDeviceを使用して,使用するデバイスの識別と選択を行う方法を説明します。

お使いのコンピューターで利用できるGPUデバイスの数を確認するには,関数gpuDeviceCountを使用します。

gpuDeviceCount (“可用”
ans = 2

デバイスが複数ある場合は,1番目のデバイスが既定になります。関数gpuDeviceTableでそのプロパティを調べて,使用する目的のデバイスかどうかを判断することができます。

gpuDeviceTable
ans =2×5表索引名称ComputeCapability DeviceAvailable DeviceSelected  _____ _____________ _________________ _______________ ______________ 1“泰坦RTX”“7.5”真的真的2”住宅区K620”“5.0”真的假的

最初のデバイスが使用する目的のデバイスである場合は,次に進むことができます。GPU上で計算を実行するには,gpuArray対応関数を使用します。詳細については,GPUでのMATLAB関数の実行を参照してください。

他のデバイスを使用するには,そのデバイスのインデックスを指定してgpuDeviceを呼び出します。

gpuDevice (2)
ans = CUDADevice with properties: Name: 'Quadro K620' Index: 2 ComputeCapability: '5.0' 金宝appSupportsDouble: 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 Device金宝appSupported: 1 DeviceAvailable: 1 DeviceSelected: 1

既定のGPUデバイスを表すオブジェクトを作成します。

D = gpuDevice;

使用可能なすべてのGPUデバイスの計算能力をクエリします。

ii = 1:gpuDeviceCount D = gpuDevice(ii);流(1,'Device %i has ComputeCapability %s \n'...D.Index D.ComputeCapability)结束
设备1的ComputeCapability为7.5,设备2的ComputeCapability为6.1

複数のGPUにアクセスできる場合,並列プールを使用して複数のGPUで並列計算を実行することができます。

MATLABで使用可能なGPUの数を特定するには,関数gpuDeviceCountを使用します。

availableGPUs = gpuDeviceCount (“可用”
availableGPUs = 3

使用可能なGPUと同数のワーカーをもつ並列プールを起動します。最良のパフォーマンスを得るために,MATLABは既定でワーカーごとに別々のGPUを割り当てます。

parpool (“本地”, availableGPUs);
使用“local”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:3)。

各ワーカーが使用しているGPUを識別するために,spmdブロック内でgpuDeviceを呼び出します。spmdブロックは各ワーカーでgpuDeviceを実行します。

spmdgpuDevice结束

parforparfevalなどの並列言語機能を使用して,並列プールのワーカーに計算を分散します。計算にgpuArray対応関数を使用すると,これらの関数はワーカーのGPUで実行されます。詳細については,GPUでのMATLAB関数の実行を参照してください。例は,複数のGPUでのMATLAB関数の実行を参照してください。

計算が完了したら,並列プールをシャットダウンします。関数gcpを使用して,現在の並列プールを取得できます。

删除(gcp (“nocreate”));

他のGPUを選択して使用する場合は,gpuDeviceでGPUデバイスインデックスを使用して,各ワーカーで特定のGPUを選択できます。関数gpuDeviceCountを使用すると,システム内の各GPUデバイスのインデックスを取得できます。

システム内に使用可能なGPUが3つあり,その中の2つだけを計算に使用するとします。デバイスのインデックスを取得します。

[availableGPUs, gpuIndx] = gpuDeviceCount (“可用”
availableGPUs = 3
gpuIndx =1×31 2 3

使用するデバイスのインデックスを定義します。

useGPUs = [1 3];

並列プールを起動します。spmdブロックとgpuDeviceを使用して,各ワーカーと使用するGPUのいずれかをデバイスインデックスにより関連付けます。関数labindexは各ワーカーのインデックスを識別します。

parpool (“本地”元素个数(useGPUs));
使用“local”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:2)。
spmdgpuDevice (useGPUs (labindex));结束

ベストプラクティスとして,また最良のパフォーマンスを得るには,各ワーカーに異なるGPUを割り当てます。

計算が完了したら,並列プールをシャットダウンします。

删除(gcp (“nocreate”));
R2010bで導入