Forum: Diğer Konular RSS
Optimizasyon Nasıl Yapılır?
İbrahim #1
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Optimizasyon Nasıl Yapılır?
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!
Avatar
Salih Dinçer #2
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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.
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
İbrahim #3
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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?
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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.

2) 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
Avatar
Salih Dinçer #5
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
Salih Dinçer #6
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Aaaa evet, meğer Xing 4.36 milyon Euro'ya satın almış:

http://www.haberturk.com/ekonomi/makro-ekonomi/haber/53169…
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #7
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #3
İbrahim on 2015-12-20, 13:42:
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&…

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
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 19:38:04 (UTC -08:00)