2010-07-15 12 views
6

Genetik algoritmalar kullanarak gcc için bir dizi optimizasyon yazmak istiyorum. Bazı istatistikler ve uyum işlevleri için bir montaj işlevinin yürütme süresini ölçmeliyim. Normal zaman ölçümü kullanılamaz, çünkü önbellek boyutundan etkilenir.
Bu yüzden böyle bir şey görebileceğim bir masaya ihtiyacım var.x86 ve x86-64 assembly komutları nasıl ölçülür işlemci zamanlarında işlem süresi?

command | operands | operands sizes | execution cycles 

Bir şeyi anlamayı özledim mi? Kötü İngilizce için özür dilerim. Modern CPU ile

+0

İngilizceniz iyi. Ben sadece bir yakınma var: Ben mikro optimizasyon ile birkaç yüzde hızlandırmak isteyen insanlar, makro derleme yoluyla pek çok hızlandırma faktörü elde etmenin değerini anlayacaktır, bu da derleyicilerin yapamadıklarını bilmiyorum. –

+0

Olası çoğaltılabilir [Her montaj komutu için kaç CPU döngüsü gereklidir?] (Http://stackoverflow.com/questions/692718/how-many-cpu-cycles-are-needed-for-each-assembly-instruction) –

cevap

2

(örneğin tablolar bazı eski işlemciler için mevcut olmakla örneğin 486) bir talimat tamamlamak için ne kadar süreceğini bakmak için basit bir tablo vardır. Her bir talimatın ne yaptığı ve ne kadar süre alabileceği konusunda en iyi bilginiz çip üreticisinden gelir. Örneğin. Intel's documentation manuals oldukça iyi (o sayfada bir optimizasyon kılavuzu da var).

Hemen hemen tüm modern CPU'larda, kodun EDX:EAX içine işlediği işlemci için zaman damgası sayacını okuyan RDTSC talimatı bulunmaktadır. Bununla bir de tuzaklar var, ama aslında profilde kullandığınız kod gerçek bir kullanım durumunu temsil ediyorsa, yürütme işlemi kesintiye uğramamış veya başka bir CPU çekirdeğine kaydırılmamışsa, istediğiniz zamanlamaları almak için bu talimatı kullanabilirsiniz. Yani iki RDTSC talimatları ile optimizasyon yaptığınız kodu çevirin ve zamanlama olarak TSC'deki farkı alın. (Farklı testlerde/durumlardaki zamanlamalar büyük olabilir; istatistikler arkadaşınızdır.)

1

Kodunuzu derleme (rdtsc ve arkadaşlar) veya PAPI gibi bir enstrümantasyon API'si kullanarak yapabilirsiniz. Bununla birlikte, bir komutun yürütülmesi sırasında harcanan saat döngülerini doğru olarak ölçmek mümkün değildir, ancak en iyi tahminler için mimari geliştirici kılavuzlarınıza başvurabilirsiniz. Her iki durumda da, bir SMP ortamında çalışmanın etkilerini dikkate alırken dikkatli olmalısınız.

İlgili konular