Parallel and High Performance Computing İnceleme

Özet

Günümüzde artık paralel uygulamalar yazmak veya seri kodları paralel kodlara dönüştürmek vazgeçilmez hale gelmiştir. CPU ve GPU teknolojilerinde yaşanan gelişmeler buna ön ayak olmuştur. Ayrıca Moore Yasası’ndan kaynaklı yaşanacak kısıtlamalar algoritmik anlamda paralel hesaplamayı çok daha cazip hale getirmiştir. Bu kitap aslında Yüksek Performanslı Hesaplama (High Performans Computing, HPC) alanındaki temel bilgilere odaklanmaktadır. Örnekler öncelikli olarak C ve C++ dillerinde verilmekte, bazı yerlerde ise Fortran kullanılmaktadır. Bu kitap özellikle paralel hesaplama ile ilgili ders alan üniversite öğrencilerine kaynak kitap olmayı amaçlamaktadır. Ancak paralel hesaplamaya ilgi duyan kişiler için de okunması uygundur. Bu kitabı okumadan önce en azından C dilinde belli bir seviyede olmanız gerektiğini düşünüyorum.

İnceleme

Parça 1: Paralel Hesaplamaya Giriş (Introduction to Parallel Computing)

Bu parça, paralel hesaplama için genel öneme sahip şu konuları ele almaktadır:

  • Paralel bir bilgisayardaki kaynakları anlamak
  • Uygulamaların performansını ve hızlanmasını tahmin etmek
  • Paralel hesaplamaya özel yazılım mühendisliği gereksinimlerini incelemek
  • Veri yapıları için seçenekleri göz önüne almak
  • İyi performans gösteren ve paralellik sağlayan algoritmaları seçmek

Bölüm 1: Neden Paralel Hesaplama? (Why Parallel Computing?)

Bu bölümde öncelikle neden paralel hesaplamayı öğrenmeniz gerektiğinden bahsedilmektedir. CPU saat frekanslarının tarihsel gelişimi hakkında bilgiler verilmekte ve teorik olarak seri ve paralel uygulama arasındaki hız farkları gösterilmektedir. Daha sonra paralel hesaplamanın potansiyel faydaları (çalışma zamanı, problem boyutu, enerji verimliliği, maliyet vb. açısından) sıralanmaktadır. Bir sonraki kısımda ise paralel hesaplama ile ilgili temel kanunlardan (Amdahl’s Law, Gustafson-Barsis’s Law) bahsedilmektedir.

Paralel bir bilgisayarın nasıl çalıştığı ve bu tip bir bilgisayarın donanım ve yazılım bileşenlerinin ne olması gerektiği açıklanmaktadır. Daha sonra bir geliştirici gözünden paralel yaklaşımların şu şekilde kategorilendirilmesi gerektiği söylenmektedir:

  • Process bazlı paralelleştirme
  • Thread bazlı paralelleştirme
  • Vektörleştirme
  • Stream işleme

İlerleyen kısımlarda bu paralelleştirme kategorileri Krakatau Volkanı örneği üzerinden anlatılmaktadır. Sonrasında ise Flynn Taksonomisi adı verilen SISD, MISD, SIMD, MIMD gibi paralelleştirme yaklaşımlarının açıklamaları yapılmaktadır. Çeşitli paralel stratejiler ile ilgili örnekler verilmekte ve son olarak ise paralelleştirme sonucu elde edilen hızlanmanın nasıl ölçüleceği belirtilmektedir.

Bölüm 2: Paralelleştirme için Planlama (Planning for Parallelization)

Bu bölümde temel paralel uygulama geliştirme iş akışı (workflow) üzerinde durulmaktadır. Projenin hazırlık aşamasında ihtiyaç duyacağınız verisiyon kontrol sistemleri açıklanmakta, düzgün Commit mesajı ve test durumları yazmak ile ilgili çeşitli bilgiler verilmektedir. Sonraki kısımlarda ise kitabın sonraki bölümlerinde ayrıntılı bir biçimde anlatılacak olan profilleme, planlama ve implementasyon aşamaları kısaca anlatılmaktadır.

Bölüm 3: Performans Limitleri ve Profilleme (Performance Limits and Profiling)

Bu bölümde öncelikle uygulamanızın potansiyel limitlerini belirleyebileceğiniz bazı metrikler (Flops, Ops, bellek bant genişliği, bellek gecikmesi, ağlar, diskler vb.) üzerinde durulmaktadır. Benchmarking tekniği ile donanım yeteneklerinize karar verme ve bu iş için kullanabileceğiniz araçlar gösterilmektedir. Elbette bununla ilgili teorik ölçümlerde sık kullanılan formüllere de yer verilmektedir. Valgrind, KcacheGrind, QCacheGrind gibi araçların profilleme aşamasında kullanımları anlatılmaktadır. İşlemcinin saat frekansı ve enerji tüketimi ile ilgili deneysel ölçümlerin nasıl yapılacağından ve çalışma zamanında belleğin nasıl izlenebileceğinden bahsedilmektedir.

Bölüm 4: Veri Tasarımları ve Performans Modelleri (Data Design and Performance Models)

Bu bölümde paralel hesaplamada kullanılacak veri yapılarının tasarımları üzerinde durulmaktadır. Veri yönelimli tasarım (data-oriented design) kavramına değinilmekte, bu konuyla ilgili şu veri yapıları ele alınmaktadır:

  • Çok boyutlu diziler (multidimensional arrays)
  • Yapıları içeren diziler (array of structures, AoS)
  • Dizileri içeren yapılar (structure of arrays, SoA)
  • Dizileri içeren yapıları içeren diziler (array of structure of arrays, AoSoA)

Daha sonra Cache ile alakalı bazı konulardan bahsedilmektedir. Compulsory, Capacity ve Confilct gibi kavramlara değinilmektedir. Sonrasında ise bir fizik uygulamasında çoklu materyaller üzerinde hesaplama yapma örneği üzerinden performans modellerinin kullanımı gösterilmektedir. Bir sonraki kısımda ise daha ileri düzey performans modelleri üzerinde durulmaktadır. Son olarak ise ağ üzerinden gönderilen mesaj trafiğinin ölçümü ile ilgili genel hesaplamalar anlatılmaktadır.

Bölüm 5: Paralel Algoritmalar ve Kalıplar (Parallel Algorithms and Patterns)

Bu bölümde genel olarak algoritmaların paralel hesaplamadaki yeri ve önemi anlatılmaya çalışılmaktadır. Algoritmik karmaşıklık (algorithmic complexity) kavramı açıklanmakta, performans modellerinin algoritmik karmaşıklıkları üzerinde durulmaktadır. Paralel algoritmaların ne olduğundan ve neden önemli olduğundan bahsedilmektedir. Hash fonksiyonları üzerinde durulmakta, Spatial Hashing algoritması üzerinden örnek anlatım yapılmaktadır. İlerleyen bölümlerde ise daha farklı algoritmalar üzerinde teorik ve uygulamalı örnekler gösterilip bölüm sonlandırılmaktadır.

Parça 2: CPU: Paralel Yük Beygiri (CPU: The Parallel Workhorse)

Bu parçada CPU paralelleştirmesi ile ilgili şu konular ele alınmaktadır:

  • Vektör donanımını kullanmak
  • Çok çekirdekli işlemcilerde paralel iş dağıtımı için Thread’leri kullanmak
  • Mesaj geçme (message passing) tekniği ile çok çekirdekli ve çoklu CPU’lara sahip sistemlerde işi koordine etmek

Bölüm 6: Vektörleştirme: Bedava FLOP’lar (Vectorization: FLOPs for Free)

Bu bölümde öncelikle SIMD (Single Instruction Multiple Data) kavramının ne olduğu çeşitli diyagram ve örneklerle açıklanmaktadır. Daha sonra MMX, SSE, SSE2, AVX, AVX2 ve AVX512 gibi vektörleştirme ile ilgili komut seti eklentilerinden bahsedilmektedir. Daha sonra çok çeşitli vektörleştirme metotlarından bahsedilmekte ve programcının verdiği efor artacak şekilde şu metotlar tek tek açıklanmaktadır:

  • Vektörleştirme için optimize edilmiş kütüphaneler
  • Otomatik vektörleştirme
  • Derleyiciye verilen ipuçları (hints) ile vektörleştirme
  • Vektörleştirme ile ilgili derlyiciye özel fonksiyonların (intrinsics) kullanımı
  • Assembler komutları kullanarak vektörleştirme

Daha sonraki kısımda ise daha iyi bir vektörleştirme için programlama stilleri üzerinde durulmaktadır. Burada ayrıca C’de "restrict" anahtar kelimesi ve onun faydaları anlatılmaktadır. Sonrasında ise GCC, Clang, Intel ICC ve MSVC gibi derleyicilerde vektörleştirme ile ilgili kullanılan derleyici bayrakları gösterilmektedir. Son olarak ise OpenMP’nin SIMD ile ilgili direktifleri anlatılmaktadır.

Bölüm 7: Performans Gösteren OpenMP (OpenMP that Performs)

Bu bölümde pek çok katmanda paralelleştirme yeteneği sağlayan bir programlama standardı olan OpenMP üzerinde durulmaktadır. OpenMP ile ilgili temel kavramlar anlatılmakta, OpenMP’nin sağladığı kolaylıklar ele alınmaktadır. Daha sonraki bölümlerde ise OpenMP’nin şu seviyelerde yaptığı paralelleştirmeler anlatılmaktadır:

  • Döngü seviyesinde (loop-level) OpenMP
  • Değişken faaliyet alanında (variable scope) OpenMP
  • Fonksiyon seviyesinde (function-level) OpenMP
  • Üst seviye (high-level) OpenMP

Bu konu başlıklarını anlattıktan ve örnekler verdikten sonra, OpenMP’nin vektörleştirme ile beraber nasıl kullanılabileceği açıklanmaktadır. Daha sonra ileri düzey OpenMP kullanımı ile ilgili çeşitli örnekler verilmektedir. Valgrind, Call Graph, Allinea/ARM Map ve Intel® Inspector gibi araçlarla OpenMP uygulamalarının incelenmesi anlatılmaktadır. En son ise görev bazlı (task-based) uygulamalarda OpenMP’nin kullanımı ile ilgili örnekler verilmektedir.

Bölüm 8: MPI: Paralel Omurga (MPI: The Parallel Backbone)

Bu bölümde Message Passing Interface (MPI) standardından ve Process seviyesinde paralelleştirmeden bahsedilmektedir. İki MPI implementasyonu olan MPICH ve OpenMPI açıklanmaktadır. Basit bir MPI programının nasıl yazılacağı gösterilmekte, MPI ile Process’ler arası veri iletme ve veri alma işlemlerinin nasıl yapılacağı anlatılmaktadır. MPI ile kurulan farklı iletişim mekanizmaları (Broadcast, Reduce, Scatter/Gather vb.) üzerinde durulmaktadır. MPI ile ilgili çeşitli örnek uygulamalar yapıldıktan sonra, MPI ile özelleştirilmiş veri yapılarını oluşturma ve topoloji gibi ileri düzey konular anlatılmaktadır. Son olarak ise MPI teknolojisi ile OpenMP’yi hibrit olarak birlikte kullanma ile ilgili örnekler verilmektedir.

Parça 3: GPU: Hızlandırmak için Üretildi (GPUs: Built to Accelerate)

Bu parçada GPU’lar ve onların bilimsel hesaplamalarda kullanılması ile ilgili teknolojiler ve kavramlar açıklanmaktadır. Genel olarak şu konular üzerinde durulmaktadır:

  • GPU mimarisi ve onun genel amaçlı hesaplamalara katkısı
  • GPU’lar için programlama modelinin mental gösterimi
  • OpenACC ve OpenMP ile yönerge bazlı (directive-based) GPU erişimli uygulamaların yazımı
  • CUDA, OpenCL, HIP ve daha üst deviye olan SYCL, Kokkos ve Raja gibi GPU dillerinin kullanımı
  • Programcının üretkenliğini arttırmak için iş akışı modeli geliştirme ve GPU profilleme araçları

Bölüm 9: GPU Mimarileri ve Kavramları (GPU Architectures and Concepts)

Bu bölümde öncelikle entegre GPU ve ayrık GPU kavramları arasındaki fark incelenmektedir. Daha sonra GPU mimarisi ile özellikle AMD, Nvidia ve Intel GPU’larında kullanılan terminolojilere yer verilmektedir. Aynı terimin farklı GPU markalarında ve OpenCL programlama dilinde kullanımları gösterilmektedir. GPU mikromimarisi ile ilgili temel bilgiler ve kavramları aktardıktan sonra, GPU belleği ile ilgili terimler, teknoljiler ve performans ölçüm araçları anlatılmaktadır. CPU’dan GPU’ya veri aktarımı ile ilgili kısıtlamalar ve teorik hesaplamalar ile ilgili bilgiler verilmektedir. Çoklu GPU platformları ve bu platformlar ile MPI kullanımı hakkında konuşulmaktadır. Son olarak ise GPU kullanımının potansiyel faydalarından ve ne zaman GPU kullanmamız gerektiğinden bahsedilmektedir.

Bölüm 10: GPU Programlama Modeli (GPU Programming Model)

Bu bölümde GPU paralelleştirmesi ile ilgili bazı programlama modelleri anlatılmaktadır. GPU paralelleştirmesi ile alakalı bazı kavramlardan bahsedilmekte ve işlerin bölünmesi ile ilgili şu bilgilere yer verilmektedir:

  • Verinin sıkıştırılması
  • Bölünmüş verinin paylaşılan (shared) veya yerel (local) bellek ortamına alınması
  • Tek bir komut ile birden fazla veri elemanı üzerinde işlem yapmak
  • Vektörleştirme (bazı GPU’lar için)

CUDA dilini örnek vererek GPU’da çalışacak olan kod parçalarının genel olarak nasıl yazılması gerektiği gösterilmektedir. Bunun yanında GPU kaynak kullanımını optimize etme ile ilgili bazı teknikler anlatılmakta ve örnekler verilmektedir. Kuyruk yapılarını kullanarak, GPU üzerinde asenkron hesaplama yapma ile ilgili örnek diyagram gösterilmektedir. Son olarak ise bir uygulamayı GPU için paralelleştirme yapmanın planını nasıl oluşturacağınız ile ilgili bilgiler verilmektedir.

Bölüm 11: Yönerge Tabanlı GPU Programlama (Directive-based GPU Programming)

Bu bölümde genel olarak OpenACC ve OpenMP kullanarak yönerge bazlı GPU programlama anlatılmaktadır. İlk olarak OpenACC ile ilgili şu bilgiler aktarılmaktadır:

  • OpenACC kodunun derlenmesi
  • Hesaplamayı hızlandırmak için OpenACC üzerinde paralel hesaplama bölgelerinin oluşturulması
  • CPU ve GPU arasındaki veri hareketini azaltma ile ilgili yönergelerin kullanılması
  • GPU kernel kodlarının optimize edilmesi
  • İleri OpenACC tekniklerinin uygulanması

Bir sonraki kısımda ise OpenMP’nin GPU paralelleştirmesinde kullanımı ile ilgili şu bilgiler verilmektedir:

  • OpenMP kodunun derlenmesi
  • OpenMP ile GPU üzerinde çalışacak olan paralel işin oluşturulması
  • CPU ve GPU arasındaki veri hareketininin OpenMP ile azaltılması
  • OpenMP kodlarının GPU’lar için optimize edilmesi
  • GPU’lar için ileri düzey OpenMP kullanımı

Bölüm 12: GPU Dilleri: Temellere İnme (GPU Languages: Getting Down to Basics)

Bu bölümde GPU’lar için geliştirilen alt seviye diller üzerinde durulmaktadır. Bölümün büyük bir çoğunluğunda CUDA ve OpenCL dilleri üzerinde durulmakta, bir kısmında ise AMD GPU’lar için geliştirilen yeni bir varyant olan HIP üzerinde durulmaktadır. Bu dillerin yönerge bazlı dillere olan avantajları ve dezavantajları ele alınmaktadır. Daha sonra ise daha yüksek seviyeli diller olan SYCL, Kokkos ve Raja dilleri ele alınmaktadır. Bu diller ile ilgili çeştili örnekler verildikten sonra bölüm sonlandırılmaktadır.

Bölüm 13: GPU Profilleme Araçları (GPU Profiling Tools)

Bu bölümde GPU profillemede kullanılan çeşitli profilleme araçları üzerinde durulmakta ve bir GPU’da profilleme yapmak için kullanılan çeşitli metotlardan (doğrudan çalıştırma, uzak sunucu kullanımı, profili indirme, yerel olarak geliştirme) bahsedilmektedir. Yine bu konuyu daha iyi anlatmak için su simülasyonu örneği kullanılmaktadır. Yine bu örnek üzerinden ve daha farklı küçük örnekler üzerinden metotlar ayrıntılı bir şekilde anlatılmakta ve bölüm sonlandırılmaktadır.

Parça 4: Yüksek Performanslı Hesaplama Ekosistemi (High Performance Computing Ecosystem)

Bu parçada yüksek performanslı hesaplama ekosistemlerinde kullanılan diğer teknikler ve araçlar anlatılmaktadır. Bu parçada işlenen konular şunlardır:

  • Daha iyi bir performans için Process’leri zamanlama ve yerleştirme
  • HPC Batch sistemini kullanarak kaynakları istemek ve zamanlamak
  • Paralel dosya sistemleri üzerindeki verileri paralel bir şekilde okumak ve yazmak
  • Performansı daha iyi anlamaya yardımcı olacak araçları kullanmak

Bölüm 14: Yakınlık: Çekirdekle Ateşkes İmzalamak (Affinity: Truce with The Kernel)

Bu bölümde genel olarak bir Process’in bir kaynak (CPU vb.) üzerine bağlanması ile ilgili stratejiler ele alınmaktadır. İlk olarak Affinity (Yakınlık) ve Placement (Yerleştirme) kavramları üzerinde durulmakta, Affinity kavramının neden önemli olduğu açıklanmaktadır. Daha sonra kullandığınız donanımı bu konu ile ilgili nasıl keşfedebileceğiniz gösterilmektedir. Bir sonraki kısımda ise OpenMP ile Thread’lere Affinity uygulamak gösterilmektedir. Sonrasında ise MPI kütüphaneleri ile Process’lere Affinity uygulamak gösterilmektedir. Yine bu konular birleştirilerek OpenMP ve MPI ile hem Thread hem de Process’lere Affinity uygulama işlemi anlatılmaktadır. Daha sonra komut satırından Affinity kontrolünü nasıl yapabileceğiniz ve bununla ilgili araçları nasıl kullanabileceğiniz gösterilmektedir. Affinity konusunun geleceği tartışılmakta ve bölüm sonlandırılmaktadır.

Bölüm 15: Batch Zamanlayıcıları: Kaosa Düzen Getirmek (Batch schedulers: Bringing Order to Chaos)

Bu bölümde genel olarak paralel hesaplama yaptığımız işleri farklı parçalara (Batch) bölüp farklı sistemlere dağıtma ile ilgili konular işlenmektedir. Batch sistemlerinin neden önemli olduğu ve düzensiz sistemlerde yaşanan sorıunlar ele alınmaktadır. Slurm ve PBS isimli Batch Script’lerini kullanarak çeşitli Batch planlarının nasıl yapılacağı örneklerle gösterilmektedir. Uzun süreli çalışan işler için otomatik yeniden başlatmanın bu Script’ler ile nasıl yapılabileceği anlatılmaktadır. Batch’ler arası bağımlılık ilişkilerinin nasıl belirtilebileceği gösterilmektedir.

Bölüm 16: Paralel Bir Dünya için Dosya İşlemleri (File Operations for a Parallel World)

Bu bölümde paralel dosya sistemleri ve paralel dosya işlemleri konularına genel bir bakış atılmaktadır. Öncelikle yüksek performanslı bir sistemin bileşenleri incelenmektedir. Daha sonra standart dosya işlemleri için paralel işlemlerin nasıl seri hale getirildiği gösterilmektedir. MPI kullanılarak (MPI-IO) bu paralel dosya işlemlerini nasıl sağlayabileceğimiz anlatılmakta ve bununla ilgili örnek bir kod yazılmaktadır. Sonrasında ise HDF5 dosya formatı üzerinde durulmakta ve bu formatın avantajları anlatılmaktadır. Son olarak ise paralel bir dosya sisteminde yer alan donanım arayüzü incelenmektedir.

Bölüm 17: Daha İyi Kod için Araçlar ve Kaynaklar (Tools and Resources for Better Code)

Bu bölümde genel olarak paralel hesaplamaya yardımcı olan çeşitli kategorilerdeki araçların kullanımı gösterilmketedir. Bu kategoriler şunlardır:

  • Versiyon kontrol sistemleri
  • Zamanlayıcı rutinleri
  • Profilleyiciler
  • Bellek hataları araçları
  • Thread kontrol araçları
  • Debugging araçları
  • Dosya işlemleri için profilleyiciler
  • Paket yöneticileri
  • Modüller

Değerlendirme

Kitabın dili çok sade ve anlaşılır değildir. Daha çok akademik ortamlarda kullanılma amacıyla yazıldığı için HPC alanında yeni olan okuyucular bu kitabı okurken zorlanabilirler. Özellikle 4. ve 5. bölümlerde yer alan örneklerin anlaşılması bir hayli zordur. Aslında bu bölümleri atlayarak kitabı okusanız bile oldukça faydalı bilgiler edinebilirsiniz. Kitapta kullanılan görsel ve diyagramlar oldukça yerindedir. Sadece bazı bölümlerde aşırı metin kullanıldığı için bu durum odağı biraz düşürebilmektedir. Kitabın içeriği oldukça kalitelidir. Ancak çok da eşsiz değildir. Kitaptaki bilgileri elbette başka kaynaklarda da bulabilirsiniz. Ancak bu kitabın temel özelliği taksonomik sınıflandırmayı çok iyi yapmasıdır. Örneklendirme kalitesi ve örneklerin sayısı da muazzamdır. Sadece bazı yerlerde anlaşılması zor ve büyük örnekler kullanılmıştır. Bunun dışında örneklendirme konusunda eleştirebileceğim pek bir durum yoktur.

Kitap genel olarak 4 parçadan meydana gelmektedir. İlk parça paralel hesaplama ve HPC konularına bir giriş niteliği taşımaktadır. Kitap önce sizi neden paralel programlama ile uğraşmanız gerektiği konusunda motive etmektedir. Bunun için çeşitli örnekler kulanmakta ve konuları yavaş yavaş açmaktadır. Seri bir uygulamanın paralel bir uygulamaya dönüştürülmesinin nasıl olacağı ve bununla ilgili teorik kazanımları tek tek açıklamaktadır. Ancak 4. ve 5. bölümlerde işleri biraz karıştırmaktadır. Bu bölümlerde paralel dünyada veri yapılarının ve algoritmaların nasıl olması gerektiği anlatılmaktadır. Ancak verilen örnekler bir hayli büyüktür ve ön bilgi istemektedir. Bu nedenle arzu eden kullanıcılar bu iki bölümü atlayabilir (sadece kitabın bazı yerlerinde buradaki bilgilere ihtiyaç duyulmuştur).

Kitabın ikinci parçası CPU üzerinde paralelleştirme konuları ile ilgilidir. Burada vektörleştirme, Thread ile paralelleştirme ve Process ile paralelleştirme üzerinde durulmaktadır. Özellikle vektörleştirme kısmını çok beğendim. Çünkü katmanlamayı çok güzel yapmış. Ancak elbette kitabın yapısı gereği her bir katmanın detaylarına çok fazla girmemiştir. Thread paralelleştirmesinde ise kitabın neredeyse her yerinde bahsedilen OpenMP standardı üzerinde durulmuştur. Burada kullanılan örnekler oldukça anlaşılırdır. Process paralelleştirmesinde ise MPI standardı anlatılmıştır. Yine bu standarttan ve onun implementasyonlarından da kiabın diğer bölümlerinde sıkça bahsedilmiştir. Ben bu parçayı genel olarak kitabın en iyi yeri olarak değerlendirebilirim.

Üçüncü parçada GPU üzerinden yapılan paralelleştirme konusu anlatılmaya çalışılmıştır. Burada çok temelden alınarak GPU mimarisi (ve mikromimarisi) incelenmiştir. Bu parçada anlatım adım adım açılmış, yönerge bazlı GPU dillerinden düşük seviyeli GPU dillerine kadar bir anlatım yapılmıştır. Normalde GPU ile ilgili bu kadar fazla aracın ve dilin bir arada anlatıldığı bir kaynak bulmak zordur. Elbette her bir araç ve dil için çok ayrıntılı anlatımlara yer verilmemiştir. Ancak genel bilgi edinmeniz açısından oldukça yeterlidir. Ayrıca kitabın ana amacı da budur. Zaten her bölümün sonunda inceleyebileceğiniz diğer kaynakların listesini ve linkini vermesi de bunu kanıtlamaktadır. Bu bölüm genel olarak beğendiğim bir bölüm oldu.

Son parçada artık işlerin yoluna sokulması ve optimizasyon ile ilgili ek teknikler ve araçlar gösterilmektedir. Özellikle Affinity ve Batch konularına yüksek seviyeli olarak bir bakış atılmaktadır. Affinity konusunda genellikle MPI-IO ele alınmış, Batch konusunda ise Slurm ve PBS araçları anlatılmıştır. Yine paralel I/O işlemleri ve paralel dosya sistemleri üzerinde fazlaca konuşulmuştur. En son bölümde ise birçok yardımcı aracın kısa açıklamaları yapılmıştır. Bu bölümde yer alan bilgiler elbette çok ayrıntılı değildir. Ancak bu parça HPC dünyasına geniş bir perspektiften bakmanız için oldukça önemli bir parçadır. Kullanılan örnekler bazı yerlerde yine karmaşık hale gelmiştir. Ancak genel bilgi almak açısından yine iyi bir parça olduğunu söyleyebilirim.

Sonuç olarak akademik tarafta HPC ile uğraşanlar veya halihazırda programlama bilgisi olup HPC tarafında yer alan konulara genel bakış atmak isteyenler bu kitaba bakabilirler. Kitapta genellikle C dili (ve bazı yerlerde C++ dili) üzerinde örnekler olsa da Fortran ile ilgili örnekleri bulabilmeniz de mümkündür. Anlatım dili bazı yerlere anlaşılır bazı yerlerde ise oldukça zorlayıcıdır. Bu nedenle anlaşılabilirlik ve okunabilirliğin çok iyi olduğunu söyleyemeyiz. Görsel ve diyagram kullanımı oldukça fazladır. Sadece belirli bazı yerlerde biraz daha görsel kullanılsa daha iyi olabilirdi. İçerik eşsiz değil, ancak oldukça kalitelidir (özellikle akademik perspektiften bakınca). Kitapta verilen örnekler ve örnek kodlar çok iyidir. Sadece bazı örnekler ve örnek kodları biraz fazla zor bulduğumu belirtmek isterim.

Parallel and High Performance Computing İnceleme Özeti


Tam İsim: Parallel and High Performance Computing
Basım No: 1st Edition
Yazarlar: Robert Robey, Yuliana Zamora
Yayımlama Tarihi: 22 Haziran 2021
Sayfa Sayısı: 704
Anlaşılabilirlik/Okunabilirlik
Görsel/Diyagram Kullanımı
İçerik Kalitesi/Eşsizliği
Örneklendirme/Örnek Kalitesi

Sonuç Özeti

Sonuç olarak akademik tarafta HPC ile uğraşanlar veya halihazırda programlama bilgisi olup HPC tarafında yer alan konulara genel bakış atmak isteyenler bu kitaba bakabilirler. Kitapta genellikle C dili (ve bazı yerlerde C++ dili) üzerinde örnekler olsa da Fortran ile ilgili örnekleri bulabilmeniz de mümkündür. Anlatım dili bazı yerlere anlaşılır bazı yerlerde ise oldukça zorlayıcıdır. Bu nedenle anlaşılabilirlik ve okunabilirliğin çok iyi olduğunu söyleyemeyiz. Görsel ve diyagram kullanımı oldukça fazladır. Sadece belirli bazı yerlerde biraz daha görsel kullanılsa daha iyi olabilirdi. İçerik eşsiz değil, ancak oldukça kalitelidir (özellikle akademik perspektiften bakınca). Kitapta verilen örnekler ve örnek kodlar çok iyidir. Sadece bazı örnekler ve örnek kodları biraz fazla zor bulduğumu belirtmek isterim.

4.3
5 1 vote
Article Rating
Subscribe
Bildir
guest

0 Yorum
Eskiler
En Yeniler Beğenilenler