天天看點

《CUDA C程式設計權威指南》——3.8節習題

本節書摘來自華章社群《cuda c程式設計權威指南》一書中的第3章,第3.8節習題,作者[美] 馬克斯·格羅斯曼(max grossman) ,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

3.8 習題

1.當在cuda中展開循環、資料塊或線程束時,可以提高性能的兩個主要原因是什麼?解釋每種展開是如何提升指令吞吐量的。

2.參考核函數reduceunrolling8和實作核函數reduceunrolling16,在這個函數中每個線程處理16個資料塊。将該函數的性能與reduceunrolling8核心性能進行比較,通過nvprof使用合适的名額與事件來解釋性能差異。

3.參考核函數reduceunrolling8,替換以下的代碼段:

《CUDA C程式設計權威指南》——3.8節習題

比較每次的性能并解釋使用nvprof名額的差異。

4.參考核函數reducecompleteunrollwarps8。不要将vmem聲明為volatile修飾符,而是使用__syncthreads。注意__syncthreads必須被線程塊裡的所有線程調用。比較兩個核函數的性能并使用nvprof來解釋所有的差異。

5.用c語言實作浮點數s的求和歸約。

6.參考核函數reduceinterleaved和reducecompleteunrollwarps8,實作每個浮點數s的版本。比較它們的性能,選擇合适的名額與/或事件來解釋所有差異。它們相比于操作整數資料類型有什麼不同嗎?

7.被動态地産生孩子的全局資料進行更改,這種改變什麼時候能保證對其父親可見?

8.參考檔案nestedhelloworld.cu,用圖3-30所示的方法實作一個新的核函數。

9.參考檔案nestedhelloworld.cu,實作一個新的核函數,使其可以用給定深度來限制嵌套層。

繼續閱讀