2016-04-08 26 views
2

.h ve .cu ile yazılan birçok sınıfa sahibim, bu nedenle yeniden yüklenebilir aygıt kodunu denedim (-rdc = true). Yaklaşık 12 saniyeye mal oldu. Daha sonra kodu birleştirmeyi denedim, yalnızca üst sınıfları kullan ve -rdc = true'u kaldır, sadece 2 saniye sürdü.Neden crd kodu -rdc = true belirtildiğinde çok daha yavaş çalışır

Kod ne yapar? Win1 şifreleme için kullanılan sha1 (bazı dize) 0x40000 kez.

Neden? Şimdilik sorun değil, ama projem daha büyük olacak ve ayrı bir derleme faydalı olacaktır. -rdc = true'un performansı yavaşlatabileceği normal davranış mı?

cevap

2

Ayrı bir derlemenin bu yavaşlamaya neden olması olabilir. Derleyiciler belirli optimizasyonları uygulamak için yeterli bilgiye sahip olmayabilir (tüm bağlantı zaman bilgisi eksik). Görünüşe göre nvcc hala bu optimizasyonu bağlantı aşamasında kullanmıyor.

+4

Kodun kendisiyle ilgili herhangi bir bilgi olmadan hipotez yapmak zordur. CUDA derleyici, "tüm program" modunda derlediğinde, genellikle ek optimizasyonlar için fırsatlar açan (ortak alt-ifade eleme, sürekli yayılım, daha iyi yük çizelgeleme), agresif fonksiyonları devreye alır. CUDA takım zincirinin bir optimizasyon bağlayıcısı olmadığı için, '-rdc = true' işlevlerini kullanırken derleme birimi sınırları boyunca satır içi çizilemez. Ayrı olarak derlenen işleve, ABI çağrı kuralının ek yüküne ve satır içi ile etkinleştirilen diğer optimizasyonlara yapılan çağrılar yapılmaz. – njuffa

2

Bir iş parçacığının kodu ayrı bir çeviri biriminde bulunuyorsa, bu, aradığınız giriş noktasının başlığında değil, ardından satır içi oluşmayabilir. Bu durumda, işlev çağrısı daha pahalı olacaktır. Zaman-kritik işlevlerinizi satır içi anahtar sözcüğüyle bir üstbilgi dosyasında yeniden konumlandırmak isteyebilirsiniz, böylece derleyicinin satır içi fırsatı vardır.

Ayrı bir derleme, bu tablodaki gibi (http://docs.nvidia.com/cuda/parallel-thread-execution/index.html#operand-costs) kayıtlardan çok daha pahalı olan parametreler için yerel adres alanının kullanılmasına yol açabilir (parametre geçişi için http://docs.nvidia.com/cuda/parallel-thread-execution/index.html#abstracting-abi'a bakın).

Sınıf uygulama dosyasındaki bazı yöntemleri bağlantı sorunlarından kaçınmak için satır içi anahtar sözcüğüyle birlikte başlık dosyasında taşımak bir çözüm olabilir.

İlgili konular