2017-12-27 23 views
0

OpenCLで現在のGPUメモリ使用量を確認する信頼できる方法を探しています。OpenCLでは、GPUのメモリ使用量を取得する方法は?

私はNVidia API:cudaMemGetInfo(size_t* free, size_t* total)を見つけて、現在のデバイスの空きメモリと合計メモリを取得しました。

しかし、私はAMDとOpenCLのソリューションを探しています。 OpenCLに似た機能があるのか​​どうかは分かりませんでした。

バッファを割り当てる前にOpenCLデバイスにどのくらいの空きメモリがあるのか​​知りたくありませんが、バッファを割り当てる空きメモリがあります。 How do I determine available device memory in OpenCL?に示されているように、先験的に、OpenCLを使用すると、方法がなく、それを知る必要はありません。

+0

[OpenCLで使用可能なデバイスメモリを特定するにはどうすればよいですか?](https://stackoverflow.com/questions/3568115/how-do-i-determine-available-device-memory-in-opencl) – ivaigult

答えて

3

バッファを割り当てる前のデバイスで、バッファを割り当てるには空きメモリが必要です。しかし、おそらく唯一のプロプライエタリドライバで動作します。この拡張 -

はAMDの場合は、おそらくcl_amd_device_attribute_query extensionからCL_DEVICE_GLOBAL_FREE_MEMORY_AMDを試してみてください。

一般的には、バッファが(デバイス上に)割り当てられている場合、AFAIKにはを知る方法がないため、不可能です。この意味で、OpenCLはCUDAよりも高いレベルです。バッファはコンテキストに属し、デバイスには属しません。 clCreateBuffer()を呼び出すことはできますが、任意のデバイスに任意のメモリを割り当てる必要はありません。実装はバッファを必要とするカーネルを実行する前にバッファをデバイスメモリに自動的に移行し、次のカーネルのためにメモリを解放する必要がある場合はデバイスから遠ざけます。 clEnqueueNDRange()は必ずしも直ちにカーネルを起動するわけではないので、デバイスの空きメモリを取得しても100%信頼できる方法でカーネルを実行するかどうかを決定することはできません。キュー内の他のものは遅れている可能性があります)、その間に同じコンピュータ上の他のアプリケーションがGPUでスケジュールされる可能性があります。

あなたがメモリをスワップ回避したい場合、あなたは1を確認する必要があります)、アプリケーションは2)あなたのカーネルごとに、総バッファ引数のサイズが< = GLOBAL_MEM_SIZEでなければならない、GPUを使用して唯一のものです。

関連する問題