El ile yazılmış bir çekirdek için her CUDA iş parçacığı için kaynak kullanımını anlamaya çalışıyorum.--ptxas-options = -v yorumlamasını yorumlama -v
ben nvcc -arch=sm_20 -ptxas-options=-v
ile kernel.o
dosyaya benim kernel.cu
dosyayı derlenmiş ve yukarıda çıkış baktığımızda şu çıktıyı
ptxas info : Compiling entry function '_Z12searchkernel6octreePidiPdS1_S1_' for 'sm_20'
ptxas info : Function properties for _Z12searchkernel6octreePidiPdS1_S1_
72 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 46 registers, 176 bytes cmem[0], 16 bytes cmem[14]
var, doğru söylemek olduğunu
- Her bir CUDA iş parçacığı 46 kayıt kullanıyor?
- hiçbir kayıt yerel belleğe dökülmesini var mı?
Ayrıca çıkışı anlama ile ilgili bazı sorunlar yaşıyorum.
Çekirdeğim çok sayıda
__device__
işlevini çağırıyor. 72 bayt__global__
ve__device__
fonksiyonların yığın çerçeveleri için bellek toplamı toplam IS?0 byte spill stores
ve0 bytes spill loads
arasındaki fark nedir Neden
cmem
için bilgiler farklı rakamlarla iki kez tekrarlanır (I varsayıyorum sabit bellek ise) nedir? Çekirdek içinde hiçbir sabit bellek kullanmıyorum. Bu derleyici bazı sabit bellek kullanmasına GPU'yu anlatacağız, kaputun altında anlamına mı geliyor?
'kullanılmış 46 kayıt' derleyici derlenmiş çekirdek için iplik başına 46 yazmaç ayrılmıştır ve diğer kayıt dökülmesi gösterir. Dökülen yazmaç sayısını bu sayıyı (46) çekirdeğin PTX'inde kullanılan toplam kayıt sayısından çıkararak bulabilirsiniz. – ahmad
@Ahmad: İlk cümle doğru, ama ikincisi değil. Çekirdek, iş parçacığı başına izin verilen azami kayıttan daha azını kullanabilir ve yerel belleğe dökülmez. – talonmies
Terziler cevabını incelemek için, PTX sonsuz sicillerle yüksek düzeyde bir soyutlamadır. Bunun nedeni, birden çok jenerasyon GPU için derlenebilmesi ve kayıt sayısının farklı olabilmesidir. Sadece kayıt kullanımına bakabileceğiniz, makineye özgü kodu derlediğinizde. Her durumda, ptxas (PTX'i makineye özgü kodla derleme) size dökülme miktarını gösterir. – Tom