我在DirectX中寫入紋理,然後在CUDA內核中讀取它。我在啓動內核之前使用cudaGraphicsMapResources。有時需要10-30毫秒。當然,這會導致應用程序中出現framedrop。紋理僅用DirectX編寫,只能在CUDA中讀取,不能在其他地方使用。cudaGraphicsMapResources當映射DirectX紋理時速度較慢
我嘗試了不同的東西,比如等待幾幀,但它並不總是有幫助。我也試着只在開始時調用cudaGraphicsMapResources(而不是每次調用它),但是我不能保證DirectX已經完成編寫紋理(有時它沒有)。我試圖使用線程,但當我從不同線程調用cudaGraphicsMapResources時,它崩潰。
我也有這樣的印象,它主要發生在啓用vsync時。
這是一個已知的問題?這是什麼原因?有沒有辦法測試資源是否以非阻塞方式準備好?或者總體來說有一些解決方法?
我有GeForce GTX 670,Windows 7 64位,驅動程序版本。 331.82。
我已經在使用cudaGraphicsMapFlagsReadOnly。 –
我已經使用cudaGraphicsMapFlagsReadOnly。我不明白它到底在等什麼?它是否只是等待繪製到我的紋理來完成(在我的情況下,這將完成StretchRect或ResolveSubresource調用),還是等待執行cudaGraphicsResource之前發出的所有圖形調用,並且GPU對CUDA「免費」?或者是其他東西?無論如何,有沒有辦法減少等待時間?或者只是測試它是否已經準備好而不會阻塞? –
「當然,您無法控制其他應用程序執行的繪圖。」不,我的意思是同一個程序中的其他圖形調用。我畫我的紋理,也做一些其他的東西。 –