Herkese selam :) Kayan nokta, SIMD/matematik intrinsik ve gcc için hızlı-matematik bayrağı ile ilgili birkaç kavram asmak çalışıyorum. Daha spesifik olarak, x86 işlemci üzerinde gcc v4.5.0 ile MinGW kullanıyorum.gcc, simd intrinsics ve hızlı matematik kavramları
şimdi bir süre etrafta aradık, ve ben (I düşünmek) şu anda anlıyorum ne: Hiçbir bayraklarıyla derlerken
, herhangi fp kodu standart x87 olacak, hiçbir SIMD intrinsics, ve math.h işlevleri msvcrt.dll dosyasından bağlanır. Ayrıca bazı optimizasyon bayrakları belirtirseniz ben mfpmath kullanmak
, mssen ve/veya böylece mmx/sse/avx kod etkinleştirilecek olan mart, gcc aslında On gibi SIMD talimat sadece kullanır veya ftree-vectorize. Bu durumda intrinsikler gcc tarafından otomatik olarak seçilir ve bazı matematik fonksiyonları (hala math.h'deki standart matematik fonlarından bahsederim) intrinsik hale gelir veya inline koduyla optimize edilir, bazı diğerleri hala msvcrt'den gelir. dll. En iyileştirme bayraklarını belirtmezsem, bu değişikliklerden herhangi birini yapar mı? Belirli SIMD veri türlerini kullandığınızda
(v4si veya v8qi gibi gcc uzantıları olarak kullanılabilir olanlar,), doğrudan içsel Funcs arayın veya yeniden gcc için automagic kararı ayrılma seçeneğine sahip. Doğru işaretler aracılığıyla simd yönergelerini etkinleştirmezseniz Gcc hala standart x87 kodunu seçebilir. Yine, optimizasyon bayrakları belirtmezsem, bu değişikliklerden herhangi birini yapar mı?
Plese benim ifadelerden herhangi yanlış varsa düzeltin: p
Şimdi soru:
- şimdiye intrinsics kullanmak x86intrin.h dahil etmek var mı?
- Libm'yi hiç bağlamak zorunda mıyım?
- Hızlı matematik herhangi bir şeyle ne ilgisi var? Anladığım kadarıyla IEEE standardını rahatlatıyor, özellikle de nasıl? Diğer standart fonksiyonlar kullanılıyor? Başka bir lib bağlı mı? Ya da sadece bir yerdeki bayraklar bir çift ve standart lib farklı davranıyor mu? yardım edecek kimseye
Teşekkür: D
üzerinde gcc kılavuzu 3. bir örnek için buraya bakın: http://stackoverflow.com/questions/4956033/multiply-by-0-optimization – Anycorn