S1: Kod profili oluşturma için hangi araçları kullanıyorsunuz (karşılaştırma değil profil oluşturma)?
S2: Kodun ne kadar süre çalışmasına izin veriyorsunuz (istatistik: kaç zaman adımı)?
S3: Vakalar ne kadar büyük (kasa önbellekte yer alıyorsa, çözücü daha büyük boyutlu siparişlerdir, ancak daha sonra bellekle ilgili işlemleri özleyeceğim)?
İşte bunu nasıl yaptığımın bir örneği.
Kıyaslamayı (ne kadar sürdüğünü görerek) profilden ayırıyorum (nasıl daha hızlı hale getirileceğini belirleyerek). Profil oluşturucunun hızlı olması önemli değildir. Neyin düzeltileceğini söylemesi önemlidir.
"Profil oluşturma" kelimesini bile sevmiyorum, çünkü her rutin için bir maliyet çubuğu veya "darboğaz" olan bir görüntüyü histogram gibi bir şeyle çağrıştırıyor çünkü kodda olması gereken küçük bir yer var sabit. Bunların her ikisi de, doğruluğun önemli olduğunu düşündüğünüz bir tür zamanlama ve istatistik anlamına gelir. Zamanlamanın doğruluğu hakkında fikir vermekten vazgeçmeye değmez.
Kullandığım yöntem rastgele duraklama ve burada tam bir vaka çalışması ve slayt gösterisi var . Profiler darboğaz dünya görüşünün bir parçası, hiçbir şey bulamazsanız, bulunacak bir şey olmadığını ve bir şey bulup belirli bir yüzde hızlanma elde ederseniz, zafer ilan edip çıkmayı bırakmanızdır. Profiler hayranları neredeyse ne kadar hız aldıklarını asla söylemezler ve reklamlar yalnızca bulmak kolay olacak şekilde tasarlanmış yapay olarak ortaya çıkan sorunları gösterir. Rastgele duraklatma sorunları kolay ya da zor olsun. Daha sonra bir problemi düzeltmek diğerlerini ortaya çıkarır, böylece bileşik hızlanma elde etmek için süreç tekrarlanabilir.
Çok sayıda örnekten edindiğim deneyime göre, işte böyle: Bir problemi bulabilirim (rastgele duraklayarak) ve düzeltebilirim,% 30 veya 1.3x gibi bir yüzde hızlanma elde edebilirim. Sonra tekrar yapabilirim, başka bir sorun bulabilir ve düzeltebilirim, başka bir hızlanma, belki% 30'dan az, belki daha fazla. Daha sonra, düzeltmek için başka bir şey bulana kadar tekrar tekrar yapabilirim. Nihai hızlanma faktörü, bireysel faktörlerin çalışan ürünüdür ve şaşırtıcı derecede büyük olabilir - bazı durumlarda büyüklük dereceleri.
INSERTED: Sadece bu son noktayı açıklamak için. Burada , slayt gösterisi ve tüm dosyalarla, bir dizi sorun giderme işleminde 730x hızlandırmanın nasıl elde edildiğini gösteren ayrıntılı bir örnek var . İlk versiyon, birim iş başına 2700 mikrosaniye aldı. Problem A çıkarıldı, süre 1800'e indirildi ve kalan problemlerin yüzdeleri 1.5x (2700/1800) büyüdü. Sonra B çıkarıldı. Bu işlem altı tekrarlama ile devam etti ve neredeyse 3 büyüklükte hızlanma sırası elde edildi. Ancak profil oluşturma tekniğinin gerçekten etkili olması gerekir, çünkü bu sorunlardan herhangi biri bulunamazsa, yani yanlış bir şey daha yapılamayacağını düşündüğünüz bir noktaya ulaşırsanız, işlem durur.
INSERTED: Başka bir deyişle, ardışık problemler ortadan kaldırıldığında toplam hızlandırma faktörünün bir grafiği:
Yani Q1 için, kıyaslama için basit bir zamanlayıcı yeterlidir. "Profil oluşturma" için rastgele duraklama kullanıyorum.
S2: Yeterli iş yükü veriyorum (ya da etrafına bir döngü koyuyorum), bu yüzden duraklamak için yeterince uzun çalışıyor.
S3: Elbette, önbellek sorunlarını kaçırmamak için gerçekçi bir şekilde büyük bir iş yükü verin. Bunlar, bellek getirmelerini yapan kodda örnekler olarak görünecektir.