.NET çerçevesinin Matematik işlevleri çoğunlukla çift duyarlıklı şamandıralarda çalışır, tek bir hassasiyet (şamandıra) aşırı yüklenme yoktur. Yüksek performans senaryosunda tekli hassas verilerle çalışırken, bu durum gereksiz dökümlere ve ayrıca işlevlerin gerekenden daha hassas bir şekilde hesaplanmasına neden olur, dolayısıyla performans bir dereceye kadar etkilenir. Bu ek CPU yükü bazı kaçınmanın bir yoluTek Hassas Matematik Operasyonları?
var mı? Örneğin. Altta yatan FPU yönergelerini doğrudan çağıran şamandıralı aşırı yüklü açık kaynak matematik kütüphanesi var mı? (Benim anlayışım, bunun CLR'de destek gerektirmesidir). Ve aslında modern CPU'ların bile tek bir hassas talimatı olup olmadığından emin değilim.
Bu soru kısmen sigmoid fonksiyonunu optimize etme konusunda bu soruya ilham almıştır:
Bildiğim kadarıyla
Eğer instrinsics bakın bu harici fonksiyonları aynıdır? - Matematik fonksiyonlarının nasıl uygulandığı, yani dilde tanımlanan intrinsiktir. AFAIK CLR, örn. Çift statik versiyonuna ek olarak, halka açık statik extern çift Sin (float a). – redcalx
Yerel kodda uygulamaktan mı bahsediyorsunuz? Tek bir kayan nokta işlemi için yapılan P/Invoke ek yükü, Sin (çift) ile çalışmanın performans etkisinden kaçınmaya çalışmayı tamamen ortadan kaldıracaktır. Intrinsics 'extern' olarak bildirilir, fakat P/Invoke değildir - bunlar için yerel kod, JIT tarafından dahili olarak mümkün olduğunca verimli hale getirilir. –
Bu yüzden, eğer algoritmanız çok sayıda float işlemi yapan tek bir P/Invoke yapabileceğiniz şekildeyse, bazı performanslar elde edilebilir. – Fantius