Moyner'in cevabının bir uzantısı olarak , yonga sqrt
genellikle rsqrt
, yani hesaplayan karşılıklı bir kare köküdür . Eğer kodunuzda sadece kullanacaksanız (moleküler dinamikleri kullanıyorsanız), doğrudan hesaplayabilir ve kendiniz bölünmesini kaydedebilirsiniz. Bunun yerine hesaplanmasının nedeni , Newton yinelemesinin bölünmeleri, sadece eklemeleri ve çarpımları olmasıdır.a→1/a−−√1/rr = rsqrt(r2)
rsqrt
sqrt
Not olarak, bölümler yinelemeli olarak hesaplanır ve neredeyse rsqrt
donanım kadar yavaşlar . Verimlilik arıyorsanız, gereksiz bölümleri kaldırmaya çalışırken daha iyi olursunuz.
Gibi bazı daha modern mimariler IBM'in POWER mimarileri vermeyin rsqrt
başına se, ancak birkaç bit, örneğin bir tahmin doğru FRSQRTE . Bir kullanıcı aradığında rsqrt
, bu bir tahmin oluşturur ve daha sonra düzenli çarpma ve ilaveler kullanarak bir veya iki (gerektiği kadar) Newton veya Goldschmidt algoritmasının yinelemelerini oluşturur. Bu yaklaşımın avantajı, yineleme adımlarının FPU'yu bloke etmeden diğer talimatlarla birleştirilip serpiştirilebilmesidir (daha eski mimarilerde de olsa, Rolf Strebel'in Doktora Tezi'ne bakınız ).
Etkileşim potansiyelleri için, sqrt
potansiyel fonksiyonun polinom interpolantını kullanarak işlemden tamamen kaçınılabilir, ancak bu alandaki kendi çalışmam ( mdcore
en azından x86 tipi mimarilerde sqrt
talimatın yeterince hızlı olduğunu göstermektedir).
Güncelleştirme
Bu cevap biraz dikkat çekiyor gibi göründüğü için, sorunuzun ikinci kısmını da ele almak istiyorum; örneğin, bu gibi temel işlemleri iyileştirmek / ortadan kaldırmak için gerçekten değer sqrt
mi?
Moleküler Dinamik simülasyonları veya kesik sınırlı etkileşimleri olan herhangi bir parçacık tabanlı simülasyon bağlamında, komşu bulmak için daha iyi algoritmalardan elde edilecek çok şey vardır . Komşular bulmak veya bir Verlet listesi oluşturmak için Hücre listeleri veya benzeri bir şey kullanıyorsanız , çok sayıda sahte çift yönlü mesafeyi hesaplayacaksınız. Naif durumda, denetlenen parçacık çiftlerinin sadece% 16'sı aslında birbirlerinin kesim mesafesi içinde olacak. Her ne kadar bu çiftler için hiçbir etkileşim hesaplanmasa da, parçacık verilerine erişmek ve sahte çift yönlü mesafeyi hesaplamak büyük bir maliyet getirir.
Bu alandaki kendi çalışmalarım ( burada , burada ve burada ) ve ayrıca diğerlerinde olduğu gibi (örneğin burada ), bu sahte hesaplamaların nasıl önlenebileceğini göstermektedir. Bu komşu bulma algoritmaları, burada açıklandığı gibi Verlet listelerini bile gerçekleştirmez .
Vurgulamak istediğim nokta, altta yatan donanım mimarisini daha iyi tanımak / kullanmaktan kazanılacak bazı gelişmeler olsa da, daha yüksek seviye algoritmaları yeniden düşünmek için potansiyel olarak daha büyük kazançlar olabileceğidir.
rsqrtps
ve AVXvrsqrtps
de tahmin edilmektedir, ilk 11 ila 12 bitin doğru olduğunu doğrularlar ve daha fazla doğruluk istiyorsanız, bir Newton yinelemeyle düzeltmelisiniz. Bunlar Sandy Bridge'deki 5/1 ve 7/1 (gecikme / ters çıkış) talimatlarıdır (bkz. Intel docs veya Agner Fog'un çarpma ile karşılaştırılabilir talimat tabloları . Aksine, tam doğruluk(v)sqrtps
(veya çift hassasiyet(v)sqrtpd
) 10-43 / 10-43 (Ayrıntılar için talimat tablolarına bakınız)