gcc (en son sürümler: 4.8, 4.9) icc tarafından desteklenen __assume()
benzeri bir "varsayım" yan tümcesi var mı? E.g., __assume(n % 8 == 0);
"Assume" deyimi, gcc'de
cevap
gcc 4.8.2'den itibaren, gcc'de __assume() eşdeğeri yoktur. Nedenini bilmiyorum - çok yararlı olur. mafso önerilir:
#define __assume(cond) do { if (!(cond)) __builtin_unreachable(); } while (0)
Bu, en az 2010 kadar ve muhtemelen daha uzun süredir bilinen eski bir numaradır. Derleyici genellikle 'koşul' değerlendirmesini en iyi duruma getirir, çünkü hangi koşulun yanlış olduğuna dair herhangi bir değerlendirme zaten tanımlanmayacaktır. Ancak, bir opak (satır içi olmayan) işleve bir çağrı içeriyorsa, 'kondisyonu' en iyi duruma getirme gibi görünmemektedir. Derleyici, opak aramanın bir yan etkiye sahip olabileceğini (örn., Global olarak değiştirebileceğini) varsaymalıdır ve sonuca göre herhangi bir hesaplamayı ve şubeyi optimize edebilmesine rağmen, çağrıyı en iyi duruma getiremez. Bu nedenle, makro yaklaşım en iyi ihtimalle kısmi bir çözümdür.
Gcc 5.2 ve 6.1'de de bu konuya baktı. Altta yatan ifade opak olduğunda, koşul optimize edilmez. Cond, salt işleve sarılı olsa bile, derleyicinin uzaklaşmak için özgür olacağını düşünebilirsiniz. Ayrıca derleyicinin kondisyonu optimize edip etmediğini tespit etmem için henüz bir yol bulamadım. Bu, gereksiz bir kod ekleyerek derleyici oluşturarak bu makroyu kullanarak performansa zarar vermenin mümkün olduğu anlamına gelir. Şeffaf ifade ile makro çok iyi çalışır. – user377178
- 1. git update-index --no-assume-değişmemiştir
- 2. Mysqldump bir INSERT deyimi aşağıdaki deyimi ile
- 3. Select deyimi
- 4. parametre deyimi
- 5. deyimi sorunu
- 6. deyimi C++
- 7. Git - 'Assume-unchanged' ile 'Skip-worktree' Arasındaki Fark
- 8. “Assume-unchanged” ile halihazırda korunan bir dosyayı `ekle 'mümkün mü?
- 9. SQL deyimi sonuçları Ben bir SQL deyimi var
- 10. SQL Select deyimi - Ben :) çalışıyor normal select deyimi var
- 11. EĞER ELSE deyimi kısayol
- 12. GÜNCELLEME t-SQL deyimi
- 13. Atama deyimi değeri
- 14. SQL Server Birleştirme deyimi
- 15. ALTER TABLE deyimi çatışmalı
- 16. Önleme isIstance deyimi
- 17. "N kere tekrarla" deyimi?
- 18. Oracle: bir SELECT deyimi
- 19. Null nesnesiyle deyimi kullanma
- 20. CASE deyimi, tqql sorgusunda
- 21. Nasıl bir IN deyimi
- 22. PowerShell SQL deyimi
- 23. sql SQL deyimi .net
- 24. c dili sizeof deyimi
- 25. select deyimi çıktısını karşılaştırın
- 26. bir deyimi Örneğin
- 27. INSERT SELECT deyimi
- 28. Bir vaka deyimi ruby
- 29. MongoDB (Java) deyimi değerini
- 30. python/pandas elif deyimi
Bak: '__builtin_expect'? https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html –
Şube tahmini için olduğu gibi, ilmek sayısının iyi bir sayı olduğu için vektörleştiriciyi ima etmem gerekiyor. – user2052436
icc'ye erişimim yok, Visual C __assume() ile aynı mı? (http://msdn.microsoft.com/en-us/library/1b3fsfxw.aspx) –