我目前正在編寫OpenCL內核(但我認爲在CUDA中將是相同的),並且目前我嘗試針對NVidia GPU進行優化。OpenCL和CUDA註冊使用優化
我目前在我的內核使用63個寄存器,這個內核是非常大的,所以它使用所有GPU的寄存器。我正在尋找一些方法來:
1)查看哪些變量是寄存器,然後將它們在全局內存(因爲如果我沒有足夠的寄存器似乎編譯器保存在全局內存中的變量)。
2)是否有可指定哪個變量是更重要的(或應是在寄存器中)的方法。因爲我使用了一些存在但較少使用的變量。一種優先考慮的方法?
當我們已經使用所有的寄存器時,還有其他優化策略嗎?
BTW:我也嘗試讀取PTX代碼並搜索所有「.reg」關鍵字,但問題是PTX不可讀,我不知道哪個寄存器用於我的代碼中的哪個變量。我一直沒有找到任何方法來獲得相應的答案!
感謝
__local uint16 somedata意味着組中的所有線程將看到相同的變量而不是私人副本,因此它會導致不同的行爲。 –
是的,你是對的,我犯了一個錯字,實際上我應該寫__local uint16 somedata [WG_SIZE];我會糾正它。 – alariq