餓了一部分,當我使用太多的寄存器,基本上有3個選項我能做得到的內核:確定最註冊內核
- 離開內核,因爲它是導致低入住
- 集編譯器使用數量較少的寄存器,它們溢出,導致糟糕的表現
- 重寫內核
選項3,我想知道哪個內核的一部分需要記數的最大數量ERS。有沒有任何工具或技術可以讓我識別這部分?通過PTX代碼(我在NVidia上開發)讀取沒有幫助,寄存器有很多數字,說實話,我能做的最好的是確定彙編代碼的哪一部分映射到C代碼的哪一部分。
只是註釋掉一些代碼並不是一個很好的方法 - 例如,我注意到如果我只是把代碼放到循環中,寄存器的數量會大大增加,不僅僅是一個循環控制變量。我個人懷疑NVidia編譯器是從不完善的變量生存分析中,但當然我不能用這麼做:-)
嗯,我知道這個「理論」,但我寧願尋找好的工具。我不確定編譯器使用了多少優化,但是一個好的編譯器可以改變很多代碼。例如,使用循環展開(肯定會完成),所使用的寄存器數量會增加變量數量。 –