Bilimsel Hesaplamada görev tabanlı paylaşılan bellek paralel kitaplıkları


10

Son yıllarda, genel amaçlı veri güdümlü paylaşılan bellek paralelliğinin bir biçimini ya da bir diğerini sunan birkaç kütüphane / yazılım projesi ortaya çıkmıştır.

Ana fikir, açık bir şekilde iş parçacıklı kod yazmak yerine, programcıların algoritmalarını, daha sonra paylaşılan bellek makinesindeki genel amaçlı bir ara katman yazılımı tarafından dinamik olarak planlanan, birbirine bağlı görevler olarak gerçekleştirmesidir.

Bu tür kitaplıklara örnekler:

  • QUARK : Başlangıçta MAGMA paralel lineer cebir kütüphanesi için tasarlanmış , paralel Fast Multipole Metodu için de kullanılmış gibi görünüyor .

  • Cilk : Başlangıçta Intel tarafından desteklenen, C'ye dil / derleyici uzantıları olarak uygulanan, Cilkchess bilgisayar satranç yazılımında ve deneysel olarak FFTW'de kullanılan MIT tabanlı bir proje .

  • SMP süperscalar : #pragmaGenişletmelere dayalı olarak birçok açıdan Cilk'e benzeyen Barselona Süper Bilişim Merkezinde geliştirildi .

  • StarPU : GPU'lar da dahil olmak üzere çeşitli farklı mimariler için derlenebilen ve programlanabilen benzer kütüphane tabanlı "codelets".

  • OpenMP görevleri: Sürüm 3.0'dan itibaren OpenMP, eşzamansız olarak programlanabilen "görevler" i tanıttı (belirtimin Bölüm 2.7'sine bakın).

  • Intel'in İş Parçası Yapı Taşları : Eşzamansız görevler oluşturmak ve başlatmak için C ++ sınıflarını kullanır, Eğiticinin 11. Bölümüne bakın.

  • OpenCL : Çoklu çekirdeklerde göreve dayalı paralellikleri destekler.

Bu kütüphanelerin / dil uzantılarının içsel çalışmasını ve bunların belirli sorunlara uygulanmasını açıklayan çok sayıda literatür olmasına rağmen, bunların bilimsel hesaplama uygulamalarında pratikte kullanıldıklarına dair çok az örnekle karşılaştım.

İşte soru şu: Paylaşılan bellek paralelliğinde bu kütüphanelerden / dil uzantılarından herhangi birini veya benzerlerini kullanan bilimsel bilgi işlem kodlarını bilen var mı?


Görev tabanlı paralellik mi arıyorsunuz? OpenCL ve Intel TBB'yi atlamanızın bir nedeni var mı? İtiraf etmeliyim ki tam olarak burada ne aradığınızı söyleyemem.
Aron Ahmadia

1
@AronAhmadia: Cehalet, esas olarak ... :) Listeye TBB ve OpenCL ekledim, ancak soru hala aynı: Bunları, yani görev tabanlı bileşenlerini, bilimsel olarak herhangi bir önemli yazılım parçasında kullan bilgi işlem?
Pedro

Bu soruyu ve cevaplarını bir topluluk-wiki'ye dönüştürmeye karşı daha fazla kapsamayı denemeye ne hissediyoruz?
Aron Ahmadia

@AronAhmadia: Soru biçiminden ayrılırsam, bunun genel olarak görev tabanlı ve / veya paylaşılan bellek programlamanın avantajları / dezavantajları hakkında uzun tartışmalara dönüşeceğinden biraz endişeliyim. Bununla birlikte, birkaç cevap daha aldıktan sonra değiştirmeyi tercih ederim.
Pedro

Başlık uygun değil. Bu soru paylaşılan bellekle değil görev paralelliğiyle ilgilidir.
Jeff

Yanıtlar:


8

Kitaplıktaki Diş Açma Yapı Taşlarını kullanır ve genel olarak ondan oldukça memnunuz. Herkes daha basit kodlar için kullanıyor gibi görünse de birkaç alternatife baktık, özellikle OpenMP'ye baktık, ancak bunların eksik olduğunu gördük. Özellikle, OpenMP, görev modelinin başlattığınız bir görev için bir tutamaç almanıza izin vermediği çok büyük bir dezavantaja sahiptir ve sonuç olarak bir görevin durumuna (örneğin, bitmesini beklemek için) erişmek veya ayrı bir görevde çalıştırdığınız işlevler. OpenMP öncelikle en içteki döngüleri paralelleştirmek için iyidir, ancak en dıştaki , karmaşık döngüleri paralelleştirerek paralel verimlilik elde edersiniz ve TBB bunun için oldukça iyi iken OpenMP bunun için bir araç değildir.


Bunu işaret ettiğiniz için teşekkürler, anlaşmaya bakmamıştım. II! TBB'nin kullanımının ayrıntılı olarak açıklandığı herhangi bir yayın veya belge var mı?
Pedro


4

Kanımca, bu sistemler öncelikle aşağıdaki nedenlerden dolayı nispeten başarısız olmuştur.

  • Paralel hesaplamanın hesaplamayı (örn. Floplar) bellek yerinin açığa çıkarılması ve senkronizasyon noktalarının kaldırılmasından daha fazla paralelleştirmeye ilişkin saf bakış açısı. Yoğun matris algoritmaları gibi bazı sorunlar hala FP sınırlıdır, ancak bu sadece bellek alt sisteminin dikkatli bir şekilde dikkate alınmasından sonra ortaya çıkar ve çoğu hesaplama çekirdeği (özellikle PDE dünyasında) daha fazla belleğe duyarlıdır. Çalışma kuyrukları, daha iyi naif flop dengesi ve daha fazla atomik bellek işlemi (kuyruk boyunca senkronizasyon nedeniyle) için bellek konumuyla ticaret yapma eğilimindedir.
  • Güçlü ölçeklenebilirlik pahasına dinamik yük dengesi için aşırı ayrışmaya güvenme. Görevler genellikle çakışan veri bağımlılıklarına (hayalet değerler) sahiptir. İç mekanın boyutu küçüldükçe, hayalet / iç mekan oranı artar. Bu gereksiz çalışma anlamına gelmediğinde bile, artan bellek hareketi anlamına gelir. Bellek bant genişliği gereksinimlerindeki önemli azalmalar, birden çok iş parçacığının komşuları için yazılım önceden getirme yoluyla L1 veya L2 önbelleğini paylaştığı (önceden iş parçacığı grubunu yaklaşık olarak tutarlı tutan) işbirlikli ön getirme gibi yaklaşımlarla gerçekleştirilebilir. Bu, aşırı ayrışmanın tam tersidir.
  • Yukarıdaki bellekle ilgili sorunlardan dolayı öngörülemeyen performans.
  • Kütüphane dostu bileşenlerin eksikliği. Bu neredeyse MPI_Comm, farklı kütüphanelerin çarpışmadan zengin işlemleri gerçekleştirmesine izin veren ve bağlamı kütüphaneler arasında geçirip gerekli öznitelikleri geri kazanmasına izin veren bir analoga sahip olmadığı şeklinde özetlenebilir . "Communicator" tarafından sağlanan soyutlama, paylaşılan veya dağıtılmış belleğin kullanılmasına bakılmaksızın kütüphane kompozisyonu için önemlidir.

Cevabınızı yanlış anlıyor olabilirim, ancak ilk nokta, yoğun lineer cebir için görev tabanlı bir paylaşılan hafıza kütüphanesi olan MAGMA ile Buttari, Kurzak, Dongarra ve diğerlerinin gösterdiklerinin tam tersidir ... Ayrıca, ikinci noktanızda üst üste binen verilere, yani hayalet değerlere ve yüzey / hacim oranına atıfta bulunuyorsunuz, ancak bunlar dağıtılmış bellek alan ayrıştırma şemalarından yapılan bir bekletmedir. Kendim parçacık tabanlı kodlar için bu yöntemlerle çalışıyorum ve MPI tabanlı paralel uygulamalardan çok daha iyi performans elde ediyorum.
Pedro

Her durumda soru farklıydı ... Bu yaklaşımları kullanan herhangi bir bilimsel bilgi işlem yazılımı projesi biliyor musunuz?
Pedro

1. Bu sistemleri kullanan birkaç proje var, ancak yaklaşımın "başarılı" olarak değerlendirilebileceğini düşünmüyorum. 2. Bağımlılıklar hala paylaşılan hafızada çakışıyor. Atomik senkronizasyon gibi darboğazları önlemek için tcmalloc veya Linux çekirdeğinin iş parçacıklarını daha bağımsız hale getirme şekline bakın. Paylaşılan adres alanı, tekdüze bir belleğiniz varmış gibi çalışmanız veya atomiklerin ucuz olduğunu düşünmeniz gerektiği anlamına gelmez.
Jed Brown

3. Hangi "adil karşılaştırmayı" belirtmek istediğinizi bilmiyorum, ancak PLASMA en yüksek FPU'nun yaklaşık% 25'ini alır (örneğin hpcgarage.org/cscads2012/Luszczek-UTK-PowerTools.pdf 5 numaralı slayt ). zirvenin en az% 70'inin beklendiği dağıtılmış bellekte aynı işlem için şüphesiz kötü. Yoğun doğrusal cebir, özellikle olası bir istisna olarak belirttiğim FPU'ya bağlı bir durumdur, ancak muazzam matris boyutlarına rağmen PLASMA, FPU'ya bağlı olmaktan çok uzaktır.
Jed Brown

Pedro, çoğu fiziğin uzun menzilli bir bileşeni vardır, bu nedenle parçacıklar yukarıdaki yüzeyden-soluma etkisine maruz kalan bir güncelleme ile birleştirilir (PPPM, girdap parçacığı, vb.)
Matt Knepley
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.