İçeriğe atla

Paralel hesaplama

Paralel hesaplama ya da Koşut hesaplama, aynı görevin (parçalara bölünmüş ve uyarlanmış), sonuçları daha hızlı elde etmek için çoklu işlemcilerde eş zamanlı olarak işletilmesidir. Bu fikir, problemlerin çözümünün ufak görev parçalarına bölünmesi ve bunların eş zamanlı olarak koordine edilmesine dayanır. Paralel hesaplama ile performans artar, büyük sorunlar daha az sürede çözülür ve bilimdeki gelişmeler paralel hesaplamaya gereksinim duyar.[1]

İki sayının toplanması

Seri (1 işlemci)
  • 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8
  • 3 + 3 + 4 + 5 + 6 + 7 + 8
  • 6 + 4 + 5 + 6 + 7 + 8
  • 10 + 5 + 6 + 7 + 8
  • 15 + 6 + 7 + 8
  • 21 + 7 + 8
  • 28 + 8
  • 36
Paralel (2 işlemci)
  • 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8
  • 3 + 3 + 4 + 5 + 6 + 15
  • 6 + 4 + 5 + 21
  • 10 + 26
  • 36

1,75 kat hızlanma sağlanır. Daha fazla işlem olursa hızlanma 2 kata kadar çıkar.[1]

Paralel Hesaplama Sistemleri

Paralel işlemci terimi bazen paralel işlemeye elverişli birden fazla işlemci içeren bir bilgisayarı tanımlamak için kullanılır. Binlerce işlemci içeren sistemler güçlü paralel (massively parallel) sistemler olarak bilinir. Çok çekirdekli işlemciler de paralel hesaplama sistemleri için uygundur. Kullanılan işlemcilerin büyüklüğüne göre sistemler büyük taneli (large grain) ve küçük taneli (small grain) olarak ikiye ayrılır. PC tabanlı sistemler küçük taneli sistemlere örnek olarak verilebilir.

Çok çeşitli paralel bilgisayar (işlemci) yapıları vardır. Bu çeşitler, işlemciler (işleme elemanı olarak adlandırılır-PE) arasındaki veya işlemci ve hafıza arasındaki bağlantıya göre belirlenir. Flynn, tüm işlemcilerin aynı zamanda aynı talimatları işlemelerine göre (tek talimat/çoklu veri-SIMD) veya her bir işlemcinin farklı talimatları (çoklu talimat/çoklu veri-MIMD) işlemesine göre paralel bilgisayarları sınıflandırır. Paralel işlemci makineleri simetrik (tüm işlemcilerin aynı seviyede olması) ve asimetrik (işlemcilerin bazı görevler için ayrılması ve önceliklerinin olması) çoklu işlemciler olarak ikiye ayrılır.

Performans & Fiyat

n adet paralel işlemciden oluşan bir sistem, n kat hızlı tek bir işlemciden daha az verimlidir fakat çok daha ucuzdur. Çok fazla hesaplama gerektiren, bitirilmesinde zaman kısıtları olan ve özellikle n adet thread'e bölünebilen görevler için paralel hesaplama mükemmel bir çözümdür. Aslında geçtiğimiz yıllarda, süperbilgisayar olarak bilinen yüksek performanslı hesaplama sistemleri paralel bir mimariye sahiptir.

Bir paralel hesaplamanın, sadece uygun donanımı satın alıp, bağlantılarını yapınca başarılı olacağı asla düşünülmemelidir. Kooperatif problem çözme şu sebepten dolayı zordur: Eğer bir insan bir çukuru bir dakikada kazıyorsa, 60 insanın bir çukuru bir saniyede kazması gerekir.

Pratikte lineer hızlanmayı (işlemci sayısıyla orantılı) başarmak çok zordur. Bunun nedeni, doğada birçok algoritma aslında sıralıdır (Amdahl yasası bunu bilimsel olarak açıklamıştır).

Ekstra işlemciler eklendikçe, bazı iş yükleri, boruhattı (pipeline) paralellik kullanarak belli bir noktaya kadar fayda sağlar. Bu sistem, bir fabrika montaj hattı yaklaşımı kullanarak işleri parçalar. Eğer iş n aşamaya bölünebiliyorsa ve bir ayrık değişken bir aşamadan diğer birine iletilebiliyorsa, en fazla n adet işlemci kullanılabilir. Bununla birlikte, en yavaş aşama diğer aşamaları da tutacaktır ve n işlemciyi tam performansta kullanmak pek mümkün olmayacaktır.

Pek çok algoritma, paralel donanımın kullanımını daha verimli yapmak için tekrar tasarlanmalıdır. Tek işlemcili sistemlerde iyi çalışan programlar, paralel sistemlerde aynı performansı vermeyebilir. Aynı programın çoklu kopyaları, birbirlerini etkileyebilirler (aynı anda aynı hafıza adresine yazma/okuma yapma). Bu yüzden paralel sistemlerde dikkatli programlama yapılması gerekir.

Thread'ler arası iletişim

Paralel bilgisayarlar, teorik olarak, Paralel Rastgele Erişim Makineleri (PRAM) olarak modellenir. PRAM modeli, hesaplama bileşenleri arasındaki bağlantı masraflarını yok sayar fakat bununla beraber pek çok problem için paralel çözülebilirlik desteği sunar. Gerçekte ara bağlantılar çok hayati rol oynar.

İşlemciler bir problemi iş birliği ile çözerken birbirleriyle haberleşmek durumundadırlar veya işleri dağıtan ve sonuçları toplayan bir başka işlemcinin kontrolü altında birbirlerinden tamamen bağımsız çalışabilirler.

Bir paralel bilgisayardaki işlemciler birbirleriyle pek çok çeşitli yöntemler ile haberleşirler. Bunlar: paylaşılmış hafıza, sürgü (crossbar), paylaşılmış bir veri yolu ya da yıldız, halka, ağaç, hiperküp, şişman hiperküp, n boyutlu ağ (mesh) gibi çok sayıda çeşitli ağ topolojileri vs. olabilir. Paralel bilgisayarlar, birbirleriyle doğrudan bağlantılı olmayan düğümlerde mesajların değişimi için bazı yönlendirme tekniklerine ihtiyaç duyarlar. Büyük ölçekli çoklu işlemci makinelerinde haberleşme ortamı hiyerarşik biçimdedir. Benzer şekilde, hafıza her bir işlemciye özgü, belli sayıdaki işlemciler için paylaşımlı veya tümüyle paylaşımlı olabilir.

Paralel bilgisayar yaklaşımları şu şekildedir:

Paralel Programlama

Paralel bilgisayarlarda programlama için işletim sistemi seviyesinde ve programlama dili seviyesinde pek çok yazılım sistemi geliştirilmiştir. Bu sistemler, problemin parçalara bölümlenmesini ve işlemcilere atanmasını sağlayan çeşitli mekanizmalar içermelidir. Dolaylı paralellik (implicit parallelism) derleyici ya da diğer programın problemi bölümlemesi ve işlemcilere otomatik olarak atamasıdır. Dolaysız paralellik (explicit parallelism) ise programcının problemin nasıl bölümleneceğini bildirmesidir. Şu an pek çok paralel işleme derleyici uygulamaları tek-katmanlı parallelliği desteklemektedir. Çok-katmanlı paralellik de paralel çalışan thread'ler daha fazla paralellik için daha da bölünürler. Semaphore ve monitor adı verilen senkronizasyon yapıları ile işlemlerin kaynakları paylaşımında bir anlaşmazlık olması durumu engellenmiştir.

Yük dengeleme, ağır yük ile çalışan işlemciden bazı görevleri daha hafif yük ile çalışan işlemcilere taşıyarak hepsinin aynı meşguliyette olmasını sağlar.

Bazı insanlar paralel programlamayı, eş zamanlı (concurrent) programlama ile eş anlamlı kabul ederler. Bazıları da kesin bir çizgiyle ayrırırlar. Paralel programlama, işlemler arasında iyi tanımlanmış iletişim yapıları kullanan ve verimi artırmaya yönelik işlemlerinin paralel işlenmesini sağlayan bir yapıdır. Eş zamanlı (concurrent) programlama, performanstan ziyade başka nedenlerden dolayı eş zamanlı işlemler arasında yeni iletişim tekniklerine dayanan bir yapıdadır. İşlemler arası iletişim genelde paylaşımlı hafıza veya mesaj geçirme tekniği ile yapılır.

İyi bilinen paralel yazılım problem kümeleri

  • Cansıkıcı (Embarrassingly) paralel: Bir birinden bağımsız alt görevler içeren, kolay uygulanabilen problemlerdir. Daha çok dağıtık hesaplama için uygundurlar. Mesela büyük bir grafiğin render edilmesi veya seti@home gibi projeler buna örnek verilebilir.
  • Büyük uğraştırıcı (grand challenge) problemler: Genelde çözülmesi çok zor olan problemlerdir. Ör: uygulamalı akışkanlar dinamiği, ekosistem simülasyonları, biyomedikal görüntüleme ve biyomekanik, moleküler biyoloji, kavrama, nükleer güç ve silah simulasyonları vs.

Paralel programlama modelleri

Bir paralel programlama modeli, paralel algoritmaları açıklayan bir yazılım teknolojileri kümesidir. Bu model, uygulamalar, diller, derleyiciler, kütüphaneler, iletişim sistemleri ve paralel giriş/çıkış alanlarını kapsar. Programcılar, kendileri ve uygulamaları için uygun bir model veya karma bir model seçip, uygulamalarını geliştirirler.

Paralel modeller çok farklı şekillerde uyarlanırlar: klasik sıralı dillerden çağrılan kütüphaneler şeklinde, dil uzantıları şeklinde ya da tamamen yeni işleme modelleriyle. Bu modeller kabaca ikiye ayrılırlar: paylaşımlı hafıza sistemleri ve dağıtık hafıza sistemleri. Günümüzde bu iki sistem arasındaki çizgi oldukça bulanıklaşmıştır.

Sık kullanılan paralel programlama modelleri

Sık kullanılan paralel programlama modelleri şöyledir: PVM, MPI, OpenMP, Global Arrays, Co-Array Fortran, UPC, HPF, SHMEM, Occam, Linda, Cilk.

Ayrıca bakınız

Kaynakça

  1. ^ a b "Arşivlenmiş kopya" (PDF). 22 Kasım 2009 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 4 Eylül 2009. 

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">İşletim sistemi</span> bilgisayar donanım kaynaklarını yöneten yazılım

İşletim sistemi ya da işletim dizgesi, bir bilgisayarın donanım kaynaklarını yöneten ve uygulama yazılımlarına hizmet sağlayan yazılımların bir bütünüdür. İşletim sistemleri, bilgisayarın donanımı ile uygulama yazılımları arasında bir köprü görevi görerek kullanıcıların sistemle etkileşim kurmasını sağlar. Öne çıkan örnekler arasında Microsoft Windows, macOS, GNU/Linux dağıtımları, Android ve iOS yer alır.

Bilişim, bilişim bilimi ya da bilgisayar bilimi, bilgi ve hesaplamanın kuramsal temellerini ve bunların bilgisayar sistemlerinde uygulanabilmeleri sağlayan pratik teknikleri araştıran bir yapısal bilim dalıdır. Bilişimciler ya da bilgisayar bilimcileri bilgi oluşturan, tanımlayan ve dönüştüren algoritmik süreçler icat edip, kompleks sistemleri tasarlamak ve modellemek için uygun soyutlamalar formüle ederler. Bilişim Dünya'da hızla gelişmeye devam eden önemli bir teknolojidir.

<span class="mw-page-title-main">RAM</span> herhangi bir sırada okunabilen ve değiştirilebilen bir tür geçici veri deposu

Rastgele erişimli hafıza veya rastgele erişimli bellek mikroişlemcili sistemlerde kullanılan, genellikle çalışma verileriyle birlikte makine kodunu depolamak için kullanılan herhangi bir sırada okunabilen ve değiştirilebilen bir tür geçici veri deposudur. Buna karşın diğer hafıza aygıtları saklama ortamındaki verilere önceden belirlenen bir sırada ulaşabilmektedir, çünkü mekanik tasarımları ancak buna izin vermektedir.

<span class="mw-page-title-main">İş parçacığı</span>

İş parçacığı, bilgisayar biliminde, bir işin eş zamanlı olarak işlenen her bir bölümüdür. İş parçacığı ve işlem arasındaki fark bir işletim sisteminden diğerine değişmekle birlikte genel olarak iş parçacığının oluşturuluşu ve kaynakların paylaşılmasıdır. İşlemler, birçok iş parçacığı oluşturup sonlandırabilir, iş parçacıkları da ortak bellek kullanabilirler. Çoğu durumda iş parçacıkları işlemlerin içinde yer alır, onları oluştururlar. Çoklu iş parçacıkları paralel olarak pek çok bilgisayar sisteminde uygulanabilir. Tek işlemci kullanıldığında çok iş parçacıklı uygulama, zaman dilimlemesiyle gerçekleştirilir; tek işlemci, farklı iş parçacıkları arasında çok hızlı geçiş yapar ve bu durumda işlemler gerçekte olmasa da eş zamanlı çalışıyormuş gibi görünür. Çok işlemcili sistemlerde farklı iş parçacıkları, farklı işlemciler üzerinde eş zamanlı olarak çalışabilir.

<span class="mw-page-title-main">Bilgisayar mimarisi</span>

Bilgisayar mimarisi, en küçüğe ve en başarılıya ulaşmayı hedeflerken aynı zamanda maliyeti de göz önünde bulundurduğu için sanat ve bilimin ortak buluştuğu nokta olarak da tanımlanır. Bilgisayar Mimarisi, bilgisayar parçalarının iç yapıları ve aralarındaki haberleşme bağlantıları ile ilgilidir.

<span class="mw-page-title-main">Süper bilgisayar</span> döneminde aşırı güçlü olan bilgisayar

Süper bilgisayar basit olarak; yoğun paralel işlemciler, yüksek başarımlı vektör işlemciler ve öbek bilgisayarların oluşturduğu sistem olarak tanımlanabilir. Süper bilgisayarlar bilimde, deney ve hesaplamayı birleştiren hesaplamalı bilim gibi yeni metodolojilerin oluşmasını sağlamıştır. Günümüzde süper bilgisayarlar saniyede yüzlerce trilyon işlem yapar hale gelmiştir. Örneğin, dünyanın en hızlı süper bilgisayarı saniyede 136,8 trilyon kalıcı işlemle Amerika'da Lawrance Livermore National Laboratuvary isimli ulusal laburatuarın kullanımındadır Süper bilgisayarlar ilk defa 1960'larda Seymour Cray tarafından Control Data Corporation'da tasarlandı.

<span class="mw-page-title-main">Çoklu işleme</span>

Çoklu işleme, iki veya daha fazla işlemcinin bir araya getirilerek, işlenmesi gereken buyruğun daha hızlı bir şekilde işlenmesini sağlamaya yönelik bir tasarımdır. Çoklu işlemcilerin tek başına bir işlemciden daha hızlı olması beklenir. İşlemci tasarımında oluşan zorluklar çoklu işlemcileri zorunlu kılmıştır. Grace Hopper bu konu ile ilgili olarak "Eğer bir öküz işi yapamıyorsa, öküzü büyütmek yerine iki öküz kullandılar" demiştir.

Bilgisayar mimarı Gene Amdahl'ın ismini alan Amdahl Yasası, sistemin bir parçasının hızlandırılması sonucunda, sistemin bir bütün olarak ele alındığında toplam hızlanmasının ne olacağını hesaplamak için kullanılır. Sıklıkla, birden fazla işlemci kullanıldığında erişilebilecek azami hızlanmayı tahmin etmek için paralel hesaplamalarda da kullanılır.

<span class="mw-page-title-main">Itanium işlemcisi</span>

Itanium işlemcisi, Intel firmasının 64-bit işlemci ailesinden olup IA-64 mimarisi kullanan işlemcilerinin devamı olarak bilinir. Itanium ve Itanium2 olarak sunulan bu işlemci ilk olarak Ekim 2001'de piyasaya sürülmüştür. Itanium işlemcilerin asıl hedefi yüksek performansa sahip bilgisayarlardı. Bu işlemcinin mimarisinin gelişimi ilk olarak Hewlett-Packard tarafından yapılmıştır ve devamında ise Intel ve Hewlett-Packard ortak olarak birlikte gerçek Itanium mimarisini geliştirmişlerdir.

Çok çekirdekli işlemci, ikiden fazla işlemciden (çekirdek) oluşan bir hesaplama birimi. Bilgisayarlarda temel komut kümesi işlemlerini gerçekleştirir.

<span class="mw-page-title-main">OpenVMS</span>

Bundan önce VMS olarak bilinen, OpenVMS, DEC tarafından geliştirilen VAX ve Alpha sistemleri üzerinde çalışan, üst seviye bir işletim sistemidir. DEC önce Compaq tarafından satın alınmıştır, Compaq ve HP (Hawlett-Packard)'ın birleşmesinden sonra, HP'ye geçmiştir. OpenVMS, en son olarak İntel Itanium işlemcilerinin kullanıldığı HP sistemlerinde kullanılmaktadır.

<span class="mw-page-title-main">Gustafson yasası</span>

Gustafson yasası, yeterince büyük bir sorunun verimli bir biçimde koşutlaştırılabileceğini öngören bir bilgisayar mühendisliği yasasıdır. 1988 yılında John L. Gustafson'un geliştirdiği bu kural, bir programın koşutluk derecesine bağlı olarak ne ölçüde hızlandırılabileceğini belirleyen Amdahl yasası ile yakından ilintilidir.

<span class="mw-page-title-main">QNX</span>

QNX, gömülü sistemler pazarına yönelik Unix benzeri, gerçek zamanlı işletim sistemidir.

Bilgisayar bilimci, bilgisayar bilimi, bilgi ve hesaplamanın teorik temellerinin incelenmesi ve bunların uygulamaları hakkında uzmanlaşmış bir kişidir.

Uzak yordam çağrısı (ya da uzak prosedür çağrısı; İngilizce: Remote Procedure Call , bir diğer adres uzayı üzerinde programcı açıkça bu uzaktan etkileşim detayları kodlama olmadan çalıştırmak için bir alt yordam veya prosedürü sağlayan bilgisayar programına izin veren süreçler arası iletişim teknolojisidir. Sunucu üzerindeki servisleri kontrol ettiğimizde karşımıza çıkan RPC, arka plânda birçok şeyi gerçekleştiren bir servistir. RPC, temelde istemci ve sunucu arasında yapılan işlemlerin iletişimi için tasarlandı. Bir işlemin gerçekleşmesi için bir gönderici ve bir de istemci vardır.. Yani programcı, alt prosedür ister çalışan programın yerelinde ister uzağında olsun, temelde aynı kodu yazar. Bu bir tür istemci-sunucu etkileşimidir ve tipik olarak bir istek-yanıt mesaj geçirme sistemi aracılığıyla uygulanır. Nesne yönelimli programlama modelinde, RPC'ler uzaktan yöntem çağırma ile temsil edilir. RPC modeli bir konum şeffaflığı seviyesini ifade eder, yani çağrı prosedürleri yerel ya da uzak olsun büyük ölçüde aynıdır, ancak genellikle aynı değildirler, bu nedenle yerel çağrılar uzak çağrılardan ayırt edilebilir. Uzak çağrılar genellikle yerel çağrılardan çok daha yavaş ve daha az güvenilirdir, bu nedenle bunları ayırt etmek önemlidir.

<span class="mw-page-title-main">Dağıtık hesaplama</span>

Dağıtık hesaplama bilişim biliminde dağıtık sistemleri inceleyen bir bilim dalıdır. Dağıtık sistem, birden fazla otomatik bilgisayarın bir ağ üzerindeki iletişimidir. Ağdaki bilgisayarlar belirli bir hedefe ulaşmak için birbirleriyle etkileşim içerisindedirler. Dağıtık sistemi çalıştıran bilgisayar programına dağıtık program denir. Bu tür programları yazma işlemine dağıtık programlama adı verilir.

<span class="mw-page-title-main">İşlem yönetimi</span>

İşlem yönetimi günümüz işletim sistemlerinin önemli bir parçasıdır. İşletim sisteminin işlemlere yer alması, aralarında haberleşmeyi sağlaması onun önemli görevlerindendir. İşletim sistemi kaynakları işlemlere göre ayırmalı, işlemleri veri aktarımı ve paylaşımına uygun hale getirmeli, her işlemin kaynağını diğer işlemlerden korumalı ve işlemler arası senkronizyonu sağlamalıdır. Bunları yapabilmek için işletim sistemi her işlem için o işlemin mevkisini ve sahipibi tanımlayan ve işletim sistemini her veriği üzerinde kontrol uyguladığı bir veri yapısı sağlamalıdır.

<span class="mw-page-title-main">Önbellek tutarlılığı</span>

Ön bellek tutarlılığı, paylaşılan kaynağın yerel ön belleğinde kaydedilen verinin tutarlılığını ifade eder. Bir bilgisayar sistemindeki istemciler ortak bir bellek kaynağının ön belleğini kullandıklarında, tutarsız verilerle ilgili sorunlar ortaya çıkabilir. Bu, bilhassa, çoklu işleme yapan sistemlerdeki merkezi işlem birimi için geçerlidir.

<span class="mw-page-title-main">OpenCL</span>

OpenCL,, Apple tarafından 2008 yılında kâr amacı gütmeyen teknoloji şirketleri birliği Khronos Group'a önerilen, kabul gördükten sonra spesifikasyonu pek çok şirketin katkılarıyla hazırlanan heterojen hesaplama platformudur. OpenCL; destekli grafik işlemcileri, genel amaçlı işlemciler ve FPGA ler gibi farklı platformlarda hesaplama yapılmasına olanak sağlar. OpenCL AMD, Intel, NVIDIA ve ARM tarafından desteklenmektedir. Ayrıca OpenCL kullanılarak Sony Playstation cihazlarında kullanılan Cell işlemcilerde de hesaplama yapılabilmektedir.

<span class="mw-page-title-main">XNU</span>

XNU, MacOS işletim sisteminde kullanılmak üzere Aralık 1996'dan beri Apple'da geliştirilen ve Darwin işletim sisteminin bir parçası olarak ücretsiz ve açık kaynaklı yazılım olarak piyasaya sürülen bilgisayar işletim sistemi çekirdeğidir. Ayrıca, iOS, tvOS ve watchOS işletim sistemlerinin çekirdeği olarak da kullanılır. XNU, "X Not Unix"'in bir kısaltmasıdır.