我在OpenCL中實現了一個複雜的算法,但是我在NVidia硬件上遇到了一個問題。當我的算法被多次並行調用時,NVidia GPU上的內存不足,隨機線程的執行可能會因MemoryAllocation錯誤而停止(我曾試圖在https://devtalk.nvidia.com/default/topic/1019997/cuda-programming-and-performance/how-to-handle-cl_mem_object_allocation_failure-errors-if-amount-of-useable-memory-is-not-known-/之前解釋過這一點。)OpenCL:讀出Nvidia顯卡硬件上的可用內存(OpenGL Extension?,Cuda Runtime?)
我目前的解決方案是請求GPU上的可用內存,只有足夠的時候才允許執行。問題是讀出可用內存。
我用
#define GL_GPU_MEM_INFO_CURRENT_AVAILABLE_MEM_NVX 0x9049
glGetIntegerv(GL_GPU_MEM_INFO_CURRENT_AVAILABLE_MEM_NVX,
¤tlyAvailableMemoryInKb);
讀出來,我創建一個隱藏的窗口,OpenGL上下文記憶。現在的問題是,當NVidia gpu不是主GPU時,我必須使用gpu關係擴展選擇卡:https://www.khronos.org/registry/OpenGL/extensions/NV/WGL_NV_gpu_affinity.txt,但wglGetProcAddress返回null。我認爲這是因爲我用Intel GPU作爲主設備啓動。 (加載其他擴展,如wglCreatePbufferARB不是問題。)
有沒有辦法處理這個問題,並將wglGetProcAddress調用轉發給另一個gpu /驅動程序?
在此先感謝! 最好的問候 邁克爾
ps .:我也嘗試使用cuda運行時來獲得可用內存。這沒有奏效。 opencl驅動程序不可靠(使用某些cudart特性後導致了一些死鎖)並且返回的值不正確。