2013-07-09 12 views
7

2.x bilgi işlem cihazları için doğru bir şekilde anladığım için iş parçacığı başına 63 kayıt sınırı vardır. Hesaplama kapasitesi 1.3 cihazlarının her dişi için kayıt sınırı hangisinin olduğunu biliyor musunuz?Her bir diş için Cuda yazmaçları

GTX260 üzerinde test ettiğim büyük bir çekirdim var. Çekirdek çok karmaşık olduğundan ve çok fazla yerel değişkene ihtiyacım olduğundan çok fazla kayıt kullandığımdan eminim. Cuda profiler göre benim kayıt kullanımım 63 (Statik Smem 68 ne anlama geldiğini ve ne kadar dinamik Smem 0 olduğundan emin değilim rağmen), ben 63'ten fazla yerel değişken var eminim rağmen, ben derleyici, kayıtları yeniden veya yerel belleğe döküyor.

Şimdi, hesaplama kapasitesi 1.3'teki aygıtların, 2.x aygıtlarından daha fazla iş parçacığı için daha yüksek bir yazma sınırı olduğunu düşündüm. Benim tahminim, derleyicinin 63 sınırı seçmesiydi, çünkü 256 parçanın bloklarını kullanıyorum. 256 * 63 16128 iken, 256 * 64 16384 iken bu aygıtın SM'sinin limit sayısıdır. Tahminimce, blok başına iplik sayısını düşürürsem, kullanımdaki yazmaç sayısını arttırabilirim. Böylece çekirdek 196 iş parçacığı blokları ile koştum. Fakat yine de, 63 * 192, 12096 ve 64 * 192 12288 olsa da, profiler, SM'nin 16384 limitinin içinde olan 63 kaydı göstermektedir.

Peki, derleyicinin neden hala 63 yazmaçla sınırlandığını anlatan bir fikir var mı? Her şey yeniden kayıt olmasından kaynaklanıyor olabilir mi yoksa hala kayıtlar dökülüyor mu? parçacığı başına

+1

Cevabınız sorunun ilk kısmı için olabilir [burada] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-technical-specifications.xml) – talonmies

+0

Evet Daha önce ona bakıyordum. Tabloda, "Çok işlemcili başına 32-bit kayıt sayısı", 16K olan ancak ihtiyaç duyduğum şey, burada belirtilmeyen ** iş parçacığı başına izin verilen maksimum ** sayısıdır. 2.x cihazlar için limitin 63 olduğunu biliyorum ama 1.3 için bir limit var mı? – Atirag

+2

Bakmaya devam et, her iplik numarası – talonmies

cevap

13

maksimum kayıt derleyici 63 kayıt olduğuna karar olabilir 3.5

cc cc 1.x here

Bu cc 2.x 63 ve 3.0 olan, 128 ve 255 belgelenmiştir yeterli ve ek yazmaçlar için kullanamazsınız. Kayıtlar yeniden kullanılabilir, bu nedenle birçok yerel değişkeniniz olması nedeniyle, her bir iş parçacığı için kayıtların yüksek olması gerektiği anlamına gelmez.

Benim önerim -Xptxas -voption derleyici için kullandıkları sonra çeşitli sınırlarını belirtmek için nvcc -maxrregcountoption kullanın ve olacaktır da PTX oluşturduğunda bunu kullandığını kaç kayıtları size.

+0

Çok teşekkür ederim! – Atirag

+2

Ayrıca, [iş parçacığı sınırlarını] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#launch-bounds) adresindeki iş parçacığı sınırı başına kayıtların daha hassas denetimini sağlamak için de kullanabilirsiniz. çekirdek bazında. –