2013-03-03 44 views
1

我正在CUDA Kepler GTX680上寫一個體積射線投射算法。該算法是密集型寄存器,導致寄存器溢出或最大佔用率的50%。提高吞吐量的推薦方法是命令指令支持指令級並行性。CUDA ILP,指令獲取,流水線和分支

爲了實現架構的最大吞吐量,各種管道必須保持繁忙。算術單元的管道長度爲cca。 22條指令,因此要實現其全吞吐量,必須在每個時鐘週期安排一個新的算術運算。我預計交換會發生變形(由於其未滿足的數據依賴性而停用一個變形,並激活準備運行的另一個變形)不會觸及算術單元管道。因此,我假定CUDA架構通過以隱藏內存延遲的相同方式交換多個warp來有效地隱藏一些指令依賴性。這個假設是否正確?

指令取指&解碼流水線?管道有多長?假設當前的warp由於不滿意的數據依賴性而被換出,指令流水線被刷新,因此交換warps並不是完全免費的,對吧?分支影響指令如何處理?我想分支指令必須拖延指令流水線,直到分支條件被評估爲止,這似乎使得預測評估比分支更便宜。是這樣嗎?

開普勒GK104/110架構的指令緩存有多大,以及它是如何組織的?可能對於一個複雜的內核來說,取指的速度可能是瓶頸?

我會很感激任何可能爲我提到的任何區域提供光線的參考。 NVidia製作了大量的PowerPoint演示文稿,但這些僅作爲口頭演示文稿的補充。

+1

NVidia還生成CUDA C最佳實踐指南和並行線程執行ISA版本3.1。你找到那些了嗎? – 2013-03-03 14:52:29

回答

3

最好每個問題提出一個問題。

因此,我假定CUDA架構通過以隱藏內存延遲的相同方式交換多個warp來有效地隱藏了一些指令依賴關係。這個假設是否正確?

是的,機器隱藏任何類型延遲的主要機制是通過使多個warps準備好執行,無論是來自相同還是不同的塊。

因此交換經線並不是完全免費的,對嗎? (摺疊多個問題到這一個)

不,交換經線是零成本。第一點(延遲隱藏)取決於此。從C節目指南here

執行上下文(程序計數器,寄存器等),用於通過一個多處理器處理的每個經紗經紗的整個壽命期間保持在芯片上。因此,從一個執行上下文切換到另一個執行上下文沒有代價,並且在每個指令發佈時間,warp調度器選擇一個warp,該warp具有準備執行其下一條指令(warp的活動線程)的線程並向這些線程發出指令。

對於一般建築的理解,我會推薦了Fermi whitepaper,開普勒GK104(GTX680)whitepaper,並開普勒GK110 whitepaper