Kategori arşivi: BilgiKültür

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?

1950’li yıllarda donanım (hardware) ile bir bilgisayarın birbirine sabitlenmiş, lehimlenmiş kısımları kastediliyordu. Belleğinde program saklayan ilk bilgisayarlarda bu belleği paneller temsil ediyordu. Yazılım (software) yani program, ilk başlarda panelli bilgisayarlarda,kabloların  bu panellerdeki uygun deliklere elle yerleştirilerek makinenin yapacağı işleme yön verilmesiyle yapılırdı. Bu kablolar panellere sabitlenerek yada lehimlenerek tutturulmadığı, yuvadan istenildiği an çıkartılabildiği için buna İngilizce’de sabitlenerek tutturulan donanımın zıddı olarak, gevşek bir şekilde tutturulan hırdavat manasına gelen ‘software’ (yazılım) adı verildi.

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.

md5 Hash Fonksiyonu

Geçenlerde şifrelemeyle alakalı birkaç makale okudum. Md5 hash fonksiyonu da bu amaçla kullanılıyor. Tek yönlü olması, yani md5 sonucu elinizde olan bir veriye erişmenizin imkansıza yakın olması ilgimi çekti. Ben de ufak bir araştıma yaptım. Öğrendiklerimi paylaşmak istiyorum. Öncelikle md5 bir şifreleme yöntemi değil, hash fonksiyodur. Hash fonksiyonları ise bilindiği üzere bir veri topluluğundan verileri ayrı ayrı temsil edebilecek maksimum eşitsizlikte id çıkarma işlemidir. Peki bu fonksiyonun ismi neden md5? Çünkü bunun md4, md2, md gibi versiyonları da var. Bu son versiyon MIT’de profesör olan Ron Rivest tarafından, 1991 yılında md4 versiyonu geliştirilerek yapılmıştır. Md kısmının açılımı ‘Message Digest’ tır. Peki bunun karşılığı nedir derseniz, Türkçe’ye çevirince çok da anlamlı olmuyor açıkçası. Yani md5 fonksiyonunun temeli Message Digest Algoritması’na dayanmaktadır. Bu algoritmanın amacı ise değişik uzunluklardaki verileri işleyip, sabit uzunlukta veri elde etmektir. Md5 hash fonksiyonunda da işlenen veri 128 bit veriye dÖnüştürülür. Bu da 32 adet hexadecimal karakter yapmaktadır. Mantığına baktığımızda bu fonksiyonu sonsuz tane veri girdirebiliriz ama sonucunda hep 32 hex karakter çıkacağına göre, bazı verilerin md5 dönüşümleri aynı olacaktır. Olasılık çok küçük olsa da,farklı veriler için aynı sonuçları verecek olması güvenlik açısından biraz sıkıntı oluşturabilir. Ama bu sıkıntı da birkaç küçük işlemle giderilebilir. Açıkçası bu fonksiyonun algoritmasını tamamiyle öğrenmedim ama ilgilenenler internetten ulaşabilirler. Yakında bloğuma bu konuyla alakalı küçük bir eklenti yapmayı da düşünüyorum.

Kifayetsiz muhterisler ve ‘cahil cesareti’‏

New York Stern School of Business’te görevli psikologlar Justin Kruger ve David Dunning’in tarihe geçmelerine vesile olan bulguları, yani Dunning-Kruger Etkisi adıyla literatüre geçecek olan teorileri de,Türk sağduyusunun yüzyıllardır “cahil cesareti” dediği şeydir aslında.Journal of Personality and Social Psychology’nin Aralık-99 sayısında yayımlanan teorileri özetle, “cehalet, gerçek bilginin aksine, bireyin kendine olan güvenini artırır” der.
Metin çözme, araç kullanma, tenis oynama gibi çeşitli alanlarda yapılan araştırmaların sonucunda şu bulgulara ulaşılmıştır:
-Niteliksiz insanlar ne ölçüde niteliksiz olduklarını fark edemezler.

-Niteliksiz insanlar, niteliklerini abartma eğilimindedir.


-Niteliksiz insanlar, gerçekten nitelikli insanların niteliklerini
görüp anlamaktan da acizdirler.

-Eğer nitelikleri, belli bir eğitimle artırılırsa, aynı niteliksiz
insanlar, niteliksizliklerini n farkına varmaya başlarlar.
Değerlendirme zaafı
İki uzman daha sonra, bu teorilerini test etme fırsatı da buldular. Cornell Üniversitesi’ nden 45 öğrenciye bir test yaptılar, çeşitli sorular sordular. Ardından öğrencilerden “testin sonucunda ne kadar başarılı olacaklarını tahmin etmelerini” istediler.En başarısızların (yani sadece yüzde 10 ve daha az doğru cevapverenlerin), testin yüzde 60’ına doğru cevap verdiklerine, ayrıca iyi günlerinde olsalar yüzde 70’e ulaşabileceklerine inandıkları ortaya çıktı.En iyilerin (yani en az yüzde 90 doğru sonuç alanların) en alçakgönüllü denekler olduğu (soruların yüzde 70’ine doğru cevap verdiklerini düşündükleri) görüldü. (Not: Dunning ve Kruger bu çalışmalarıyla 2000 yılında Nobel de kazandılar.)İki uzman psikolog bu bilinçsizliği, “kronik kendi kendini değerlendirme (auto-evaluation) yeteneksizliğ ine” bağlıyorlar. Çalışan, kendi kapasitesini değerlendirmekten ve eksikliğini teşhis etmekten acizdir. Ama asıl vahim olan, bu “yetersizlik + haddini bilmeme” kokteylinin, mesleki açıdan, karşı koyulmaz bir itici güç oluşturması. Kariyer açısından bir eksiyken, artıya dönüşmesi.İşinde çok iyi olduğuna yürekten inanan “yetersiz”, kendini ve yaptıklarını övmekten, her işte öne çıkmaktan ve haddi olmayan görevlere talip olmaktan en küçük bir rahatsızlık duymayacaktır.Aksine bunu bir “hak” olarak görecektir. “Uyanıklık” bilecektir.Bu arada, gerçekten bilgili ve yetenekli insanlar ise çalışma hayatında “fazla alçakgönüllü” davranarak kendilerine haksızlık edecekler, öne çıkmayacaklar, yüksek görevlere kendiliklerinden talip olmayacaklar, kıymetlerinin bilinmesini bekleyecekler (ve bilinmeyince için için kırılacaklar ve kendilerini daha da geriye çekecekler) ve muhtemelen üstleri tarafından “ihtiras eksikliği” ile suçlanacaklardır.Üstleri de zaten, genelde “aynı yoldan geçmiş” insanlardır.Buna, insan kaynaklarının, iki benzer CV arasından, “kendine güvenen ve iyi sonuç alma olasılığı yüksek” adayı tercih edeceği gerçeğini de eklerseniz, Dunning-Kruger Sendromu’nun Peter Prensibi’nin yatağını yaptığı da ortaya çıkar.Sonuçta, “kifayetsiz muhterisler” her zaman ve her yerde daha hızlı yükselecekler ve daha yukarılara çıkacaklardır. Etrafınıza bir bakın, uzmanlara hak vereceksiniz.

Peter Prensibi: Her çalışan, iş ortamında yetersiz olduğu noktaya kadar yükselir, der. Bunun doğal sonucu olarak, yüksek makamlar daima yetersiz insanlar tarafından işgal edilir.

Kifayetsiz muhterisi nasıl tanırsınız?


1- Gücünü delegasyon bahanesinden alır. Ekibinin orkestra şefi havalarına girer.

2- Çok gürültü patırtı eder, çok şey yapıyormuş havası estirir.
3- Koridorlarda hızlı hızlı, düşünceli edayla yürür.
4- “Beşer şaşar” diye düşünür. Ama genellikle şaşan beşer başkası değil, kendisidir.
5- Ne olursa olsun, hazırlıklıymış, olacakları önceden biliyormuş gibi davranır.
6- Üstlerine karşı son derece kibardır; altındakilere (özellikle de en çok ihtiyaç duyduklarına) kötü muamele eder. 
7- İktidar ilişkileri ve göstergeleri onun için çok önemlidir. Astlarına kimin üst olduğunu hatırlatmayı sever.
8- İlk denemede başarılı olamazsa, başarısızlığının belgelerini yok etmeyi unutmaz.
9- Talimatlarını post-it ile, e-postayla verir böylece astlarıyla yüzleşmekten kaçar.
10- Toplantılarda son sözü mutlaka o söyler, gerekirse başkasının sözünü tekrarlamak pahasına..
Mehmet Aydın Erceiş

İlk bilgisayar Bug’ı

Programlamayla alakası olan insanlar debug kelimesini yakından tanırlar. Yazılan programın hatalardan arındırılması demektir. Yalnız bug’ın kelime manasına bakıldığında hatalardan arındırma olayına anlam verilemeyebilir. Çünkü bug’ın kelime anlamı böcektir.Peki bu anlam bu kelimeye nasıl kazandırılmıştır bakalım. Cobol dilinin geliştiricisi Grace Hopper ve arkadaşları Harward Üniversitesi’nde ilk bilgisayarlardan Mark II üzerinde çalışırlarken ilk bilgisayar böceğini yani bug’ını buldular. Bu bug test sırasında sistem içerisine girmiş bir güveydi, yani harbiden böcekti. Operatörler bunu bilgisayar log’unun bulunduğu sayfaya bantladılar ve ilk gerçek bug bulma vakası olarak 9 Eylül 1945 tarihiyle birlikte not düştüler. Bir süre sonra bug sözcüğü bilgisayar terminolojisinde hayli popüler oldu. O tarihten sonra bir bilgisayar programını hatalarından ayırma işlemi için ‘debugging’ terimi kullanılmaya başlandı. Bu ilk bilgisayar ‘bug’ı Virginia eyaleti Dahlgren kentindeki ABD donanmasına ait Naval Surface Warfare Center Computer Museum’da sergileniyor. Aşağıda ilk bug’ın resmini görebilirsiniz.
bug 
Kaynak:Anı ve Fotoğraflarla Bilişim Tarihimiz – Akdoğan Özkan