2014-06-05 67 views
1

我想知道我的CUDA內核在內存帶寬利用率方面的表現如何。我在帶有ECC的Tesla K40c上運行它們。 bandwidthTest實用程序給出的結果是否與可達到的峯值很接近?否則,如何編寫一個類似的測試來尋找峯值帶寬?CUDA帶寬測試獲得可達峯值

我的意思是設備內存帶寬。

+0

bandwidthTest足夠好,你不能提高帶寬太多。等價物是一個簡單的複製內核。你想要做的是確保在內核中複製多個數據值。例如,如果處理3d數據集,則使用2d線程塊來平鋪空間,並且內核在z維上具有for循環。 – angainor

回答

1

帶寬測試的源代碼包含在CUDA SDK中,因此您可以直接查看它。 bandwidthTest示例執行設備與主機,主機與設備,設備與設備(傳輸卡上的內存)之間傳輸時間的測試。

這是一個內存傳輸的實際執行,但它需要的幾件事情的優勢:

  1. 大中型內存傳輸。如果您正在進行大量小型 轉賬,您將支付高額罰金,這將減少您的轉帳率。
  2. 固定內存。 bandwidthTest使用固定內存,以便傳輸儘可能快。你可能有也可能沒有這個選項。
  3. 持續讀取/寫入內存。據我所知,bandwidthTest會進行一些可以排隊的傳輸。任何啓動延遲或異常情況都會被平滑化,並且它具有將大量傳輸串在一起的優點。您可能必須進行轉移 - 工作 - 轉移工作,這樣可能會導致額外的延遲。來自CUDA 5的內存傳輸改進可能有助於緩解這一問題。

在執行內存傳輸時使用內核執行實際工作可能會導致性能下降。但是,您可以參考帶寬測試代碼並將其用作改進傳輸的指南。考慮固定內存,異步傳輸或不需要顯式傳輸數據的較新的共享內存方法。另外請記住,bandwidthTest只計算內存周圍的批量傳輸,而不是真正衡量共享內存等事情。

最終的性能將在很大程度上取決於內核以及您正在執行的內存傳輸的數量和大小。