4
我成功使用cuda-memcheck獲取有關錯誤內存訪問的錯誤。編譯CUDA代碼-g -G給了很好的源位置是這樣的:cuda-memcheck,如何從地址獲取源代碼?
========= Error: process didn't terminate successfully
========= Invalid __global__ read of size 1
========= at 0x00000710 in /some/path/somefile.cu:117:some_function
========= by thread (0,14,0) in block (1,16,0)
========= Address 0x00abac20 is out of bounds
現在我試圖用-l開關也讓內存泄漏信息。然而,在這裏,我只獲得地址:
========= CUDA-MEMCHECK
========= Leaked 3630 bytes at 0x007d2800
=========
========= Leaked 14740 bytes at 0x008e0700
...
=========
========= LEAK SUMMARY: 11122140 bytes leaked in 39 allocations
========= ERROR SUMMARY: 0 errors
400 bytes at 0x005d2000
我怎樣才能從這個實際的代碼位置?
VC++通過爲每個分配分配序列號來處理它,然後在出口處輸出該序列號以及泄漏摘要。通過使用相同的數據運行相同的代碼兩次,可以首先查找泄漏的分配的序列號,然後查找分配發生的位置。 – 2012-03-08 17:18:05
爲了跟進我之前的評論,你可以爲cudaMalloc()創建一個包裝器,它增加一個靜態聲明的序列號,並將序列號和分配的內存地址寫入標準輸出或文件。程序結束後,查看cudaMalloc()包裝器打印的泄漏地址,以查找泄漏分配的序列號。然後修改cudaMalloc()包裝器,使其在序列號出現時中斷並重新運行程序。 – 2012-03-08 23:41:19