本節書摘來自華章社群《cuda c程式設計權威指南》一書中的第3章,第3.8節習題,作者[美] 馬克斯·格羅斯曼(max grossman) ,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視
3.8 習題
1.當在cuda中展開循環、資料塊或線程束時,可以提高性能的兩個主要原因是什麼?解釋每種展開是如何提升指令吞吐量的。
2.參考核函數reduceunrolling8和實作核函數reduceunrolling16,在這個函數中每個線程處理16個資料塊。将該函數的性能與reduceunrolling8核心性能進行比較,通過nvprof使用合适的名額與事件來解釋性能差異。
3.參考核函數reduceunrolling8,替換以下的代碼段:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLzM2M1ETOwcTMiNzMxAjZ3Q2N3cTOllTO5MTZzUTY0EDNilTZzQGMx8CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
比較每次的性能并解釋使用nvprof名額的差異。
4.參考核函數reducecompleteunrollwarps8。不要将vmem聲明為volatile修飾符,而是使用__syncthreads。注意__syncthreads必須被線程塊裡的所有線程調用。比較兩個核函數的性能并使用nvprof來解釋所有的差異。
5.用c語言實作浮點數s的求和歸約。
6.參考核函數reduceinterleaved和reducecompleteunrollwarps8,實作每個浮點數s的版本。比較它們的性能,選擇合适的名額與/或事件來解釋所有差異。它們相比于操作整數資料類型有什麼不同嗎?
7.被動态地産生孩子的全局資料進行更改,這種改變什麼時候能保證對其父親可見?
8.參考檔案nestedhelloworld.cu,用圖3-30所示的方法實作一個新的核函數。
9.參考檔案nestedhelloworld.cu,實作一個新的核函數,使其可以用給定深度來限制嵌套層。