Thread overview
Optimizasyon Nasıl Yapılır?
Dec 20, 2015
İbrahim
Dec 20, 2015
Salih Dinçer
Dec 20, 2015
İbrahim
Dec 20, 2015
Salih Dinçer
Dec 20, 2015
Salih Dinçer
December 20, 2015

Selam Arkadaşlar;
Bir uygulama yapıldığında bildiğimiz gibi optimizasyon ediliyor. Benim merak ettiğim şey ise büyük firmalar (microsoft, google, facebook vs.) uygulamalarını nasıl optimize ediyorlar? Yani bunun için illa ki bir optimizasyon yazılımı falan mı olması gerekiyor? Optimize derken tam olarak neyi optimize ediyorlar ve bu işi nasıl, hangi araçlarla yapıyorlar?
Teşekkürler!

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 20, 2015

Yazılım dünyasında "optimize" dediğimizde benim aklıma sistem kaynaklarını daha iyi kullanan yazılım geliyor. Bu da daha az işlemci ve bellek kullanımı demek. Bunu 2 şekilde yapabiliriz ki zaten ilk seçenek genelde yayınlanan son sürümlerde zaten başvuruluyor:

1.'si derleyici parametrelerini kullanmak,
2.'si üzerinde fazla düşünülmemiş kodları değiştirmek...

Dolayısıyla her geliştirmede yazılımın kullandığın kütüphanelere bağımlılık azalıyorsa ve/veya aynı işi başka algoritmalar ile daha hazlı yapabileceklerine inanılıyorsa optimizasyon sağlanmış olur.

Özetle yazılıma yeni özellik katmak yerine daha önce yeni sürümü tamamlamak için yapılanları yeniden değerlendirme (recoding) yazılımı hafifletebilir.

Ve's-selam.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 20, 2015

Cevap için teşekkürler!
Yani asıl sormak istediğim şey: Büyük firmalar yazılımlarında optimizasyon yaparken mesela fazladan, gereksiz bellek tahsis edilmesi gibi problemleri nasıl fark ediyorlar? Ayrıca gereksiz bellek tahsisinin dışında hangi tür optimizasyon gerektiren problemler oluyor?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 20, 2015

Ali hocamın sosyal medyadan örnek verdiği çok iyi olmuş. Chris Stephenson'dan duymuştum; buna Türkiye'deki Google Plus'daki gibi çevreler sistemine benzer ama iş dünyasında kullanılan bir proje geliyor. Sanırım Xing'in el değiştirmeden önceki hali (Çember.NET)

Biri referans ile sistem dahil olduğunda öyle bir iş yüküyle karşılaşıyormuş ki çünkü her kişinin başka biriyle bağlantısı var. Bağlantısı olanların da başkalarıyla ve bu adeta sonsuza kadar gidiyor. Elbette derinlik kısıtlanabilir ama kodlamada sanırım çok kritik bir hata yaptıklarından bu sorunu bir türlü üstesinden gelemiyorlarmış. Çözümü ise tıpkı veri dizinleme yöntemleri gibi akılcı bir çözümmüş sanırım. Yani matematik...:D

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 20, 2015

Aaaa evet, meğer Xing 4.36 milyon Euro'ya satın almış:

http://www.haberturk.com/ekonomi/makro-ekonomi/haber/53169-cembernet-satildi

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 20, 2015

Bu işin yöntemi şudur:

  1. Program bir profiler'ın gözetimi altında işletilir. Profiler, programın hangi işlemleri işletirken ne kadar zaman harcadığını ölçer ve bir biçimde bildirir. D için en kolay profiler, dmd'nin '-profile' seçeneği ile geliyor:

http://ddili.org/forum/thread/265

Başka profiler'lar da kullanılabilir ama benim D için bildiğim yok.

  1. En fazla zaman geçirilen işleme odaklanılır ve nasıl hızlandırılabileceği araştırılır. Bu, bazen ikili ağaç yerine dizi kullanmak kadar basit olabilir. Başka durumlarda daha zor olabilir.

Bu iş Google ve Facebook gibi çok fazla sayıda sunucu kullanan firmalar için çok önemli oluyor çünkü bu firmaların harcamalarının büyük bir bölümü bu sunucuların harcadığı elektriğe ve bu sunucuların soğutulmalarına gidiyor. Bu yüzden, %1 az işlem harcamak bazen büyük kazanç anlamına gelebiliyor.

Andrei'nin sunumlarından birisi Facebook'ta öğrendiği ve bazen şaşırtıcı olabilen eniyileştirme yöntemleri ile ilgiliydi. YouTube'da "andrei alexandrescu optimization" diye aratınca bir kaç sunum çıkıyor. Oradaki kod örneklerine bakarak nasıl değişikliklerin daha hızlı kod ürettiği konusunda fikir edinebiliriz.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 21, 2015

Alıntı (İbrahim:1450647759):

>

hangi tür optimizasyon gerektiren problemler oluyor?

Bunun bir örneği, Andrei sunumunda çıktı: Bir sayının kaç haneden oluştuğunu belirleyen işlevin nasıl hızlandırılabileceğine bakıyor. Tam şu noktada:

https://www.youtube.com/watch?feature=player_detailpage&v=ph7FP0LnmcA#t=3840

Kullandığı yöntemler:

  • Sonsuz döngüler foreach gibi yapısal döngülerden daha hızlıdır çünkü üretilen koddaki jump (atlama?) komutları unconditional'dır (en hızlı atlama çeşidi).

  • Çoğu sayı küçüktür. O yüzden, sayının örneğin 10'dan küçük olup olmadığına baştan bakılsa hiç karmaşık işlemlerden geçmeden 1 (veya 2, 3, vs.) döndürülebilir.

  • Haneleri teker teker sayacağımıza dörder dörder sayalım. (Dört yerine başka değer kullanmamasının nedeni, sonuçlarını karşılaştırmış olmasıymış. Örneğin, dörtten büyük değerlerde kod fazla büyüyormuş ve artık işlemcinin komut ara belleğine (instruction cache) sığmıyormuş.)

Bu değişikler sayıdaki hane sayısına bağlı olarak 4, 5, vs. kat kazanç sağlamış! Hiç fena değil... ;)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]