簡體   English   中英

使用OpenCL,如何獲得GPU內存使用率?

[英]With OpenCL, How to get GPU memory usage?

我正在尋找一種確定OpenCL當前GPU內存使用情況的可靠方法。

我發現NVidia API: cudaMemGetInfo(size_t * free,size_t * total)獲取當前設備上的可用內存和總內存。

但是我正在尋找AMD和OpenCL的解決方案。 我沒有發現OpenCL中是否有類似的功能,也不知道AMD是否具有等效的功能。

我不希望在分配緩沖區之前知道OpenCL設備上有多少可用內存,但是在分配緩沖區之后會釋放可用內存。 如何確定OpenCL中的可用設備內存中所述的優先級 ,有了OpenCL,就沒有辦法,也不需要知道它。

設備在分配緩沖區之前但在分配緩沖區后釋放了內存。

對於AMD,也許可以嘗試使用cl_amd_device_attribute_query擴展名中的 CL_DEVICE_GLOBAL_FREE_MEMORY_AMD-該擴展名可能僅適用於專有驅動程序。

在一般情況下,這是不可能的,因為AFAIK無法知道何時 (在設備上)分配緩沖區。 從這個意義上講,OpenCL比CUDA更高級。 緩沖區屬於上下文,而不是設備。 調用clCreateBuffer()可以但不必在任何設備上分配任何內存。 這些實現會在執行需要緩沖區的內核之前將緩沖區自動遷移到設備內存,如果需要釋放內存以供下一個內核使用,則將緩沖區移離設備。 即使您獲得了設備的可用內存,也無法100%可靠地使用它來決定是否運行內核,因為clEnqueueNDRange()不一定會立即啟動內核(它只是使內核排隊;如果有的話)隊列中的其他內容,這可能會延遲),並且與此同時,同一台計算機上的其他一些應用程序也可能會在GPU上進行調度。

如果要避免交換內存,則必須確保1)應用程序是唯一使用GPU的應用程序,2)對於每個內核,緩沖區參數的總大小必須為<= GLOBAL_MEM_SIZE。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM