我正在CUDA Kepler GTX680上寫一個體積射線投射算法。該算法是密集型寄存器,導致寄存器溢出或最大佔用率的50%。提高吞吐量的推薦方法是命令指令支持指令級並行性。CUDA ILP,指令獲取,流水線和分支
爲了實現架構的最大吞吐量,各種管道必須保持繁忙。算術單元的管道長度爲cca。 22條指令,因此要實現其全吞吐量,必須在每個時鐘週期安排一個新的算術運算。我預計交換會發生變形(由於其未滿足的數據依賴性而停用一個變形,並激活準備運行的另一個變形)不會觸及算術單元管道。因此,我假定CUDA架構通過以隱藏內存延遲的相同方式交換多個warp來有效地隱藏一些指令依賴性。這個假設是否正確?
指令取指&解碼流水線?管道有多長?假設當前的warp由於不滿意的數據依賴性而被換出,指令流水線被刷新,因此交換warps並不是完全免費的,對吧?分支影響指令如何處理?我想分支指令必須拖延指令流水線,直到分支條件被評估爲止,這似乎使得預測評估比分支更便宜。是這樣嗎?
開普勒GK104/110架構的指令緩存有多大,以及它是如何組織的?可能對於一個複雜的內核來說,取指的速度可能是瓶頸?
我會很感激任何可能爲我提到的任何區域提供光線的參考。 NVidia製作了大量的PowerPoint演示文稿,但這些僅作爲口頭演示文稿的補充。
NVidia還生成CUDA C最佳實踐指南和並行線程執行ISA版本3.1。你找到那些了嗎? – 2013-03-03 14:52:29