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. 

Hiç yorum yok:

Yorum Gönder