PDA

Tam Sürümünü Görmek İçin : gcc kullanımı ve derleme eniyileştirme parametreleri


Arkantos
01/07/2005, 22:43
Arkadaşlar çok uzun zamandır kafama takılan bir soru var.GCC ile derleme ve eniyileştirme parametrelerini büyük programları derlemek için (örneğin kde 3.4.1) nasıl ayarlamalıyız ? CHOST, CFLAGS ve LFLAGS nedir? Ne işe yarar?

CFLAGS="-O3 -mtune=pentium4 -fomit-frame-pointer -mfpmath=sse -msse -mmmx"
CHOST="i686-pc-linux-gnu"
CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j2"

Örneğin ben PIV bir makine kullanıyorum ve derleme seçeneklerini bu şekilde belirterek programları kaynak kodundan kuran bir dağıtım kullanıyorum.

Bunlardan bazıları zaten isminden anlaşılıyor. -march (machine architecture) herhalde 'makine mimarisi' . Pentium IV'lerin i686 olarak bilindiğini bilsem de bu i386, i486 ve i686 neye göre dediğimizi hala anlamamışımdır. Sanırım -O1 ile hiç eniyileştirme yapılmıyor değil mi ? Peki buradaki diğer derleyici seçeneklerinin ne işe yaradığını en azından hıza etkisi olup olmadığını bilen var mı? Örneğin bu çocuk -O3 seçeneği ile derleme süresi uzasa da programların çalışma hızı artar demiş. Başka birisi de programları -O3 seçeneği ile derlemek programın çalıştırılabilir dosyasının boyutunu arttırır ve masaüstü programları için -O2 seçeneği daha iyi bir seçenektir (Programlar daha hızlı yüklenir) demiş.

Siz ne dersiniz ?!

Peki burada kullanılmayan:
-pipe -ftracer -ffast-math -momit-leaf-frame-pointers

ne işe yarıyor. Bunları da bilmediğim için kullanmadım? Bunları da kullanmalımıyım ?

Son olarak -march ile -mtune'un bir farkı var mı? Burada bir de -march=pentium4 demelimiydim?

Unutmadan bu arada kullandığım derleyici sürümü gcc 3.4.4

Yanıtlar için şimdiden teşekkürler ..


acehreli
02/07/2005, 00:03
Aslinda o buyuk harflerle yazilmis olanlar make degiskenleri; gcc ile bir ilgileri yok. make daha sonradan onlari gcc'yi calistirdigi satira koyacak. Yani evet, sonucta onlarin degerleri gcc satirinda kullanilacaklar ama bu is make tarafindan yapilacak.

Ben gcc'nin belgelerine Linux altinda emacs icinden C-H,i ile Info'yu baslatarak erisiyorum. Cikan sayfada gcc maddesine gidiyorum.

Belgeler aslinda nette de var. 3.4.4'un komut satiri secenekleri surada:

http://gcc.gnu.org/onlinedocs/gcc-3.4.4/gcc/Option-Index.html#Option-Index

Orada da anlatildigi gibi, -O1 secenegi de eniyilestirme yapar. Eniyilestirme yaptirmayan secenek -O0'dir.

Benim onceden calistigim yerlerde -O2 kullanilmisti. Herhalde ondan fazlasini kullanmanin fazla yarar getirmeyecegi gorulmustu. Yanlis bilmiyorsam, bazi eniyilestirme secenekleri digerleri kadar denenmezler, onun icin hatali program olusmasina neden olabilirler. Sanirim -O2 bu yuzden de iyi bir secenektir.

Bundan daha fazla bilgim yok; fazlasinin o kadar da onemli olduguna inanmiyorum :) Ben gelen programlarin make dosyalarinda ne varsa onlari kullaniyorum.

Tabii denemekten zarar gelmez :)

Ali

Arkantos
02/07/2005, 00:54
Teşekkürler .. Zaten Gentoo'nun dökümanlarında da maksimum en iyileştirme seçeneği olarak -O3 tavsiye edilmiş. Zaten varsayılan ayarlarla da -O2 seçeneği geliyor.

O zaman anladığım kadarıyla siz de büyük çoğunluk gibi bu tür 'trick' leri kullanmanın performansa pek etkisi olmayacağını düşünüyorsunuz :)

Euclides
02/07/2005, 01:12
mesela "mfpmath=sse -msse -mmmx"" bu komutlar C yada C++ ile yazılmış bir programı hiç etkilemez. Ancak inline assembly'da SIMD kullanılmasına izin verir. (sse1 destekli)

hatırladığım kadarıyla p3 ile p4 arasında sse2 dışında bir opcode farklı yoktu (belki yanlış hatırlıyorumdur ?)
Yani siz ha p4 ha p3 hatta p2 bile şeçmiş olsanız bir fark yaratmayacaktı