Bir arkadaştan "MPI konusunda ne gibi araştırmalar yapabilirim" gibi bir soru geldi. MPI ve Grid hesaplama konusunda günlük sayfamda yazılar yazarak bilgimi başkalarına aktarmaya çalışıyorum. Bu konularda çalışmak isteyen Türklere de aynı zamanda biraz motivasyon vermek için aslında bu, hani daha önce yapanlar da varmış dedirtmek için. Ve sorusu olana bilgim dahilinde tabii ki cevap vermek isterim.

Grid hesaplama ve MPI konusunda aslında oldukça fazla araştırma konusu var bana göre. Örneğin grid konusunda araştırma yapılacaksa Java ile çeşitli servisler yazılabilir. Gridleri yönetmek için kullanılan çeşitli yardımcı programlara, araçlara bakılarak bunlardan fikir edinilebilir. Örneğin vikiden globus toolkit makalesi başlangıç olabilir. Bunlar çok büyük araçlar, özel bir konu seçilip araştırma yapılabilir. Benim aklıma gelen konu mesela "iş ayarlama (scheduling) nasıl geliştirilebilir?". Buna benzer bir alt alanda araştırma yapılabilir.

MPI konusu ise yine çok geniş. MPI ve OpenMP gibi araçlardan hangilerini seçeceksin? MPI seçeceksen hangi sürümünü seçeceksin (OpenMPI, mvapich vs.)? Hangi dilde yazacaksın, bir derleyici sargısı (wrapper) kullanacak mısın? Bu seni sınırlandırır mı? Veya sen kendin mi benzer bir MPI kütüphanesi yazacaksan? MPI senin için bir araçsa bunu ne için kullanacaksın?

Eğer bir MPI kütüphanesi yazmayacaksan ve MPI senin için sadece bir araç olacaksa, bunu ne için kullanacaksın? Bu soru diğer soruların cevaplarını da yönlendirecek aslında. Çalışmak istediğin alanda bir problem bul, bunu MPI ile çözmeye çalışabilirsin. Algoritmayı paralel hale sokman gerekebilir. Veya yeni bir algoritma geliştirmen gerekebilir.

Ben veri madenciliği ile ilgileniyordum, bu yüzden bu alanda bir problem seçtim (sık nesne kümeleri madenciliği) ve bu alanda ne yapabileceğimi araştırdım. Sonra iyi bir algoritma dikkatimi çekti (CLOSET+) ve bunu nasıl paralel bir şekilde MPI ile çalıştırırım diye düşündüm. Algoritmayı değiştirdim ve MPI ile uygulamayı yazdım. Bundan sonra performans testleri kaldı ve başka çeşitli iyileştirmeler.

Yani genel olarak önereceklerim: Hangi alanda çalışmak istediğinize karar verin. Bu herhangi bir Bilgisayar Bilimleri alanındaki bir problemi paralel çözüm uzayına taşımak olabilir veya direk olarak MPI kütüphanesi geliştirmek, bunları servis olarak açmak vs. de olabilir. Sonra bu seçtiğiniz alanla ilgili olarak tüm gelişmeleri takip edin. Bu konuda benim takip ettiğim metod en eski makalelerden başlayarak en güncel makalelelere kadar okumak. Böylece büyük resmi görebilirsiniz (big picture - kelime kelime çeviri oldu, özür dilerim bazen ingilizce düşünüyorum). Ve böylece yeni çözümler için aklınıza fikirler gelebilir. Bundan sonra yapmanız gereken güncel çözümlere yeni neler getirebileceğinizi düşünmek olacak. Bol bol araştırın, problemi farklı bilimlerdeki çözüm uzaylarına yansıtın (özellikle matematikten ağaçlar, çizgeler, çeşitli geometrik 3 boyutlu şekiller) ve daha rahat bir çözüm bulun. Genel olarak çalışmak istediğiniz alandaki en iyi konferansları takip edin, bunlardan çıkan makaleleri okuyun. Alanınızdaki en iyi hocaları, okulları, konferansları takip edin. Siz takip ettikten sonra bence geliştirmek isteyeceğiniz bir problem ortaya mutlaka çıkacaktır.

Bundan sonrası motivasyon işi, benim kötü olduğum bir alan. O yüzden sonrası için kolay gelsin.

Bonus: Türkçe Yüksek Başarımlı Hesaplama Konferanslarından biri Nisan'da ODTÜ'de olacak. Detaylar için BAŞARIM 09 anasayfasına bakabilirsiniz.

Bonus2: Benim de BAŞARIM 09'a kabul edilen bir makalem var. Bunu burada yayınlayacağım, birkaç hafta içinde. BAŞARIM 09'da sunumda yapma planlarım var (eğitim odaklı bir sunum olacak, debugging konusunda olabilir), buna da beklerim.