如上所述here vkQueueWaitIdle相當於vkFence。 那麼在哪種情況下使用其中任何一種。在什麼情況下VkFence比vkQueueWaitIdle更適合vkQueueSubmit?
回答
非常坦率地說,你應該總是更喜歡等待圍欄,因爲它更靈活。
用籬笆,您可以等待工作完成,而無需等待您等待工作後提交的工作。圍欄還允許其他線程將命令緩衝區推送到隊列中,而不會干擾等待。
除了WaitQueueIdle可以以不同的方式實現(效率較低)與等待圍欄相比。
正如你所說,vkQueueWaitIdle()
只是柵欄使用的特例。
因此,如果您不得不編寫10行等效的Fence代碼,則可以使用它。
VkFence
更一般。
您可以利用先進的
vkWaitForFences()
用法。即等待一個和等待所有和timeout
。您將它提供給一些應該發信號的命令(不能用
vkQueueWaitIdle()
來實現)。你可以這樣做:
vkQueueSubmit(q, 1, si1, fence1);
vkQueueSubmit(q, 1, si2, fence2);
vkWaitFences(fence1); // won't block on the 2nd submit unlike vkQueueWaitIdle(q)
甚至可能是潛在的速度比:
vkQueueSubmit(q, 1, si1, 0);
vkQueueWaitIdle(q);
vkQueueSubmit(q, 1, si2, 0);
您可以直接查詢圍欄的狀態,而無需等待與
vkGetFenceStatus()
(其本身似乎是更簡單版本的vkQueueWaitIdle()
)。例如。有一些背景工作,只是定期詢問在做其他工作時是否已完成。
在什麼情況下是VkFence比vkQueueWaitIdle爲vkQueueSubmit更好?
當你不關閉福爾康情況下,即在幾乎所有情況。 vkQueueWaitIdle
是大錘的同步方法,大致類似於glFlush()
。 Vulkan隊列是你想要保持填充,因爲當它是空的時,這是一種低效率。使用vkQueueWaitIdle
會在客戶端代碼和Vulkan驅動程序的各個部分之間創建一種同步點,這可能會導致GPU管道中的停頓和泡影。
圍欄更加細膩。與其要求隊列中沒有任何工作,只是詢問何時完成了在圍欄之前或使用圍欄排隊的特定工作集。即使它仍然通過必須將客戶機CPU線程與驅動程序CPU線程同步來創建同步點,這仍然使驅動程序可以自由地繼續處理隊列中的其餘項。
信號比柵欄更好,因爲它們告訴驅動程序一件作品依賴於另一件作品,並讓驅動程序完全在內部完成同步,但它們不適用於所有情況,因爲有時客戶端需要來了解何時完成某項工作。
- 1. 在什麼情況下CopyOnWriteArrayList適合?
- 2. 在什麼情況下比絕對定位更適合(反之亦然)?
- 3. 在什麼情況下CGI比Servlet更快?
- 4. 在什麼情況下使用json_encode()比使用serialize()更好?
- 5. 在什麼情況下Math.Round(...,MidpointRounding.AwayFromZero)比CInt更可取?
- 6. 在什麼情況下IE8的Javascript性能會比IE7更糟?
- 7. 爲什麼在這種情況下枚舉比HashMap更有用?
- 8. 什麼情況下動態語言不適合?
- 9. 這種情況下最適合的語言/技術是什麼?
- 10. 這種情況下最適合的認證技術是什麼?
- 11. 有什麼情況下hashtable比concurrenthashmap更好?
- 12. 比使用IF更適合這種情況嗎?
- 13. 爲什麼清除在這種情況下不適用?
- 14. 在什麼情況下,命令鏈設計模式適用?
- 15. 爲什麼在這種情況下只適用一個參數?
- 16. 在什麼情況下.htaccess不適用於Apache?
- 17. 爲什麼在這種情況下,respondsToSelector不適用於我?
- 18. 爲什麼autoboxing在這種情況下不適用於泛型?
- 19. 什麼情況更好?
- 20. 在這種情況下,Perl會用什麼來比較?
- 21. 在什麼情況下,DocumentDB更好,更快?
- 22. 在這種情況下合併是否合適?
- 23. 在什麼情況下有狀態比網絡無狀態更好?
- 24. 在什麼情況下使用運算符演變比混淆更有用?
- 25. 在什麼情況下可以做到 - 雖然比以前更有效率?
- 26. 在什麼情況下調用__rmul__?
- 27. fgets()在什麼情況下卡住了?
- 28. 在什麼情況下document.open()返回null?
- 29. 爲什麼在這三種情況下
- 30. 在什麼情況下AppDomain.DoCallback()會失敗?