Çok Çekirdekli Sistemlerin Yazılım Kalitesi Üzerine Etkileri



Benzer belgeler
BİL 542 Paralel Hesaplama. Dersi Projesi. MPJ Express Java Paralel Programlama

PARALEL HESAPLAMA ÇAĞRI GİDER ENES BİLGİN

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu

Elbistan Meslek Yüksek Okulu Güz Yarıyılı

Yazılım Mühendisliği 1

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

T.C. ERCİYES ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ EĞİTİM ÖĞRETİM YILI DERS KATALOĞU

ÇOK ÇEKİRDEKLİ İŞLEMCİLER VE PARALEL YAZILIM GELİŞTİRME OLANAKLARI HAKKINDA BİR İNCELEME

08225 AĞ TEMELLERĠ. Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU. 20 EKi Salı, Çarşamba

BLM 4811 MESLEKİ TERMİNOLOJİ II Salı , D-109 Dr. Göksel Biricik

Küme Bilgisayarlar. Enabling Grids for E-sciencE. Onur Temizsoylu. Grid ve Küme Bilgisayarlarda Uygulama Geliştirme Eğitimi ODTÜ, Ankara

Bulut Bilişim. Ege Üniversitesi Bilgisayar Mühendisliği Web Servisleri

Yazılım Mimari Tasarımından Yazılım Geliştirme Çatısının Üretilmesinde Model Güdümlü Bir Yaklaşım

MÜFREDAT DERS LİSTESİ

T. C. KAMU İHALE KURUMU

İŞLETİM SİSTEMLERİ. (Operating Systems)

Nesneye Dayalı Yazılım Metrikleri ve Yazılım Kalitesi. Ural ERDEMİR, Umut TEKİN, Feza BUZLUCA

Farklı Mobil Platformlar Üzerinde Servis Tabanlı Mimari(SOA) Yaklaşımı: Elektronik Uçuş Çantası Vaka Çalışması

İŞLETİM SİSTEMLERİNE GİRİŞ. Modern bilgisayar çalışma prensipleri, Von Neumann ın 1945 de geliştirdiği

Yazılım İnşası ve Evrimi (SE 556) Ders Detayları

BM208- Nesneye Dayalı Analiz ve Tasarım. Sunum 7

Bilgisayar Ağları ve Dağıtık Programlama

Model Güdümlü Geliştirme ile Gömülü Kaynakların Yönetimi

1.Yazılım Geliştirme Metotları 1

Sistem Geliştirme Yaşam Döngüsü (The Systems Development Life Cycle) (SDLC)

Bilgisayar Mimarisi Nedir?

YAZILIM MÜHENDİSLİĞİ Şubat 2012 Yrd.Doç.Dr. Yunus Emre SELÇUK GENEL BİLGİLER

CENG 302 Yazılım Mühendisliği Yazılım Mimarisi - Devam. Alper UĞUR

BİT in Temel Bileşenleri (Yazılım-1)

Bilgisayar İşletim Sistemleri BLG 312

O P C S T A N D A R D I

Windows Mobile İşletim Sistemleri İçin Veri Giriş Yazılımı

BMH-405 YAZILIM MÜHENDİSLİĞİ

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ

İŞLETİM SİSTEMLERİNE GİRİŞ - 2. Sistem, sistem kaynaklarını belli bir hiyerarşi içinde kullanıcının hizmetine

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

Nesneye Dayalı Analiz ve Tasarım (SE 321) Ders Detayları

Yazılım Örüntüleri (SE 461) Ders Detayları

BMH-405 YAZILIM MÜHENDİSLİĞİ

Ders - 1. BİL 221 Bilgisayar Yapısı GİRİŞ. Ders Hakkında. Ders İzlencesi

MESLEKİ TERMİNOLOJİ I 1. HAFTA YAZILIM MÜH. TEMEL KAVRAMLAR

Yazılım Mühendisliği Bölüm - 3 Planlama

Öğr.Gör. Gökhan TURAN Gölhisar Meslek Yüksekokulu

YAZILIM MODELLEME VE TASARIM

Java Temel Özellikleri

BM-311 Bilgisayar Mimarisi

İçindekiler. Okuma lisansı info acar, için verilmiştir. Çoğaltılması ve dağıtılması yasaktır.

Bilişim Sistemleri. Modelleme, Analiz ve Tasarım. Yrd. Doç. Dr. Alper GÖKSU

Bitirme Ödevi Sunumu PLATFORM BAĞIMSIZ BENZETİM PROGRAMI. Danışman : Yrd.Doç.Dr. D Feza BUZLUCA Gökhan Akın ŞEKER

Bilgi Sistemleri Tasarımı (SE 503) Ders Detayları

UHeM ve Bulut Bilişim

NESNEYE YÖNELİK TASARIM SÜRECİ

Eylül 2007 de v1.0 ı yayınlanan SysML sayesinde endüstri mühendislerinin de ihtiyacı karşılanmış oldu.

DGridSim Gerçek Zamanlı Veri Grid Simülatörü. Yazılım Tasarımı Dokümanı v Mustafa Atanak Sefai Tandoğan Doç. Dr.

PROGRAMLAMA TEMELLERİ

BİLİŞİM SİSTEMLERİ GÜVENLİĞİNDE YENİ EĞİLİMLER

Mobil Cihazlardan Web Servis Sunumu

Bilgisayarlara ve Programlamaya Giriş (COMPE 101) Ders Detayları

FTR 331 Ergonomi. Bilgiye Dayalı İş Yeri Düzenleme. emin ulaş erdem

Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların

Bilişim Sistemleri Değerlendirme Modeli ve Üç Örnek Olay İncelemesi

TCMB Deneyim Raporu. Kurumsal Java Uygulama Platformu. Sacit Uluırmak. Türkiye Cumhuriyet Merkez Bankası Sistem Araştırma ve Planlama Müdürlüğü

Sınıf Diyagramları Amaç: Sınıf Diyagramları Nasıl Çizilir?

ANKARA ÜNİVERSİTESİ A ÖĞRENCİ İŞLERİ DAİRE BAŞKANLIĞI

JAVA RMI ve Hibernate teknolojileri kullanılarak çok amaçlı bir yazılım altyapısı hazırlanması

Çok İşlemcili Yapılarda Sinyal İşleme Yazılımlarının Geliştirilmesi Uygulaması. Sinan Doğan, Esra Beyoğlu

İşletim Sistemlerine Giriş 2. Kaynakların Paylaşımı. Öğr.Gör. Dr. Şirin KARADENİZ

BİLGİSAYAR PROGRAMLARININ TASARIMLARINDAKİ VE KODLARINDAKİ SORUNLARIN BELİRLENMESİ ALPER FİLİZ MEHMET ALİ SERT

Kablosuz Sensör Ağlar ve Eniyileme. Tahir Emre KALAYCI. 21 Mart 2008

Bilgisayar Programlama Dilleri

BİLGİSAYAR DESTEKLİ TASARIM AUTOCAD DERSİ. 1. HAFTA Öğr. Gör. Serkan ÖREN

FTR 331 Ergonomi. yrd. doç. dr. emin ulaş erdem

MİKROİŞLEMCİ MİMARİLERİ

Hızlı Uygulama Geliştirme (Rapid Application Development - Rad Model)

İleri Yazılım Mimarisi (SE 658) Ders Detayları

Bilgisayarlara ve Programlamaya Giriş (COMPE 101) Ders Detayları

YAZILIM MÜHENDİSLİĞİ TEKNOLOJİ FAKÜLTESİ / BİLGİSAYAR MÜHENDİSLİĞİ

Nesne Tabanlı Programlama (COMPE 225) Ders Detayları

SİSTEM VE YAZILIM. o Bilgisayar sistemleri donanım, yazılım ve bunları işletmek üzere gerekli işlemlerden oluşur.

Gezgin Satıcı Probleminin Benzetilmiş Tavlama Yöntemiyle Çözümünde Paralel Hesaplamanın Kullanılması

ALGORİTMA VE PROGRAMLAMA I

MÜHENDİSLİK FAKÜLTESİ / ENSTİTÜSÜ / YÜKSEKOKULU BİLİŞİM SİSTEMLERİ MÜHENDİSLİĞİ BÖLÜMÜ /ABD LİSANS PROGRAMI - 2 ( yılı öncesinde birinci

TS EN ISO/IEC Kullanılabilir Arayüz Sertifikası Verilmesi Süreci

9.DERS Yazılım Geliştirme Modelleri

ANKARA ÜNİVERSİTESİ A ÖĞRENCİ İŞLERİ DAİRE BAŞKANLIĞI

İŞLETİM SİSTEMİ İşletim sistemi kullanıcıyla bilgisayar donanımı arasında iletişim sağlayan programdır.

Akıllı Ortamlarda Sensör Kontrolüne Etmen Tabanlı Bir Yaklaşım: Bir Jadex Uygulaması

EĞİTİM-ÖĞRETİM YILI MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ (İNGİLİZCE) BÖLÜMÜ DERS PROGRAMINDA YAPILAN DEĞİŞİKLİKLER

YZM 2108 Yazılım Mimarisi ve Tasarımı

Yazılım Kalite Yönetimi (SE 554) Ders Detayları


Sistem Analizi ve Tasarımı DERS2

4. Bölüm Programlamaya Giriş

Gezgin Etmen Sistemlerinin Başarım Ölçümü: Benzetim Tekniği

NESNEYE YÖNELİK PROGRAMLAMA Unified Modelling Language (UML) Bütünleşik Modelleme Dili

FARKLI PROJELERDE GELİŞTİRİLEN GÖMÜLÜ YAZILIMLARIN TEST OTOMASYONU İÇİN DONANIM SİSTEMİ SİMÜLASYONU GELİŞTİRME DENEYİMİ

Bilgisayar Programlama (COMPE 102) Ders Detayları

BSM 532 KABLOSUZ AĞLARIN MODELLEMESİ VE ANALİZİ OPNET MODELER

Nesneye Yönelik Tasarım ve Programlama (COMPE 501) Ders Detayları

IDE4DB Veritabanı Geliştirme Platformu Bitirme Projesi Sunumu

Transkript:

Çok Çekirdekli Sistemlerin Yazılım Kalitesi Üzerine Etkileri Effects of MultiCore Systems on Software Quality Tolga, Ovatman Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi, İstanbul ovatman@itu.edu.tr Feza, Buzluca Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi, İstanbul buzluca@itu.edu.tr Özet Çok çekirdekli işlemcilerin ortaya çıkması ile birlikte paralel yazılımlar, yüksek başarımlı hesaplama alanının yanında uygulama yazılımları alanında da kullanılmaya başlanacaktır. Paralel çalışmayı temel alan donanımların günümüz yazılım mühendisliği ilkeleri ve nesneye dayalı programlama gibi kavramlar temel alınarak üretilen yazılımlarla birlikte kullanılması yeni zorluklar ortaya çıkaracak ve yazılım kalitesi ölçütlerinde de farklılaşmaya neden olacaktır. Bu çalışmada donanımda oluşan bu değişimin yazılım dünyası üzerine etkileri ve bu etkiler karşısında yapılması gerekenler, nesneye dayalı yazılımlar çerçevesinde incelenmiş; günümüz yazılımlarının çok çekirdekli platformlara uyarlanması, çok çekirdekli platformlar için yazılım tasarımında dikkat edilmesi gerekenler ve paralel yazılımların kalite ölçütleri üzerine yapılabilecek çalışmalara değinilmiştir. Abstract With the emergence of multicore processors, parallel software is beginning to be used in the domain of application software in addition to high performance computing software. The use of parallel processing hardware with current software engineering techniques and principles, like object oriented programming, will surely produce new challenges in area and change the way we look at quality criterions. In this work, the effects of this change in hardware and possible practices on dealing with the effects are discussed from the object oriented software perspective. Discussions include adaptation of current software to multicore platforms, important points when designing software for multicore systems and possible research on quality criterions of parallel software. başvurulan konulardan biridir. Paralel bilgi işlemeyi sağlamanın en çok kullanılan yolu birden çok işlemciye sahip bilgisayar sistemlerinin kullanılmasıdır. Birkaç yıl öncesine kadar çok işlemcili sistemler yüksek başarımlı hesaplamada kullanılan, birden fazla fiziksel işlemcinin özel donanımlar ve yazılımlar kullanılarak aynı anda işletilmesine dayanırdı. Çok çekirdekli işlemciler olarak da anılan, kırmık düzeyinde çok işlemcili sistemler (Chip level multiprocessors-cmp), tek bir fiziksel kırmık içerisine birden fazla işlemcinin yerleştirilmesiyle oluşturulmuşlardır. Bu tarz işlemcilerde farklı mimariler kullanılmakla birlikte, Şekil 1 de de görüldüğü gibi kendi cep belleğine(cache memory) ve ortak bir cep belleğe sahip iki işlem biriminin bir arada bulunması son yıllarda tercih edilen bir donanım çeşididir. Çok çekirdekli işlemcilerin en basit haliyle gelişmeye başladığı günümüzde çift çekirdekli işlemciler çok görevli işletim sistemlerinde gerektiği performansı sağladıkları için programlama ortamının değişmesine büyük oranda ihtiyaç duyulmadı. Gelecekte çekirdek sayısının artmasıyla çok görevli işletim sistemlerinde dahi performans eksikliği hissedilmeye başlanacaktır. Bunun nedeni kullanıcının hiçbir zaman elde bulunan işlemci sayısı kadar görev üretemeyecek olmasıdır ve bu durumun sonucu olarak işlemcilerin bir kısmı tam performansla kullanılamayacaktır. MİB Çekirdeği ve 1. Düzey cep bellekler MİB Çekirdeği ve 1. Düzey cep bellekler 1. Giriş Paralel bilgi işleme, bilgisayar teknolojisinin kullanılmaya başlandığı ilk yıllardan itibaren gündemde olan ve yüksek başarımlı hesaplamada en sık Veri yolu arayüzü ve 2. Düzey cep belekler

Şekil 1: Tipik bir çift çekirdekli işlemci mimarisi Birçok çekirdekli hesaplama (manycore computing) denilen onlarca çekirdek içeren işlemcilerin kullanıldığı aşamada paralelleştirilebilir programlama öğelerinin günümüzdekinden çok daha etkin biçimde belirlenmesi ve yazılımların yeni platformlara göre tasarlanması gerekmektedir. Microsoft un ManyCore[1] zirvesinde de tartışıldığı üzere bu konuyla ilgili yeterince çalışma yapılmamıştır ve gelecekte önemli sorunlarla karşılaşılması sonucunda programlama sürecinin büyük değişimlere uğraması beklenmektedir. Çok çekirdekli işlemciler kendileriyle birlikte paralel programlamaya yeni modeller getirmemiş, çoğunlukla bu tür işlemcilerde OpenMP ya da MPI gibi bilinen paralel programlama modellerinin kullanılması tavsiye edilmiştir. Çok çekirdekli işlemciler için ortaya atılmış bir programlama modeli bir istisna haricinde henüz literatürde bulunmamaktadır. Ease[2] ismindeki bu programlama modeli, çok çekirdekli sistemlerin ortaya çıkmasından daha önce oluşturulmuş bir modeldir. Bu model, çok çekirdekli işlemciler için tasarlanmış olmaktan ziyade bu ortama uygulanabilir bir modeldir. Görüldüğü üzere donanım dünyasında ortaya çıkan bu değişime yazılım dünyası tarafından henüz tatminkar bir cevap gelmemiştir. Bu nedenle yakın gelecekte yazılım dünyasının donanımdaki bu yeni yönelişe ayak uydurmaya başlaması beklenmektedir. Donanımsal gelişimlerin yazılımı etkilemesi ve bazı yazılım kavramlarının zaman içinde öneminin artması geçmişte eşine rastlanan durumlardır. Örneğin nesneye dayalı ve bileşen tabalı yazılım geliştirme yöntemlerinin önem kazanması, donanım alanında yaşanan gelişmelerle mümkün olmuştur. Programlama sürecinde yaşanacak değişimler daha önceleri ön planda değerlendirilmeyen, yazılımların paralel ortamlardaki kalite ölçütlerinin daha yoğun bir biçimde ele alınmasına neden olacaktır. Günümüzde yaygın biçimde kullanılan nesneye dayalı yazılım mühendisliği prensiplerinin paralel ortamlar için gözden geçirilmesi ve geçerliliklerinin sınanması gerekmektedir. Ayrıca günümüzde kullanılan kalite değerlendirme ölçütlerinin de paralel çalışmayla olan ilişkisi önem kazanacak konulardandır. Bu çalışmada, yukarıda sözü edilen yazılım dünyasında beklenen bu değişimin yazılım kalitesi üzerine etkileri tartışılacak ve bu etkileri en etkin biçimde ele alabilmek için yapılması gereken çalışmalar üzerine fikir yürütülecektir. Çalışmanın bölümleri şu şekilde özetlenebilir. İlk bölümde çok çekirdekli işlemci teknolojisiyle ilgili kısa bir bilgi verilerek bu teknolojinin gelecekte ortaya çıkartacağı problemler hakkında kısaca görüş belirtilmiştir. İkinci bölümde paralel sistemlerde öne çıkacak yazılım kalitesi kıstasları sıralanacaktır. Üçüncü bölüm, paralel yazılımlarda kaliteyi arttırabilmek için yapılması gereken çalışmaları içermektedir. Sonuç bölümünde ise çalışma boyunca yürütülen fikirler üzerine çok çekirdekli sistemler için üretilecek yazılımların kalitesini korumak ve sağlamak amacıyla yapılacak araştırma çalışmaları için bir yol haritası çizilecektir. 2. Çok çekirdekli Sistemlerde Nesneye Dayalı Yazılım Kalitesi Yazılım kalitesi, kavram olarak, terimin kullanıldığı ortamdan ortama değişen farklı tanımlara sahiptir. Bunlar arasında en üretken (generic) yapılmış tanımlardan biri Gerald Weinberg in Kalite bir kişi için katma değer olarak görülebilecek her şeydir tanımıdır[3]. Bu tanım kaliteyi değerlendireceklerin ve bu kişilerin kullanacağı değerlerin belirlenmesi gerekliliğini doğurur. Çok çekirdekli sistemlerin yazılımların üzerinde çalışacağı platform olarak kullanılmaya başlanması birçok yeni değer ortaya çıkartacağı gibi eskiden değer olarak görülen bazı kavramların da değişimine neden olacaktır. ISO 9126 standardına göre[4] 6 temel kalite karakteristiği bulunur: Fonksiyonellik Güvenilirlik Kullanılırlık Verimlilik Bakıma elverişlilik (Maintainability) Taşınırlık (Portability) Çok çekirdekli işlemcilerden önce de paralel yazılımların kalitesi üzerine çalışmalar yapılıyordu. Çok çekirdekli işlemcilerin son kullanıcılar tarafından satın alınabilir hale gelmesiyle önceleri daha çok bilimsel hesaplamaya yönelik, modern yazılım mühendisliği tekniklerini çok fazla kullanmayan çalışmalar, çok çekirdekli platformlar için üretilen uygulama yazılımları için fazla anlam taşımamaktadır. Genel kullanım yazılımlar için paralel yazılım geliştirmenin gelişmesiyle birlikte nesneye dayalı yazılım geliştirme için de kalite kavramının değişeceği açıktır. Bu iki dünyanın birleşmesiyle birlikte güvenilirlik, verimlilik, bakıma elverişlilik ve taşınırlık kalite karakteristikleri öne çıkacaktır. Nesneye dayalı yazılımların paralel donanımlarda kullanımının artmasından en çok etkilenecek kalite karakteristiği güvenilirliktir. Bunun nedeni paralellikle birlikte yazılımların çalışma zamanında önem kazanan

zaman alanının ortaya çıkardığı kararsızlık(nondeterminism) durumlarıdır. Yazılımın çalışırken göstereceği alternatif çalışma biçimleri zaman içinde yazılım modüllerin çalıştırılma sıralarına ve eşgüdümlerine bağımlı hale gelecektir. Bunun sonucu olarak yazılımın doğru olarak sonlandığı çalışma zamanı alternatifleri, zaman alanının sürece eklenmesiyle birlikte, geçmişe oranla çok daha karmaşık hale gelecektir. Güvenilirlik, sağlanması oldukça güçleşen bir kalite karakteristiği olmakla birlikte verimlilik paralelleştirme kavramının ana amacı olarak önemini arttıracaktır. Amdahl a göre bütün programlar paralellik kavramını aynı oranda kullanmazlar. Bu noktada paralelleştirmenin amacı eklenen işlem gücüne karşılık en yüksek verimi alabilmektir. Bu noktada yazılım tasarımı sürecinde yazılımın ne kadar parçalandığı ve kullanılan tasarım ilkelerinin paralelliğe etkisinin bilinmesi önem kazanmaktadır. Verimlilik ve güvenilirlik daha çok çalışma zamanı(dolayısıyla kullanıcıya dönük) kalite karakterleri olmakla birlikte, bakıma elverişlilik ve taşınırlık daha çok yazılım geliştirme sürecine yönelik karakteristiklerindendir. Yazılımın geliştirilmesi esnasında zaten yeterince zor kavranan paralelleştirme kavramının bakım sürecinde yeni sorunlar doğurması kaçınılmazdır. Paralelleştirme açısından taşınırlık kavramı çok boyutlu bir kalite karakteristiğidir. Bir yandan taşınabilirlik eski yazılımların etkinliğini koruyacak bir biçimde çok çekirdekli platformlara aktarılabilmesi anlamına gelirken diğer yandan paralel yazılımların farklı işlemci mimarilerinden ve programlama modellerinden bağımsız olarak üretilebilmesi durumu söz konusudur. Nesneye dayalı yazılımların paralel sistemlerde kullanılması konusundaki en eski çabalardan biri paralel yazılım tasarımında kullanılabilecek nesneye dayalı modelleme teknikleri konusundadır. Parse projesi dâhilinde I. Gorton işlem çizgelerine(process graphs) dayalı bir yöntem önermişlerdir[5]. Bu çalışmada ayrıca zamanlı iletişim yollarının ve tampon(buffer) belleklerin sistemlerde kullanımını göstermekte elle çizilen basit çizenekler kullanılmıştır. Bu çalışmadan bir yıl sonra UML geliştirilmeye başlamış ve nesneye dayalı yazılım modellemenin resmi olmayan standardı haline gelmiştir. Bu noktada işlem çizgelerine gerek kalmamış ve benzer çalışmalar UML ile yapılmaya başlanmıştır. Örneğin, Yücesan,E. nin çalışmasında, dağıtılmış ve paralel uygulamalarda performans modellemesine olanak verecek UML eklentileri tasarlanmıştır[6]. Sadece modelleme alanında çalışmalar yapılmamış MPI nın nesneye dayalı paralel ortamlara uygulanması[7] ve yeni programlama modellerin oluşturulması[8] konusunda çalışmalar yapılmıştır. Baudel in çalışmasında Nesneye Dayalı bir SPMD(tek işlem-çok veri) modeli ProActive nesneleri kullanılarak önerilmiştir. Aktif nesneler[9], nesneye dayalı paralel programlamanın en iyi tanımlanmış ve etkileyici örneklerinden biridir. Bu nesnelerde metotların çalıştırılması metot çağrısından ayrılmış, böylece eş zamanlı çalışma yetenekleri geliştirilmiş ve nesnelere erişimde eşgüdüm basitleştirilmiştir. Bu daha çok nesneye dayalı paralel yazılımlarda kullanılabilecek bir tasarım kalıbı olarak görülebilir. Bunun gibi birçok kalıp[10] zaman içinde ortaya çıkmıştır, fakat özellikle paylaşılan bellek kullanan çok çekirdekli işlemcili platformlara özel tasarım kalıplarının oluşturulması gerekmektedir. Nesneye dayalı yazılım mühendisliği ile paralel sistemlerin çok çekirdekli işlemciler perspektifinde bir araya getirilmesinin gerekliliği açıktır. Unutulmaması gereken, nesneye dayalı yazılım geliştirme gibi birçok kavramın, kullanımlarının yaygınlaşmasından çok önceleri bilindiği ve ortaya çıkan donanımsal gelişmeler sonucunda yaygınlaşmasının yaşandığıdır. Bu nedenle bir başka donanımsal evrimin yaşandığı günümüzde elimizde bulunan yazılım kalite ölçütlerinin yeni platformlardaki özelliklerinin incelenmesinde ve gerekli düzenlemelerin yapılmasında yarar vardır. 3. Paralel Sistemlerde Nesneye Dayalı Yazılım Kalitesinin Arttırılması Çok çekirdekli işlemcilerin yaygınlaşmasının ardından yazılıma yönelik üzerinde iyileştirme yapılabilecek alanlar aşağıdaki gibi sıralanabilir: Derleyici ve aracı katman Programlama Dilleri ve Modelleme Aracı yazılımlar ve yazılım kütüphaneleri Yardımcı uygulamalar Bu alanlardan ara katmanlar ve derleyiciler ile yazılım modelleri öne çıkmaktadır. Bu iki alanda çalışılması durumunda çok çekirdekli sistemlerin etkileri daha etkin biçimde ele alınacaktır. Üstelik tasarım alanında yapılacak iyileştirmeler yazılım üretim sürecinde daha erken aşamalarda gerçekleştirilmiş olacaktır. Ara katman ve derleyiciler üzerine yapılacak iyileştirmeler ise yazılım üreticisinden bağımsızlık sağlayacaktır. Bu iki alanın yazılımların çok çekirdekli işlemcilere uyarlanması konusunda en etkili ve önemli rollere sahip olacakları açıktır. Öte yandan yazılımın tasarlanması ve üretilmesi aşamaları birbiriyle iç içedir ve birinde

yapılan değişiklik diğerini de tetikleyecektir. Bu nedenle iki konuda yapılan çalışmaların birbiriyle eş zamanlı yürümesi daha verimli olacaktır. Yapılabilecek iyileştirmeler yazılım geliştirici tarafından gerçekleştirilebileceği gibi işletim sistemi, sanal makineler gibi ara katman yazılımları tarafından otomatik olarak da gerçekleştirilebilir. Yazılımcının paralelleştirme kavramıyla gereğinden fazla ilgilenmesi istenmeyen bir durum olsa da gerektiği noktalarda yazılım modeli ve/veya yazılımın kendisi üzerinde yapacağı ek açıklama (annotation)lar ile derleyiciye ve çalışma zamanına yönelik yönlendirmeler yapabilir. Nesneye dayalı yazılımların tasarım aşamasının ardından oluşturduğu karakteristiğin belirlenmesi ile yazılım tasarımcılarının çok çekirdekli sistemlerde koşacak yazılımların tasarımı konusunda, rehberliğinde hareket edebilecekleri bir disiplin oluşturmaları sağlanabilir. Diğer taraftan gerçekleştirilmesi yeğlenecek olan, gerek derleyici gerek ara katmanların derleme ve çalışma zamanında yapacakları tasarım ve yazılım metrikleri ölçümleriyle paralel çalışma hakkında fikir edinmesidir. Yapılan iyileştirmeler paralelleştiren derleyicilerin gerçekleştirdiği sıradüzensel yazılımların paralel hale dönüştürülme işleminden ziyade günümüzde iplik bazında yapılan zamanlama planlarının nesne bazında gerçekleştirilmesini sağlamaktır. Yazılım dünyası paralel platforma kaydıkça yaşayacağı sorunlar aslında çok çekirdekli sistemlerden önce ortaya çıkmaya başlamışlardır. Örneğin yazılım dünyasında büyük etki yaratan Gamma ve arkadaşlarının tasarım kalıpları[12] isimli çalışmasında bulunan tekil sınıf (Singleton) kalıbında paralel erişimle ilgili bir sorunun ortaya çıktığı görülmüştür. Şekil 2 de ortaya çıktığı ilk hali görülen Java dilinde yazılmış tasarım kalıbı, yazılımlarda kullanılan bir sınıftan tek bir nesne üretilebilmesi ve nesneye erişmek isteyen istemcilere getinstance() metodu ile bu tek sınıfın temin edilmesi prensibi ile çalışmaktadır. Fakat zaman içinde tekil nesneye paralel erişim yapıldığında getinstance() metodunun içerisindeki if koşulunun sınanması esnasında çalışmasının kesilmesi durumunda tekil nesnenin çalışması etkilenecek ve günümüz yazılımlarında sıkça kullanılan bu kalıp hatalı çalışarak yazılım kalitesinin düşmesine sebebiyet verecektir. Tekil nesne kalıbındaki bu problem için zaman içinde çözüm üretilmiş ve sorunlu metodun eş zamanlı erişime uygun şekilde kritik bölge olarak tanımlanmasıyla sorunun ortadan kalktığı görülmüştür. Bu çözüm kalıbın içine uyarlanmış ve tasarım kalıbı bu yeni şekliyle kullanılmaya başlanmıştır. class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getinstance() { if (instance == null) instance = new Singleton(); return instance; } } Şekil 2: Tekil nesne örüntüsünü gerçekleyen bir Java programı Yukarıda açıklanan problemden yola çıkarak yapılacak ana çalışma alanı olarak günümüz yazılımlarının paralel ortamlara aktarılmasıyla ortaya çıkabilecek sorunlar, yazılım kalitesi bağlamında incelenmeli, sorunların günümüzde kullanılan yazılım metrikleriyle ölçülebilirliği ve yazılım kalitesine etkileri biçimsel olarak ölçülmelidir. Edinilen kazanımlar doğrultusunda paralel platformlar için sıfırdan tasarlanan yazılımlarda kalite unsurları gözden geçirilmeli ve yeni kalite unsurlarının bulunması yönünde çalışmalar yapılmalıdır. 3.1. Nesneye Dayalı Yazılımların Çok Çekirdekli Sistemlere Taşınması Günümüze kadar yazılımların paralel dünyaya taşınması yolunda yapılan çalışmalar paralelleştiren derleyiciler (paralellizing compiler) tarafından yapılıyordu. Nesneye dayalı olmayan yazılımlar için pek başarılı olmadığı bilinen bu tür yazılımların genelde yaptığı iyileştirmeler loop unrolling denilen döngülerin bölünüp parçalanarak farklı işlemciler tarafından yürütülmesi gibi iyileştirmelerin uygulanmasını öngörüyordu. Nesneye dayalı yazılımlarda ise bu tür iyileştirmeler, yazılımların üretilmesindeki düşünce tarzının ve dolayısıyla kullanılan yapısallığın farklı olması nedeniyle etkinliğini yitirir. Önceki bölümlerde saydığımız nedenlerden dolayı zaman içerisinde paralel sanal makineler gibi paralel çalışmaya dayanan ara katman yazılımlarının yaygınlaşacağı öngörülmektedir. Bu noktada, kullanılan ara katman yazılımlarının nesneye dayalı yazılımları çok çekirdekli sistemlerde çalıştırırken önem verecekleri noktaların belirlenmesi üzerinde durulması gerekir. Dağıtık sistemler için bilinen nesne dağıtımı problemi[11], çok çekirdekli sistemlerdeki çekirdek sayısı arttıkça yeniden karşımıza çıkacaktır. Paylaşımlı bellek kullanımı ve iletişim süresinin çok küçük olması gibi farklar yapılan çalışmaların gözden geçirilmesini gerektirmektedir. Aynı zamanda önceki bölümde belirtildiği gibi iplik düzeyi paralellik(threadlevel parallelism) zamanla etkinliğini yitireceğinden

nesne düzeyi paralellik(object-level parallelism) konusu öne çıkacaktır. Mevcut tasarım kalıpları[12] temel alınarak günümüzde kullanılan yazılımların taşıdıkları karakteristiklerin belirlenerek, bu karakteristiklerin paralel ortamlardaki davranışı üzerine yapılacak çalışmalar bu konuda anlam kazanacaktır. Bu amaçla günümüz yazılımlarının ortak karakteristiği olarak görülebilecek tasarım kalıplarının, paralel ortamlardaki davranışları incelenmesi ve tasarım kalıplarındaki sınıfların taşıdıkları sorumluluklara göre gruplandırılıp bu grupların paralel çalışmadaki davranışlarının incelenmesi gerekmektedir. Buradan yola çıkarak günümüzde kullanılan yazılımları oluşturan bileşenlerin görevleri ve sağladıkları temel servisler incelenip, ara katman tasarımcılarının paralel ortamlarda yazılım karakteristiğine uygun iyileştirmeler yapmaları sağlanabilir. Örneğin yukarıda da anılan tekil sınıflar gibi, yazılımlarda bulunan aracı, kontrolcü, önyüz nesneleri gibi farklı yapıların, ara katman tarafından eş zamanlı güdüm konusunda nasıl yönetilmesi ve nesne dağıtımlarının nasıl yapılması gerektiğine yönelik çalışmalar yapılması anlamlı olacaktır. 3.2. Çok Çekirdekli Platformlarda Koşan Nesneye Dayalı Yazılımların Kalite Kriterleri Bölüm 2.1 deki çalışmalar sonucu edinilen genel bilginin biçimsel biçimde ölçülmesine dayalı çalışmalar varılan sonuçların bilimsel tabana oturtulması açısından önemlidir. Bu bağlamda yazılım tasarımlarında günümüzde kullanılan yazılım metriklerinin[13] çok çekirdekli platformlardaki etkilerinin sınanması gerçekleştirilmelidir. Bu metriklerin çok çekirdekli platformlardaki yazılım kalitesi üzerine yapılacak çalışmalarla birlikte Bölüm 2.1 de belirlenen noktaların metriklerle olan ilgisi belirlenerek günümüz yazılım metriklerinin yeterli ve yetersiz kaldığı noktalar ortaya çıkartılmalıdır. Bu sayede yazılımın tasarım safhasında yapılan biçimsel ölçümlerle, çok çekirdekli çalışma ortamında dikkat edilmesi gereken noktalar ortaya çıkartılarak bu ölçütlerin nesne dağılımına ve paralelleştirilmeye etkileri incelenebilir. Örneğin günümüzde çokça kullanılan bağımlılık (coupling) ölçütlerinin nesne dağılımlarında büyük etkisinin olacağı öngörülebilir. Birbirine daha bağımlı sınıfların nesnelerinin aynı işlemcide çalıştırılarak ileti trafiğinin düşürülmesi yapılacak iyileştirmelerden biri olabilir. Bunun gibi, yazılım içerisinde birçok sınıfla bağımlılığı bulunan denetçi gibi nesnelerin metotlarına ayrılarak ya da kopyaları çıkartılarak işlemcilerde dağıtılmış bir şekilde çalışması uygun olabilir. Bu aşamada yapılacak bir başka çalışma ise var olan yetersiz yazılım metriklerinin paralel yazılımlara uyarlanmasıdır. Örneğin döngüsel karmaşıklık[14] (cyclomatic complexity) metriği buyruksal yazılımlar üzerinde kullanılan etkin bir metriktir fakat paralel programlama için gözden geçirilmesi gerekmektedir. Literatürde döngüsel karmaşıklığın nesneye dayalı yazılımlar için gözden geçirilmesi gibi çalışmalar da bulunmaktadır[15]. Özetle bu tarz çalışmalarla Bölüm 2.1 de belirlenen genel ilkelerin yazılım metrikleriyle biçimsel olarak ifade edilmesi gerçekleştirilebilir. 3.3. Paralel Nesneye Dayalı Yazılımların Tasarımlarının Geliştirilmesi Olası bir başka tür çalışma ise var olan yazılımlardan çok paralel ortamlar için yeni baştan geliştirilen yazılımların kalitesi üzerine yapılabilir. Bu noktada ilk iki aşamada edinilen bilgiler ışığında yazılımın daha tasarlanma aşamasında çok işlemcili platforma uygun bir şekilde oluşturulması için başta UML olmak üzere yazılım tasarım araçlarına yapılması gereken eklentiler ve kullanılabilecek yeni metriklerin oluşturulması üzerine çalışmalar yürütülecektir. Paralel tasarımlara özgü yapıların UML ye uyarlanması yönünde daha önceden yapılan çalışmalar vardır fakat bunlar genellikte stereotype lar gibi var olan UML yapıları kullanılarak paralel ortamların ne derece modellenebileceği üzerinedir. Son safhada yapılması düşünülen çalışma yazılım modelinin oluşturulması sırasında tasarımcının öngördüğü çok çekirdekli çalışma ortamında önemli rol oynayacak yapıların belirtilebilmesi üzerinedir. Bu tür yapılar örneğin sınıf çizeneklerinde nesnelerinin özellikle dağıtılması istenen ya da özellikle dağıtılmadan tek bir kaynakta kalması istenen sınıfların belirtilmesi olabilir. Diğer yandan iletişim çizeneklerinde paralel çalışabilecek metot çağrılarının ve senkronize olması gereken çağrıların belirtilmesini sağlayacak yapıların oluşturulması da bir başka örnektir. Yazılım tasarım alanına zaman eklendiğinde oluşabilecek sonsuz farklı işletim seçeneğinin indirgenmesi ve modellerin biçimsel modelleme ile güvenilirliğinin arttırılması da oluşturulacak yeni model öğelerinde bulundurulması tercih edilebilecek seçeneklerdendir. Çalışma sonunda Bölüm 2.1 de yapılan, yazılımın çalışma zamanına yönelik iyileştirmeler ve Bölüm 2.2 de yapılan bu iyileştirmeleri tetikleyecek tasarım özelliklerinin metrikler yardımıyla algılanması yardımıyla saptanan tasarım özelliklerinin modellenebilmesi için gerekli yapılar geliştirilebilir. 4. Sonuç Donanım dünyasında yaşanan gelişmelerle birlikte yazılım dünyası ile donanım dünyası arasında bir farkın oluşmaya başladığı görülmektedir. Yazılım dünyasının,

yeni bir mimari ile geliştirilmeye başlayan donanımları en etkin biçimde kullanması için yazılımlarda ve yazılımları süren ara katman üzerinde bir takım değişikliklerin yapılması gerekmektedir. Donanımsal değişikliklerle birlikte ortaya çıkan paralelleşme kavramı, nesneye dayalı yazılımların tasarlanma, geliştirilme ve çalışma zamanları üzerinde etkisini gösterecektir. Bu etkiler yazılım dünyasının, yazılım kalitesini belirleme ölçütleri üzerinde değişiklikler yaratacağı gibi yeni kalite ölçütlerinin oluşmasında da öncü olacaktır. Yapılan incelemelerin sonucunda yazılımın yaşam süreci içinde çeşitli noktalarda kalitenin arttırılmasına yönelik yapılabilecek çeşitli iyileştirmeler üzerine fikir yürütülmüş ve yapılabilecek çalışmalar ortaya konmuştur. Günümüzde kullanılan yazılımların çok çekirdekli sistemler üzerinde davranışının ve günümüzde kullanılan kalite ölçütlerinin bu tip sistemlerdeki belirleyiciliğinin araştırılması çok çekirdekli sistemlerde kullanılacak yazılımların kaliteleri üzerine yapılacak çalışmalarda atılacak ilk adımlardan olacaktır. Bu sayede çok çekirdekli sistemlere geçiş aşamasında, günümüz yazılımlarının karakteristiği ve yazılım ölçütlerinin eksik ve yetersiz kaldığı alanlar belirlenebilir. Bu da sıfırdan üretilen yazılımlar için oluşturulacak nesneye dayalı paralel yazılım geliştirme standartlarının ve disiplinin kalite odaklı bir biçimde oluşturulmasını mümkün kılacaktır. Concurrent Programming. Proc.Pattern Languages of Programs. [10] Mattson, Timothy G., Sanders, Beverly A. and Massingill, Berna L. Patterns for Parallel Programming. s.l. : Addison-Wesley Professional. [11] Caromel, D. and Henrio, Ludovic., 2004. A Theory of Distributed Objects. s.l. : Springer. [12] Gamma, Erich, et al., 1994. Design Patterns: Elements of Reusable Object-Oriented Software. s.l. : Addison- Wesley Professional. [13] Chidamber, S. and Kemerer, C., 1994. A Metrics Suite for Object Oriented Design. IEEE Transactions on Software Engineering, Vol. 20, pp. 476-493. [14] McCabe, Thomas J. 4, December 1976. A Complexity Metric. IEEE Transactions on Software Engineering, Vols. SE-2. [15] Swapan Bhattacharya, Ananya Kanjilal: Code Based Analysis for Object-Oriented Systems. J. Comput. Sci. Technol. 21(6): 965-972 (2006) 5. Kaynaklar [1] ManyCore Computing Wokshop. [Online] http://science.officeisp.net/manycorecomputingworksho p07/default.aspx. [2] Zenith, S. E., 1990. Programming in Ease: Semiotic Definition of the language. New Haven, Connecticut : Yale University. [3] Weinberg, Gerald M., 1991. Quality Software Management: Systems Thinking. s.l. : Dorset House Publishing Company. [4] ISO STANDARTLARI KATALOĞU. [Çevrim içi] http://www.iso.org/iso/iso_catalogue.htm. [5] Gorton, I., Gray, J. P. and Jelly, I. 2, 1995. Object-based modeling of parallel programs. IEEE Parallel & Distributed Technology: Systems & Applications, Vol. 3, pp. 52-63. [6] Yücesan, E., Pllana, S. and Fahringer, T. December 8-11, 2002. UML Based Modeling of Performance Oriented Parallel and Distributed Applications. Proceedings of the 2002 Winter Simulation Conference. [7] Carpenter, B., et al. 11, 2000. MPJ: MPI-like message passing for Java. Concurrency: Practice and Experience, Vol. 12, pp. 1019-1038. [8] Mintchev, S. and Getov, V. 1997. Towards portable message passing in Java: Binding MPI. Recent Advances in PVM and MPI, ser. LNCS. 1332. [9] Lavender, R. Greg and Schmidt, Douglas C. 1995. Active Object: an Object Behavioral Pattern for