2013-10-26 22 views
0

我正在優化CUDA內核中的共享內存,因此我需要確定哪些變量是存儲在共享內存中的最佳候選(即最常訪問的)。我知道我可以翻遍代碼並計算每個變量被訪問的次數,但內核相當複雜,所以我希望有一種方法可以自動執行此操作。我可以讓GDB計算每個變量在通用CPU代碼或特定cuda-gdb中訪問的次數嗎?還是有其他可能有用的分析/調試工具?確定訪問變量的次數

謝謝。

+0

當然,您希望確保最常訪問的值存儲在寄存器中,而不是共享內存中? – talonmies

回答

1

我不知道任何性能指標能夠計算特定變量被涉及的線程訪問的次數。也許你應該看看反彙編的微碼(cuobjdump--dump-sass選項),以確定發生這種情況的次數。儘管如此,在現代體系結構(例如Fermi和Kepler)中,共享內存可以被看作是「受控的L1高速緩存」,所以如果變量不是從L1中逐出的,它的使用可能是不必要的。要了解全局內存變量從L1緩存中被逐出的頻率,您可以查看nvprof的一些性能指標,如果您不想手動計算訪問數量。例如,您可能會考慮global_cache_replay_overhead,gld_efficiency,gst_efficiency等。您可以在Metrics Reference上找到性能指標的完整列表。

最後,正如@talonmies所建議的那樣,您可能希望考慮對某些常用變量使用寄存器而不是共享內存來獲得更快的訪問。