Tarihi bakış açısı
Gelecekte yeni paradigmaların nasıl olacağını söylemek gerçekten imkansız, örneğin Ken Kennedy'nin HPF'in Yükselişini ve Düşüşünü okumayı önerdiğim iyi bir tarihsel bakış açısı . Kennedy, ortaya çıkan iki örüntüyü (MPI ile akıllı bir derleyiciye karşı) hesaplar ve MPI'nin ilk dönemdeki benimseyenlere nasıl doğru miktarda sahip olduğunu ve hakim olma esnekliğini gösterir. HPF sonunda sorunlarını çözdü, ancak çok geçti.
Birçok yönden, PGAS ve OpenMP gibi bazı paradigmalar aynı HPF eğilimini izliyor. İlk kodlar iyi kullanacak kadar esnek değildi ve masaya çok fazla performans bıraktılar. Ancak, paralel algoritmanın her iotasını yazmak zorunda kalmama sözü cazip bir amaçtır. Böylece yeni modellerin arayışı her zaman takip ediliyor.
Donanımdaki Eğilimleri Temizle
Şimdi, MPI’nın başarısı, sıklıkla, üzerinde çalıştığı donanımı nasıl modellediğiyle yakından ilişkili olarak gösterildi. Kabaca her düğüm birkaç işleme sahiptir ve mesajları yerel noktadan noktaya veya koordineli toplu işlemler yoluyla geçirmek küme alanında kolayca yapılır. Bu nedenle, yeni donanım trendlerini yakından takip etmeyen bir paradigma veren kimseye güvenmiyorum, aslında Vivak Sarakar'ın çalışmasıyla bu fikre ikna oldum .
Bu doğrultuda, yeni mimarilerde açıkça öne çıkan üç eğilim var. Ve açık olalım , HPC'de pazarlanan on iki farklı mimarlık var. Bu, 5 yıldan daha kısa bir süre önce yalnızca x86 özelliğine sahip olduğundan, önümüzdeki günlerde donanımı farklı ve ilginç şekillerde kullanmak için birçok fırsat göreceksiniz.
- Özel Amaçlı Çipler: Hızlandırıcılar gibi büyük vektör birimlerini düşünün (görünüm, Bill Dally of Nvidia tarafından desteklendi)
- Düşük Güç Chips: ARM tabanlı kümeler (güç bütçelerini karşılamak için)
- Cips Döşeme: farklı özelliklere sahip cips döşemeyi düşünün ( Avant Argwal çalışması )
Mevcut Modeller
Mevcut model aslında 3 seviye derinliğinde. Bu seviyelerden ikisini iyi kullanan pek çok kod varken, her üçünü de kullanan pek bir şey yok. Öncelikle exascale almak için kodun her üç seviyede de çalışıp çalışamayacağına karar vermek için yatırım yapması gerektiğine inanıyorum. Bu muhtemelen şu anki trendlerle iyi bir şekilde yinelemenin en güvenli yoludur.
Tahmin edilen yeni donanım görüşlerine dayanarak modelleri ve bunların nasıl değişmesi gerektiğini yineleyeyim.
Dağıtılmış
Dağıtılmış seviyedeki oyuncular büyük ölçüde MPI ve PGAS dillerine ayrılır. MPI şu anda açık bir kazanan, ancak UPC ve Chapel gibi PGAS dilleri uzaya doğru ilerliyor. İyi bir gösterge HPC Benchmark Challenge'dır. PGAS dilleri kıyaslamaların çok şık uygulamalarını veriyor.
Buradaki en ilginç nokta, bu modelin şu anda yalnızca düğüm düzeyinde çalışmasına karşın, Döşeme mimarileri için bir düğüm içinde önemli bir model olacağıdır. Bunun bir göstergesi, temelde dağıtılmış bir sistem gibi davranan Intel SCC yongasıdır. SCC ekibi kendi MPI uygulamasını oluşturdu ve birçok takım topluluk kütüphanelerini bu mimariye aktarmada başarılı oldu.
Ancak dürüst olmak gerekirse, PGAS'ın gerçekten bu alana adım atmak için iyi bir hikayesi var. Gerçekten MPI internode programlamak ve aynı hile intranode yapmak zorunda mısın? Bu çinili mimarilerle ilgili büyük bir sorun, çiplerde farklı saat hızlarına sahip olacakları ve hafızadaki bant genişliğindeki önemli farklılıklar olacağıdır; bu nedenle performans kodları bunu göz önünde bulundurmalıdır.
Düğümde paylaşılan hafıza
Burada MPI'nın genellikle "yeterince iyi" olduğunu görüyoruz, ancak PThreads (ve Intel Parallel Building Blocks gibi PThreads'ten türetilen kütüphaneler) ve OpenMP hala sıkça kullanılıyor. Yaygın görüş, MPI'nin soket modelinin RPC için parçalanacağı ya da çekirdekte çalışan daha hafif bir ağırlık işlemine ihtiyaç duyacağınız yeterli paylaşılan bellek parçasının olduğu bir zaman olacağı yönündedir. Zaten paylaşılan bellek MPI'si ile ilgili problemleri olan IBM Bluegene sistemlerinin göstergelerini görebilirsiniz.
Matt'in belirttiği gibi, hesaplama yoğun kodları için en büyük performans artışı, seri kodun vektörleştirilmesidir. Birçok kişi bunun hızlandırıcılarda doğru olduğunu varsaysa da, düğüm makineleri için de çok önemlidir. Westmere’in 4 geniş bir FPU’ya sahip olduğuna inanıyorum, böylece bir tanesi vektörleşmeden sadece dörtte birini alabiliyor.
Mevcut OpenMP'nin bu alana iyi adım attığını görmeme rağmen, düşük güçlü veya fayans çiplerinin daha fazla hafif iplik kullanabileceği bir yer var. OpenMP, veri akışının nasıl çalıştığını tarif etmekte zorlanıyor ve daha fazla iş parçacığı kullanıldığında, sadece bu eğilimin daha abartılı olduğunu görüyorum, sadece OpenMP ile uygun ön hazırlık yapmak için ne yapılması gerektiğinin örneklerine bakıyorum.
Hem OpenMP hem de PThreads yeterli seviyede, iyi bir zirve yüzdesi elde etmek için gerekli olan vektörleştirmeden faydalanabilir, ancak bunu yapmak için algoritmalarınızı vektörelleşmenin doğal olduğu bir şekilde yıkmak gerekir.
Co-processor
Sonunda ortak işlemcinin (GPU, MIC, Cell acclerators) ortaya çıkması bekledi. Exascale'e giden hiçbir yolun onlarsız tamamlanamayacağı açıkça ortaya çıkıyor. SC11'de, her Bell ödül yarışması, düşük petaflops'a ulaşmak için onları etkin bir şekilde kullandı. CUDA ve OpenCL mevcut pazara hükmediyor olsa da, OpenACC ve PGAS derleyicilerinin bu alana girmesini umuyorum.
Şimdi exascale'e ulaşmak için, bir öneri, düşük güçte çalışan çipleri birçok ortak işlemciye bağlamaktır. Bu, mevcut yığının orta katmanını ortadan kaldıracak ve ana çip üzerindeki karar sorunlarını yöneten kodları kullanacak ve ortak işlemcilere işten ayrılacak. Bu, kodun oldukça etkili bir şekilde çalışması için kişinin algoritmaları, dalsız komut düzeyinde paralel snippet olan çekirdekler (veya codelets) açısından yeniden düşünmesi gerektiği anlamına gelir. Bildiğim kadarıyla, bu evrim için bir çözüm oldukça açık.
Bu uygulama geliştiricisini nasıl etkiler?
Şimdi soruna ulaşmak için. Kendinizi exascale makinelerinin gelecekteki karmaşıklıklarından korumak istiyorsanız, birkaç şey yapmalısınız:
- Algoritmalarınızı en az üç paralel hiyerarşi seviyesine uyacak şekilde geliştirin.
- Algoritmalarınızı heirarşi arasında hareket ettirilebilecek çekirdekler cinsinden tasarlayın.
- Sıralı işlemlere olan ihtiyacınızı gevşetin, tüm bu efektler eşzamansız olarak gerçekleşir, çünkü eşzamanlı yürütme mümkün değildir.
Bugün performans göstermek istiyorsanız, MPI + CUDA / OpenCL yeterince iyi ancak UPC oraya gidiyor, bu yüzden birkaç gün alıp öğrenmek kötü bir fikir değil. OpenMP sizi başlatır ancak kodun yeniden yapılandırılması gerektiğinde sorunlara yol açar. PThreads kodunuzu tamamen kendi stilinize göre yeniden yazmanızı gerektirir. Bu da MPI + CUDA / OpenCL'i mevcut en iyi model yapıyor.
Burada tartışılmaz ne
Tüm bu exascale konuşması güzel olsa da, burada gerçekten tartışılmayan bir şey, makinelere veri girip çıkarıyor. Bellek sistemlerinde pek çok gelişme olmasına rağmen, onları meta kümesinde görmüyoruz (sadece çok pahalı). Artık veri yoğun hesaplama, tüm süper hesaplama konferanslarının büyük bir odağı haline geliyor, yüksek bellek bant genişliği alanına daha büyük bir hareket olması gerekiyor.
Bu da gerçekleşebilecek olan diğer eğilimi de beraberinde getirmektedir (eğer doğru finansman kuruluşları devreye girerse). Makineler, gerekli bilgi işlem türü için daha da uzmanlaşacaktır. NSF tarafından finanse edilen "veri yoğun" makinelerin zaten görüyoruz, ancak bu makineler 2019 Exascale Grand Challenge'dan farklı bir yolda.
Bu beklenenden uzun oldu, yorumlarda onlara ihtiyaç duyduğunuz referansları isteyin