[英]cuda, OpenGL interoperability: cudaErrorMemoryAllocation error on cudaGraphicsGLRegisterBuffer
[英]Running CUDA and OpenGL in parallel without using interoperability
我正在使用nVidia Tesla C2050 GPU構建實時信號處理和顯示系統。 該設計使信號處理部分可以作為單獨的程序運行,並使用CUDA進行所有計算。 同時,如果需要,我可以啟動一個單獨的顯示程序,該程序使用OpenGL顯示處理后的信號。由於設計是將這些過程作為獨立的進程運行,所以我沒有任何CUDA-OpenGL互操作性,這兩個程序通過UNIX流套接字。
信號處理程序大部分時間都使用GPU來處理CUDA。我每隔50毫秒刷新一次OpenGL中的幀,而CUDA程序每次運行約運行700毫秒,而兩個連續運行通常間隔30-40毫秒。 當我一次運行一個程序(即僅運行CUDA或OpenGL部件)時,一切運行正常。 但是,當我一起啟動程序時,顯示內容也不應該是預期的,而CUDA部分會產生正確的輸出。 我已經檢查了套接字的實現,並且我對套接字可以正常工作充滿信心。
我的問題是,因為我只有一個GPU,並且沒有CUDA-OpenGL互操作性,並且兩個進程都定期使用GPU,所以CUDA內核和OpenGL內核之間的上下文切換是否可能相互干擾。 我是否應該將設計更改為只有一個程序才能運行具有CUDA-OpenGL互操作性的零件。
計算能力5.0及以下的設備無法同時運行圖形和計算。 Tesla C2050不支持任何形式的搶占,因此在CUDA內核執行GPU時,不能將其用於渲染OpenGL命令。 CUDA-OpenGL互操作無法解決此問題。
如果您只有一個GPU,那么最好的選擇是將CUDA內核分解為較短的啟動時間,以便GPU可以在圖形計算之間進行切換。 在上述情況下,CUDA內核執行的時間不應超過50毫秒-GLRenderTime。
使用第二個GPU進行圖形渲染將是更好的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.