X86 ve x64 işlemcilerdeki CPU yönergelerinin gecikmesi


14

Bazı tablo ya da bana derleme kodunun verimliliğini hesaplamak için yardımcı olabilir benzer bir şey arıyorum.

Bildiğim kadarıyla bit kaydırma 1 CPU saat alır, ama gerçekten ne kadar toplama (çıkarma aynı almalıdır), çarpma ve bölme değerlerini bildiğimde muhtemelen bölme süresini hesaplamak için arıyorum.

Gerçekten tamsayı değerleri hakkında bilgiye ihtiyacım var, ancak float yürütme süreleri de açıktır.


Yanıtlar:


10

Genel olarak, bu işlemlerin her biri, argümanların boru hattının çeşitli aşamalarında kayıtlarda olup olmadığını yürütmek için tek bir saat döngüsü de alır.

Gecikme ile ne demek istiyorsun? Bir operasyon ALU'da kaç döngü geçirir?

Bu tabloyu faydalı bulabilirsiniz: http://www.agner.org/optimize/instruction_tables.pdf

Modern işlemciler süper skaler olduklarından ve sıra dışı çalışabildiklerinden, genellikle döngü başına 1'i aşan toplam talimatları alabilirsiniz. Makro komutu için argümanlar en önemlisidir, ancak bölünmeler XOR'dan daha uzun sürdüğü için işlem de önemlidir (<1) döngü gecikmesi).

Birçok x86 komutu, karmaşık olmaları durumunda bazı aşamaları tamamlamak için birden fazla döngü alabilir (örneğin REP komutları veya daha kötü MWAIT).


3
Tamsayı çarpımı, tüm yeni x86 CPU'larda en az 3c gecikmedir (ve bazı eski CPU'larda daha yüksektir). Birçok CPU'da tamamen boru hattına bağlanmıştır, bu nedenle verim saat başına 1'dir, ancak bunu ancak uçuşta üç bağımsız çarpanınız varsa elde edebilirsiniz. (Haswell'de FP çarpımı 5c gecikme, 0.5c verimdir, bu nedenle verimi doyurmak için uçuşta 10'a ihtiyacınız vardır). Bölme ( divve idiv) daha da kötüdür: mikro kodludur ve veya daha yüksek bir gecikme süresi vardır ve herhangi bir CPU'da tam olarak boru hattı oluşturulmaz. Bütün bunlar doğrudan Agner Fog'un talimat tablolarından, bu yüzden bunu bağladığınız iyi bir şey. addshr
Peter Cordes


7

Montaj kodunun verimliliğini hesaplamak, bu günlerde sipariş dışı yürütme süper skaler boru hatlarının bu günlerinde gitmenin en iyi yolu değildir. İşlemci türüne göre değişir. Hem öncesi hem de sonrası talimatlara göre değişir ( ekstra kod ekleyebilir ve bazen daha hızlı çalışmasını sağlayabilirsiniz!). Bazı işlemler (özellikle bölünme), daha öngörülebilir daha eski yongalarda bile bir dizi yürütme süresine sahip olabilir. Aslında birçok yinelemenin zamanlaması gidilecek tek yoldur.


Bunu biliyorum, ama buna gerçek projede değil, bir tür eğlenceli bir programlama projesine ihtiyacım var.
ST3

Gerçek ya da eğlence için ihtiyacınız olsun, bu işlemci hattının cevabını değiştirmez. Bunun yerine, Pervane çipi gibi daha belirleyici bir işlemciye geçmeyi düşündünüz mü?
Brian Knoblauch

3
Skaler olsa bile, sıralı uygulama dalı yanlış tahminleri ve önbellek hataları çalışma zamanında değişikliklere neden olabilir.
Paul A. Clayton

Tamamen CPU'ya bağlı şeyler için (önbellek kaçırma, şube yanlış tahminleri yok), CPU davranışı, statik analizin genellikle bir döngünün belirli bir CPU'da yineleme başına kaç döngüyü alacağını (ör. Intel Haswell) tahmin edebileceği kadar ayrıntılı olarak anlaşılır. örneğin , derleyici tarafından üretilen asm'a baktığımda, şube versiyonunun OP'nin Sandybridge CPU'sundaki CMOV versiyonundan neredeyse tam olarak 1,5 kat daha hızlı, ancak Skylake'ime çok daha yakın çalıştığını açıklayabildiğim bu SO cevabına bakın .
Peter Cordes

Eğer sizin performans nedenleriyle elle ediyoruz yazma asm, o zaman gecikmesi için ve Intel ve AMD CPU'lar üzerinde darboğazlar üretilen iş aramaya aslında yararlıdır. Yine de zor ve bazen AMD için en uygun şey Intel için en uygun şey değil.
Peter Cordes

4

İntel cpu ile ilgili bilgileri intel yazılım geliştirici kılavuzlarında bulabilirsiniz . Örneğin, gecikme bir tamsayı toplama için 1 döngü ve bir tamsayı çarpma için 3 döngüdür.

Çarpma hakkında bir bilgim yok ama eklemenin her zaman bir döngü almasını bekliyorum.


"Serbest" (boru hatları doğru sıralandığında paralel olarak) veya önbellek kaçırma nedeniyle daha uzun sürmesi dışında bir döngü. :-)
Brian Knoblauch

2
Şu anda (2018) bu bilgi, 248966 "Intel® 64 ve IA-32 Mimarileri Optimizasyon Referans Kılavuzu" belgesinin "Talimat Gecikmesi ve Verimi" adlı Ek C'de de bulunmaktadır
stefanct
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.