26 Mart 2010

Hayali bir robot tekboynuz tarafından öldürüldüm

@Madness oynuyorum bu aralar. Oyun çok basit bir Rogue klonu. Diğer klonlardan ayıran farkı ise karakterimiz gittikçe delirmesi. Delirdikçe etrafı rengarenk görmeye, daha sonra da gerçek düşmanların yanı sıra halüsinasyonlarla başa çıkmaya çalışıyoruz, ve çoğunlukla da ölüyoruz. Son oyunumun raporu şurada.
Not:
[Game over: killed by imaginary robot unicorn. Press ENTER]

14 Mart 2010

Bilimsel yazılım performans karşılaştırması

Bir çok mühendis ya da mühendislik öğrencisi(özellikle elektrik ve makina) Matlab'dan haberdardır. Biraz daha iligili olanlarsa alternatifleri olduğunu da bilir.
Bu "bilimsel ve sayısal" analiz ve programlama araçları, doğrudan yorumlanan kaynak kodu çalıştırır, ama bu yavaş dilin arkasında zengin ve güçlü bir "motor" bulunur genellikle. Mümkün olan her zaman dahili fonksiyonların kullanılması ve özellikle döngülerden kaçınılması tavsiye edilir. Bense bu motorların ne kadar güçlü olduğunu görmek için ufak bir karşılaştırma yapayım dedim. Bol işlemci kasan, aynı zamanda optimizasyonlara açık bir işlem olan 2 boyutlu Hızlı Fourier Dönüşümü'nü hangisinin daha hızlı yapacağını görmek için bir deney yaptım.

Deneyleri yaptığım makinenin ayrıntıları şöyle
İşlemci: Intel(R) Core(TM)2 Duo CPU     E8400  @ 3.00GHz
Bellek: 3768MB
İşletim sistemi: 2.6.31-19-generic-pae #56-Ubuntu SMP Thu Jan 28 02:29:51 UTC 2010 i686 GNU/Linux

Deneyde Matlab ve Octave için kullandığım kod: http://gist.github.com/331446
Python(Numpy) için kullandığım kod(Kaan Akşit'e teşekkürler): http://gist.github.com/331442
Bu da Scilab testi için kullandığım kod*: http://gist.github.com/331451

Hiç uzatmadan test sonuçlarına geçelim:
Matlab 7.5.0(r2007b): 0.265 s
Numpy (python 2.6.4): 2.06 s
Octave(3.0.5, qtoctave içinde) : 0.230 s
Scilab (5.1.1): 0.404 s

Açıkçası Octave'ın Matlab'ı geçmesini beklemiyordum, şahane iş çıkarmışlar. Octave ve Scilab'ın benzer sonuçlarla Matlab'ı az geriden takip etmelerini bekliyordum. Numpy ise biraz hayal kırıklığına uğrattı. Dönüşüm iki boyutlu olmasaydı belki daha iyi bir performans gösterirdi.

Not: Bu test sonuçları sadece 1024x1024'lük rasgele bir matrisin 8 defa 2 boyutlu FFT'sinin alınma süresini gösterir, söz konusu yazılımların genel performanslarını göstermez.

*: Scilab kodu, Scilab'ın "Import Matlab File" komutu kullanılarak Matlab/Octave kodunun otomatik olarak dönüştürülmesiyle elde edilmiştir. 

10 Mart 2010

Matlab'da tek boyutlu adreslemek

Bir resim işleme işi için gerekli katsayıları üreten yazılım malesef Matlab pakedi olarak mevcut. Yalnız iki boyutlu matrisleri tek boyutlu adreslerken, hücreleri soldan sağa değil yukarıdan aşağı saydığı için çıktı bir abuk oldu, yeniden düzenleyen ikinci bir aşama koymak zorunda kaldım. Bu tuhaf adresleme biçimini görmek için şuna bakabilirisniz:

>> A=[ 1 2 3; 4 5 6]
A =
     1     2     3
     4     5     6
>> for n=1:6
A(n)
end
ans =
     1
ans =
     4
ans =
     2
ans =
     5
ans =
     3
ans =
     6