Standart kütüphanelerde nin hesaplamalı maliyeti nedir ?


26

Moleküler simülasyonlarda ele almamız gereken en önemli konulardan biri mesafeye bağlı kuvvetlerin hesaplanmasıdır. Biz ayırma mesafesi bile güçlere sahip kuvvet ve mesafe fonksiyonlarını kısıtlamak Eğer , o zaman biz sadece uzaktan karesini hesaplayabilir ve yaklaşık endişe gerekmez . Ancak tek güçler varsa, o zaman ile başa çıkmamız gerekir .rr2=rrrr=r2

Sorum şu: ne kadar pahalı bilgisayar olan vb yaygın diller (C / C ++, Fortran, Python), kütüphanelerine uygulandığı şekliyle? Belirli mimariler için kodu elle ayarlayarak yapılması gereken çok sayıda performans iyileştirmesi var mı?x

Yanıtlar:


39

Moyner'in cevabının bir uzantısı olarak , yonga sqrtgenellikle 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.a1/a1/rr = rsqrt(r2)rsqrtsqrt

Not olarak, bölümler yinelemeli olarak hesaplanır ve neredeyse rsqrtdonanı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 rsqrtbaşı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, sqrtpotansiyel fonksiyonun polinom interpolantını kullanarak işlemden tamamen kaçınılabilir, ancak bu alandaki kendi çalışmam ( mdcoreen azından x86 tipi mimarilerde sqrttalimatı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 sqrtmi?

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.


6
SSE rsqrtpsve AVX vrsqrtpsde 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)
Jed Brown

@JedBrown: Bunu işaret ettiğiniz için teşekkür ederiz! SSE ve uzantılarının da bunu sağladığını unutmuştum.
Pedro,

16

Karekök donanımda çoğu işlemcide uygulanır, yani, belirli montaj yönergeleri vardır ve uygulamanın zorlaştırılması çok zor olduğundan performansın çoğu dilde karşılaştırılabilir olması gerekir. Bazı akıllı donanım tasarımcısı tarafından tasarlandığından, muhtemelen FSQRT komutunu yenemeyeceksiniz.

Donanımda nasıl uygulanabileceği değişebilir, ancak muhtemelen bir tür sabit nokta yinelemedir, örneğin, gerekli basamak sayısı hesaplanana kadar belirli sayıda yineleme yapan Newton-Raphson yöntemi. Donanımdaki yinelemeli yöntemler genel olarak diğer işlemlerden çok daha yavaştır çünkü sonuç hazır olmadan önce birkaç döngü tamamlanmalıdır.

Bazıları da vardır SIMD Talimatları hızlı vektör hesaplamaları için XMM kayıtları üzerinde kullanılabilir burada bulunan . Bu kayıtlar oldukça küçüktür, ancak bilinen sayıda koordinatınız varsa (örneğin, üç boyutlu bir Kartezyen koordinat sistemi), biraz daha hızlı olabilir.

Diliniz yeterince düşükse, her zaman daha düşük bir hassasiyete yazabilir veya koordinatlarınız için daha düşük bir hassasiyet numarası kullanabilirsiniz. Tek duyarlık genellikle yeterince iyidir ve yinelemeler daha erken sonlandırılabildiğinden, kare kökleri hesaplarken hatırladığımdan daha hızlı olacaktır.

Farklı dilleri karşılaştırmak yeterince kolay olmalı: Sadece bir dosyaya uzun bir rasgele sayı dizisi yazın, farklı dilleri kullanarak yükleyin ve sonra karekökleri zamanlayın.


0

Performans geliştirmeleri olabilir, ancak ilk önce sqrt'nin karşılıklı hesabının hesaplanmasının şişe boynu olduğunu bilmeli (yani, pozisyonları yüklemek ve kuvvetleri korumak değil).

GROMACS MD projesi, IEEE kayan nokta formatının detaylarından yararlanarak karekökünün karşılığına kabul edilebilir bir yaklaşımı hesaplamak için bir Newton-Raphson yineleme şeması oluşturmak için bir fikir üretti (bkz. Http: / Ek B.3). /www.gromacs.org/Documentation/Manual ), ancak GROMACS'ın hala bu fikri kullandığı kullanımda herhangi bir HPC CPU yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.