我的問題涉及ComputeShader,特別是HLSL代碼。因此,DeviceContext.Dispath(X, Y, Z)
產生了X * Y * Z組,每個組都有屬性[numthreads(x,y,z)]
中設置的x * y * z個別線程。問題是,我怎樣才能獲得分派的ThreadGroups總數和一個組中的線程數?讓我解釋爲什麼我需要它 - 我打算處理的數據量可能差別很大,所以我的方法應該適應輸入數組的大小。當然,我可以在常量緩衝區中發送Dispath參數以使其可以從HLSL代碼中獲得,但是對於組中的線程數呢?我正在尋找像GetThreadGroupNumber()
和GetThreadNumberInGroup()
這樣的方法。我感謝任何幫助。HLSL獲取代碼中的threadGroups和numthreads的數量
2
A
回答
2
組中的線程數只是numthreads
尺寸的乘積。例如,numthreads(32,8,4)
將每個組有32*8*4 = 1024
個線程。這可以在編譯時靜態確定。
可以通過將uint3
輸入參數與SV_GroupId
語義相加來確定特定線程組的ID。
一個線程組內一個特定的線程的ID可以通過添加與SV_GroupThreadID
語義,或uint
SV_GroupIndex
一個uint3
輸入參數,如果你喜歡的扁平版本來確定。
至於爲每個線程提供有關調度總大小的信息,使用常量緩衝區是最佳選擇。這類似於圖形管線,其中像素着色器不自然地知道視口尺寸。
還值得一提的是,如果你發現自己處於每個線程都需要知道整體分派大小的位置,那麼應該考慮重構你的算法。一般來說,最好分派可變數量的線程組,每個線程組都有固定的工作量,而不是派發固定數量的線程來完成可變的工作量。當然也有例外,但這往往會提供更好的硬件利用率。
相關問題
- 1. directcompute hlsl numthreads?
- 2. HLSL代碼沒有註冊?
- 3. 獲取Matlab中函數的代碼?
- 4. 從java代碼獲取rabbitmq隊列中消息的數量
- 5. 代碼獲取未讀電子郵件在BlackBerry中的數量
- 6. 從IIS獲取IIS中的請求數量代碼
- 7. 從質量中心獲取c#代碼
- 8. 是否有可能從矢量量化的代碼字中獲取代碼書?
- 9. 獲取HLSL頂點的顏色?
- 10. 如何獲取JavaScript和jQuery變量的代碼在asp.net C#
- 11. 如何獲取代碼中緯度和經度的數據
- 12. 獲取代碼行總數?
- 13. PHP代碼的PHP變量 獲取<span>數據
- 14. 如何從C#代碼中獲取TSQL中的變量值?
- 15. HLSL中的數組長度?
- 16. 獲取的代碼行數執行
- 17. 獲取代碼內的數據
- 18. 獲取數字的字符代碼
- 19. 重建/獲取php函數的代碼
- 20. 獲取代碼
- 21. 獲取代碼
- 22. 獲取代碼
- 23. 獲取代碼
- 24. ASP.NET數據綁定/從代碼隱藏中獲取變量
- 25. 獲取用戶定義的類和函數的源代碼?
- 26. 獲取代碼,以$ _ POST變量PHP
- 27. 硒代碼從excel中獲取數據
- 28. PHP函數和變量的代碼
- 29. 獲取Android的源代碼
- 30. 獲取Android的代碼串
好吧,我明白了,ty回覆 – Ilia