• Sonuç bulunamadı

2. PARALEL M˙IMAR˙ILER VE PROGRAMLAMA MODELLER˙I

2.3. Paralel Programlama Mekanizmaları

˙I¸slemci ve bellek, paralel donanımın temel kavramlarından olmasına ra˘gmen process paralel yazılımın temel kavramsal birimidir. Ba¸ska bir deyi¸sle process, fiziksel bir i¸slemci üzerinde yürütülen programın bir örne˘gidir. Da˘gıtılmı¸s bellek sisteminde SPMD veya MPMD modellerinin uygulanması, veri ileti¸simi ve i¸slemler arasındaki senkronizasyon ile mümkün olabilir. Veri haberle¸smesi için en önemli yöntemler, payla¸sılan de˘gi¸skenleri kullanma veya de˘gi¸skenleri haberle¸stirme ¸seklinde olur. Payla¸sılan de˘gi¸skenler haberle¸smesinde i¸slemler, i¸slemcilerin yerel belle˘ginde bulunabilen payla¸sımlı de˘gi¸skenlere do˘grudan eri¸sime sahiptir. Payla¸sılan de˘gi¸skenlerin e¸szamanlı güncellenmesini önlemek için farklı mekanizmalar kullanılır.

2.3.1. Da˘gıtık sistemler için mesaj gönderme mekanizması

Da˘gıtık sistemler için mesaj gönderme mekanizması üç ba¸sık altında ele alınacaktır: (i) sıkı ba˘glı sistemler için MPI, PVM; (ii) gev¸sek ba˘glı sistemler için RPC, RMI, CORBA ve (iii) bulut hesaplama için E¸sle/˙Indirge. Mesaj gönderme, de˘gi¸skenlerin haberle¸smesi için kullanılan en yaygın yöntemdir. Mesaj göndermede, i¸slemler aktivitelerini mesaj gönderme ve alma ¸seklinde yaparlar. Takip eden paragraflarda kısaca yukarıda bahsedilen mesaj gönderme yapılarına de˘ginilecektir.

MPI, paralel programlama amacıyla kullanılan bir platformun ismidir. Çok çe¸sitli i¸sletim sistemlerinde ve çok çe¸sitli dillerde paralel uygulama geli¸stirmeye olanak sa˘glar. Ancak temel çıkı¸s sistemi Linux ve temel programlama dili olarak C dili kabul edilebilir. Buna kar¸sılık Windows, Unix gibi i¸sletim sistemleri ve JAVA, C++, C gibi programlama dillerinde de oldukça yo˘gun kullanıcıları bulunmaktadır. MPI, API ¸seklinde veya C, C++ and FORTRAN için kütüphane formunda bulunabilir. MPI temel olarak birden fazla bilgisayarın üzerinde aynı programın çalı¸stırılması ve bu çalı¸stırma sırasında programların birbiri ile ileti¸sime geçerek birbirinden veri transfer etmesine dayanır. Open MPI projesi1; akademik, ara¸stırma ve endüstri ortaklarından olu¸san bir konsorsiyum tarafından geli¸stirilen ve sürdürülen açık kaynaklı bir MPI uygulamasıdır.

PVM’de2, programcı problemi ayrı programlara veya görevlere ayırır. Her program C veya Fortran dilinde yazılmı¸stır ve a˘gdaki belirli bilgisayar türlerinde çalı¸sacak ¸sekilde derlenmi¸stir. A˘g homojense (aynı türden bilgisayarlardan olu¸smu¸ssa), bu tür bilgisayar

1https://www.open-mpi.org/

için programların sadece bir kez derlenmesi yeterlidir. PVM, ayrıca heterojen makinalardan olu¸san bir a˘gı tek bir da˘gıtık paralel i¸slemci olarak kullanmak için geli¸stirilmi¸stir. Büyük hesaplama yükü getiren problemler, pek çok bilgisayarın bir araya gelmesiyle sa˘glanan hız ve bellek sayesinde verimli bir ¸sekilde çözülebilir. Yazılım ta¸sınabilir özelliktedir.

Da˘gıtık hesaplamada bir bilgisayar programı genellikle payla¸sılan bir a˘gdaki ba¸ska bir bilgisayarda bir yordamın yürütülmesine neden oluyorsa bu RPC olarak bilinir. RPC, temelde istemci ve sunucu arasında yapılan i¸slemlerin ileti¸simi için istek-cevap mesaj göndermesi ¸seklidne tasarlanmı¸s bir servistir. Bir i¸slemin gerçekle¸smesi için bir gönderici (sunucu) ve bir de istemci vardır. Nesneye yönelik programlama paradigmasında, RPC ça˘grıları RMI ile temsil edilir. RPC’ler, farklı i¸slemlerin farklı adres uzaylarına sahip oldu˘gu bir i¸slemler arası ileti¸sim biçimidir. E˘ger i¸slemler aynı ana makine üzerinde ise fiziksel adres uzayları aynı olsa bile, farklı sanal adres uzaylarına sahiptirler. Farklı ana bilgisayarlarda iseler, fiziksel adres uzayları farklıdır [31]. CORBA, OMG’nin OMA ana bile¸senlerinden birisidir. OMA nesne modeli ve referans modelinden olu¸sur. Nesne modeli heterojen bir ortamda da˘gılmı¸s nesnelerin nasıl tanımlanabilece˘gini belirler. Referans modeli ise nesneler arası etkile¸simleri tanımlar. Dolayısıyla nesne yönetim mimarisi heterojen ortamlara da˘gılmı¸s beraber i¸sleyebilen da˘gıtık nesnelerin geli¸stirilmesine ve konu¸slandırılmasına yardımcı olur. CORBA sayesinde programcılar kullandıkları nesnelerin hangi dilde yazıldı˘gına, da˘gıtık olup olmadıklarına, i¸sletim sistemlerine ve ileti¸sim protokollerine bakmaksızın programları geli¸stirebilirler [32]. Hadoop ekosistemi ve E¸sle/˙Indirge paradigması Bölüm 2.5’te detaylı sunulmu¸stur.

2.3.2. Çok çekirdekli i¸slemciler için payla¸sımlı bellek mekanizması

Bu bölümde multi-threading yapılardan P-thread, OpenMP’ye ve paralel programlama dillerinden HPF ile UPC’ye de˘ginilecektir. Thread (iplik) kavramı, aynı i¸slem ortamında birden fazla i¸s yürütme imkanı sa˘glar. Bir i¸slemin (process’in) çalı¸smaya ba¸slaması ile birlikte bir thread (main thread) olu¸sturulur ve bu i¸slem içerisinde birden fazla iplik (multi-thread) olu¸sturulabilir. Olu¸sturulan iplikler aynı adres uzayında ko¸sarlar. Her ipli˘gin kendine has program sayacı, saklayıcıları, yı˘gını ve durumu (yok edilme, askıya alınma, önceli˘ginin de˘gi¸stirilmesi) vardır. Bir iplikteki de˘gi¸skeni aynı i¸slem tarafından üretilmi¸s bütün iplikler de˘gi¸stirebilir veya okuyabilir. P-thread (POSIX thread)1iplik kavramının C dili ile kodlanabilmesi için genellikle UNIX türevi i¸sletim sistemelerinde geli¸stirilen programlama kütüphanesidir. Benzer ¸sekilde JAVA’da da Thread sınıfından kalıtım yoluyla veya Runnable arayüzünden uygulanması ¸seklinde

veya paralel hesaplama için geli¸stirilmi¸s PCJ kütüphanesi1 kullanılarak multi-thread programlama gerçeklenebilir [33].

OpenMP2, payla¸sımlı bellekli çoklu i¸slemcili mimariler için geli¸stirilmi¸s ve derleyici direktifleri yardımıyla paralel programlama yapan bir uygulama geli¸stirme arayüzüdür. Derleyicide derlenen program komutlarını, paralel çoklu i¸slemciye/çekirde˘ge sahip sistemlerde da˘gıtır ve paralel olarak i¸sletilmesinin sa˘glar. OpenMP uygulamaları C/C++ ve Fortran dilleri ile geli¸stirilebilir ve bu dillere ait birçok derleyici OpenMP deste˘gi vermektedir.

HPF, Fortran 90’ın paralel hesaplamayı destekleyen bir uzantısıdır. HPF, birden fazla i¸slemci üzerinden tek bir dizi hesaplama çalı¸smasını yaymak için veri paralel bir hesaplama modeli kullanır. Bu, hem SIMD hem de MIMD stil mimarileri üzerinde etkili bir uygulama sa˘glar. UPC3, büyük ölçekli paralel makinelerde yüksek performanslı i¸slem için tasarlanmı¸s C programlama dilinin bir uzantısıdır. UPC, SPMD modelini kullanır. Dil hem payla¸sımlı hem de da˘gıtılmı¸s bellek donanımı için tek tip bir programlama modeli sunar. Ayrıca Cuda ve OpenCL gibi donanım spesifik diller vardır. CUDA, NVIDIA’nın GPU (grafik i¸slem birimi) gücünü kullanarak hesaplama performansında büyük ölçüde artı¸slara olanak veren paralel hesaplama mimarisidir. CUDA paralel hesaplama platformu, farklı özellikteki verileri ifade etmeye olanak veren birkaç basit C ve C++ uzantısı sa˘glar. Geli¸stiriciler için komple CUDA araçları ve ekosistem çözümleri4 bulunmaktadır. OpenCL5, Apple tarafından 2008 yılında kar amacı gütmeyen teknoloji ¸sirketleri birli˘gi Khronos Group’a önerilen, kabul gördükten sonra spesifikasyonu pek çok ¸sirketin katkılarıyla hazılanan heterojen hesaplama platformudur. OpenCL; destekli grafik i¸slemcileri, genel amaçlı i¸slemciler gibi farklı platformlarda hesaplama yapılmasına olanak sa˘glar. OpenCL; AMD, Intel, NVIDIA ve ARM tarafından desteklenmektedir.