2013-02-10 88 views
1

我想首先確認以下內容: 共享內存的基本全局內存事務是32字節,64或128字節,但前提是內存訪問可以合併。先例交易的延遲都是平等的。是對的嗎?第二個問題:如果內存讀取不能合併,每個線程只讀取4個字節(是嗎?)所有線程的內存訪問是否都是順序的?cuda內存合併

+0

您可能希望查看一些網絡研討會[這裏](https://developer.nvidia.com/gpu-computing-webinars)。特別是網絡研討會涵蓋了內存高效的操作和[全局內存](http://developer.download.nvidia.com/CUDA/training/cuda_webinars_GlobalMemory.pdf)(和[視頻](http:// developer。 download.nvidia.com/CUDA/training/globalmemoryusage_june2011.mp4))和[共享內存(視頻)](http://developer.download.nvidia.com/CUDA/training/sharedmemoryusage_july2011.mp4)內存交易發生在一個大小32或128字節的粒度。 – 2013-02-10 00:50:45

回答

1

這取決於您正在處理的架構。然而,費米和開普勒您有:

  • 內存交易總是32個字節或128字節稱爲段時,只使用L2緩存
  • 32字節段時,128字節段時,L2 + L1。
  • 如果同一經線落入同一網段的兩個線程,數據是在一個單一的TRANSATION
  • 如果另一方面存在你取,沒有線程請求段相關的數據傳送 - 它被無論如何讀取和你(可能)浪費帶寬
  • 全段分爲L1 & L2緩存,可以降低對帶寬的壓力,當你的鄰居經紗需要在同一網段
  • L1 & L2是比線程他們通常提供的數量相當小。這就是爲什麼你不應該期待一段數據長時間停留在高速緩存中(與CPU編程相反)
  • 如果你在隨機內存訪問模式中進行超級提取,你可以禁用L1高速緩存。

正如您所見,有幾個變量決定了您的內存訪問需要多少時間。一般的經驗法則是:您的訪問模式越密 - 越好!現在的跨越或錯位並不像過去那樣昂貴,所以不要擔心太多,除非您正在進行一些後期優化。