2013-09-28 90 views
3

我想完全瞭解PTXAS -v CUDA的內核堆棧使用情況和註冊溢出(適用於sm_35體系結構)的信息。對於我的內核之一它產生:瞭解CUDA內核堆棧使用情況並註冊溢出

3536 bytes stack frame, 3612 bytes spill stores, 6148 bytes spill loads 
ptxas info : Used 255 registers, 392 bytes cmem[0] 

我知道堆棧幀的本地存儲器,物理生活在那裏的全局內存是,是對每個線程專用分配。

我的問題是:

  1. 是需要的寄存器溢出也被分配在本地內存 內存?
  2. 寄存器溢出和堆棧所需的內存總量爲 ,等於[線程數量] x [3536字節]。因此,寄存器 溢出加載/存儲操作堆棧幀?
  3. 溢出商店/負載的數量沒有詳細說明 傳輸的大小。這些總是32位寄存器嗎?因此,一個64位浮點數的溢出會被計爲2個溢出存儲?
  4. 溢出存儲/加載緩存在L2緩存中嗎?
+0

可能部分在這裏回答:http://stackoverflow.com/questions/12388207/interpreting-output-of-ptxas-options-v – njuffa

+0

我讀了這個帖子。這部分回答。但是這並不能證明我們可以解決這個問題。見下面的評論。 – ritter

回答

2
  1. 寄存器溢出到本地內存。 「本地」是指「線程本地」,即每個線程專用的存儲器。
  2. 整個啓動所需的本地內存量爲至少 number_of_threads乘以local_memory_bytes_per_thread。由於分配粒度,通常可能更多。
  3. 的溢出轉移編譯器的統計數據已經標準化 以字節爲個別地方的存儲器訪問可能有差異 寬度。檢查生成的機器代碼(在二進制文件上運行cuobjdump --dump-sass)將顯示單個訪問的寬度。相關說明將包含LLD,LST, LDL,STL等名稱。
  4. 我相當確定本地內存訪問緩存在L1和 L2緩存中,但目前無法引用 文檔中的相關段落。
+0

請回答寄存器溢出空間是否包含在報告的堆棧幀中或放在其上(問題2)。我會很樂意接受你的回答。 – ritter