Kurban Bayramımız Kutlu Olsun
‘Nerde o eski bayramlar’ demiycem çünkü o bayramlar içimizde. İstediğimiz taktirde yine aynı heyecanı yaşayabiliriz. Yakınlarımız ve dostlarımızla geçireceğimiz bir bayram aynı duyguları tattıracaktır eminim. En büyük dileğim Kurban Bayramı’nın amacına uygun bir şekilde geçirilmesi, aylarca evlerine et girmeyen insanların bayramın bereketinden kendilerine düşen payı almasıdır. Nice bayramlara, ailemizle, huzurla…
Elif Olmak..
Elif olmak zordur
Çünkü elif olmak
Yuvarlak bir dünyada dik durmanın
Dik ve önde
Belki acıyla
Ama vazgeçmeden durmanın
Dünya ne kadar dönerse dönsün
Olduğu yerde kalmanın adıdır elif olmak
Kaç silah varsa elife çevrilir
Elif hep olduğu yerdedir
Silahlar patladığında ilk vurulan eliftir
Zordur elif olmak
Elif olmak hep vurulmaktır
Elif olmak yalnızca elif olmaktır
Ne B, ne T, ne S
Elif
Yalnızca elif
Elif demeden hiçbir şey denilemez
Ben elif dedim
Artık her şeyi söyleyebilirim
Mevlana İdris
MPI protokolü
MPI (Message Passing Interface) dağıtık bellekli bir sistemde paralel program koşan düğümlerin arasındaki iletişim için kullanılan fiilen standart bir protokoldür. Paralel sistemlerde kullanılmak için geliştirilmiş en temel kütüphanedir. Fortran,C,C++ ve Ada programlama dillerinden çağrılan kütüphane metodlarından oluşur. Diğer eski sistemlere göre üstünlüğü hızlı çalışması ve taşınabilir olmasıdır. MPI paralel olarak birbirine bağlanan bilgisayarlarda işlemciler arası haberleşmeyi sağlamak amacıyla kullanılır.
Paralel programlamada amaç OpenMP Api’sinde anlattığım gibi hesaplanması çok uzun süre alan işlemleri mümkün olduğunca kısa sürede halletmektir. 1990’lı yıllarda süper bilgisayarların geliştirilmesiyle birlikte işlemlerin en kısa sürede çözümü için algoritma ihtiyacı doğmuştur.
Bir C programı düşünüldüğünde MPI fonksiyonlarının yapısı şu şekildedir.
1- Kütüphanelerin import edilmesi
2 – MPI veri türlerinin belirlenmesi
3 – MPI’ın başlatılması
4 – MPI haberleşmelerinin yapılması
5 – Program içinde yer alan gerekli hesaplamaların yapılması
6 – MPI’ın kapatılması
7 – Programın sonlandırılması
Kaynak: XI. Akademik Bilişim Konferansı,Harran Üniversitesi
OpenMP
Son yıllarda bilgisayar mimarisinde çok çekirdekli yapıya geçilmiştir. Böylelikle bilgisayarımız aynı anda birden fazla işi yapabilecek duruma gelmiştir. Donanım olarak bu mimarinin kullanılabilmesi için tabiî ki yazılımlar gerekmektedir. Sadece paralel programlama ile hazırlanmış programlar birden fazla çekirdeği aynı program için kullanma imkanı sunmaktadır. Böylelikle program parçalara ayrılarak çekirdeklerde eş zamanlı olarak çalıştırılır. Bu yöntemle günlerce sürecek büyük hesaplamaların yapıldığı programlar saatler içerisinde halledilebilir hale gelmiştir. Ayrıca paralel programlama sadece multicore ve tek bilgisayar üzerinde kullanılmamaktadır, bununla birlikte bir ağ üzerinde birleştirilmiş ve birbiriyle iletişim halinde olan birden fazla bilgisayarla da paralel programlama yapılabilir. Böylelikle ağ üzerinde dağıtık halde bulunan bilgisayarların bellekleri ortak olarak kullanılabilir. Yapılan işlem tüm bilgisayarlara paylaştırılarak işlem sonucunu normalden çok daha kısa sürede elde edebiliriz. OpenMP paralel programlama işini kolaylaştıran bir API’dir. Çalışma prensibi, paralel işletilmesi gereken kısımlarda dallanır, paralel çalışıp işlem bitince tekrar birleşmesi şeklinde olur. Buna Fork-Join Model denir. OpenMP Api’sinin her platforma göre derleyicisi bulunmaktadır. Ayrıca C++,C ve Fortran ile kullanılabilir.
Neden ‘Software’ dendi?
Kaynak: Anı ve Fotoğraflarla Bilişim Tarihimiz – Akdoğan Özkan
Pipeline İşlemci Mimarisi
Pipeline işlemci mimarisine genel olarak değinmek istiyorum. İşlemcinin paralel olarak işlem yapabilmesini sağlayan tekniktir. İşlemcinin komutu alması, çözmesi ve işleme sokması gibi aşamalar düşünüldüğünde, bir komutun işleme alınmasıyla işlemin tamamlanıp farklı bir komuta geçilene kadarki sürede sadece o komutla ilgilendiğini görürüz. Farklı bölümler kendi işlerini yaptıktan sonra diğer bölümlerin de işlerini yapmasını beklemektedir. Bu da çok fazla zaman kaybına neden olmaktadır. Bu sebeple Pipeline Mimarisi düşünülmüştür. Bu mimariyi bir örnekle açıklayacak olursak, günümüzde fabrikalarda üretim aşamasında çokça kullanılan üretim bantlarını göz önüne alalım. Bu bantlar hareket ettikçe malzemeler bekleyen işçilerin önüne gelir, her işçi kendi yapacağı işi kısa sürede yapar ve bir sonraki ürünün önüne gelmesini bekler. Bu yapıyla zamandan büyük oranda tasarruf edilerek üretimde verimlilik sağlanmış olur.
Üretim bandındaki yapıyı komutların işlenmesine benzetelim. Diyelim komutu fetch etmek t1 süre, çözmek t2 süre, icra etmek ise t3 süre alsın. Böylelikle t = t1 + t2 + t3 sürede sadece bir işlem yapılacaktır. Pipeline mimarisine uyarladığımızda ise t1 süresinde komut fetch edildikten sonra komutun çözülmesinde geçildiği andan sonraki komut fetch edilmeye başlanacaktır. Böylelikle t1 ,t2 ve t3 sürelerinin eşit olduğunu farzettiğimiz taktirde t1 = t2 = t3 = t olur ve zamandan üç kat tasarruf etmiş oluruz. Bu değerlerin eşit olmadığı taktirde ise bu üç değerin birbirine yakın olması en verimli sonucu verecektir. Aradaki farkın açılmasında ise bir komutun işlenme süresi artacaktır. Modern bilgisayarlarda bu işlemlerin her biri bir clock palsinde gerçekleşmektedir. Yani Pipeline’sız olarak 3 clock palsinde bir işlem yapılırken, Pipeline Mimarisi ile her clockta bir işlem gerçekleşmektedir (başlangıçtan üç clock palsi sonrasından itibaren). Yukarıda sadece üç aşamadan bahsettim ama bu aşamalar fetch, decode, execute, memory ve write back olarak beşe kadar çıkabilmektedir.
Avantajları:
- Zaman tasarrufu sayesinde işlem hacmi artar.
- ALU tasarımı daha hızlıdır.
Dezavantajları :
- Dallanma işlemleri en büyük problemleridir. Dallanılacak yerin önceden bilinememesi performansı düşürür. Atlama komutu çalışmadan sonraki komutun ne olacağı bilinemez.
- ALU tasarımı daha karmaşıktır.
- Pipelined bir sistemin yönerge gecikmesi(latency), pipelined olmayana göre biraz daha fazladır.
- Bu da sisteme ekstra flip-floplar eklenmesinden kaynaklanır.
- Pipelined bir sistemin işlemci performansını ölçmek daha zordur ve performans daha değişkendir.
Von Neumann Mimarisi

Şu anda kullandığımız bilgisayarların mimarisinin de temelini oluşturan mimaridir. Bu mimarinin sahibi ise John Von Neumann’dır. Neumann 1903-1955 yılları arasında yaşamış Amerikalı matematik ve bilgisayar bilimcisidir. Lisansını kimya üzerine bitirmiştir. Doktorası ise matematik üzerinedir. Ünlü oyunlar teorisi de ona aittir. II. Dünya Savaşı yıllarında Eniac adlı ilk bilgisayarlardan olan hesaplayıcıyı üretmiştir.
Eniac’ı programlamak için delikli kartlar kullanılıyordu. Bu da normal olarak işlemlerin uzun süre almasına neden oluyordu. Bu olay Neumann’ın saklı programlama yani stored program adlı yapıyı düşünmesini sağladı. Bu yapı da programlama olayı daha esnek olacak ve bilgisayarın içerisinde saklanacaktır. Tabi bu düşünceyi gerçekleştirmek için bazı birimlere ihtiyaç olacaktır. Bu birimler yukarıda saklama işini yapabilecek bellek , işlemleri yapacak olan CPU ve kullanıcıdan bilgi alıp kullanıcıya bilgi veren I/O portlarıdır.
Bu mimarinin eskiye göre en büyük avantajı esnek olmasıdır. Daha önce bir bilgisayarı yapılma amacı dışında kullanmak için yeniden programlamak gerekiyordu. Avantajları olduğu gibi tabii ki bu mimarinin dezavantajları da vardır. En büyük dezavantajı ise hatalardır. Esnek olmayan yapıya göre düzenlenen bir program doğru olarak yazılıp çalıştırıldıktan sonra hiç hata vermeden istediğimiz kadar çalıştırabiliriz. Ama kullanıcıya göre esnek olan ve kullanıcıdan veri alan , o verilere göre sonuç veren programlarda, kullanıcıdan alınan değere hata çıkma ihtimali eskiye oranla yüksektir.
Bu mimaride yapılan işlem Assembly Dersi’nde gördüğümüz yapıdır aslında. Program işaret edilen bellekteki veriyi alır daha sonra ne yapacağına dair kodu alır,işlem gerçekleşir.Bu olay kodlar tamamlanana kadar devam edip gider.Aslında bu yapı bu sebepten dolayı programı yavaşlatır.Bu da en önemli dezavantajlarından biridir.Ama kabul etmeliyiz ki bir yerden fayda görürken elbette ki bunun bir bedeli olacaktır.Bedeli de bu dezavantajlardır. İşlemci ile bellek arası veri taşıma hızının, bellek hızına göre düşük olması işlemcinin büyük bir süre verinin gelmesini beklemesini gerektirir. Günümüzde işlemci ile bellek erişim hızının arasındaki farkın açılmasıyla bu sorun daha da açık olarak fark edilmektedir ve çözüm aramaktadır.
