2013-04-30 32 views
14

Birçok SSE "mov" talimatları, kayan nokta değerlerini taşıdıklarını belirtir. Örneğin:Bazı SSE "mov" talimatları neden kayan nokta değerlerini taşıdıklarını belirtir?

    Yüksekten
  • MOVHLPS-Taşı Tek Hassas Kayan Nokta Paketli Değerler Düşük
  • MOVSD-Move Skaler çift Hassas Kayan-Puan Değeri
  • MOVUPD-Taşı Hizalanmamış Ambalajlı çift duyarlığı Kayan Nokta Değerler

Bu talimatlar neden sadece 32-bit veya 64-bit değerlerini taşıdıklarını söylemiyorlar? Yalnızca bitleri hareket ettiriyorlarsa, talimatlar neden kayan nokta değerleri için olduklarını belirtir? Şüphesiz bu bitleri kayan nokta olarak yorumlayıp yorumlamayacaksınız?

+1

belki mantarlar yardımcı işlemci Hangi Bu talimatlar kayan nokta veya tam sayı değerleri, ya tutabilir SSE kayıt (xmm0-9), üzerinde işlem –

+0

kaydeder. –

cevap

11

ben cevabı buldum: Bazı mikromimariler tamsayı talimatlar farklı yürütme birimlerinde kayan nokta komutlarını yerine. Bir talimat akışı aynı "alan" içinde (tam sayı veya kayan nokta) kaldığında genel gecikme süresi daha iyi olur. Bu "Veri Atlama Gecikmeler" başlıklı bölümde, Agner Fog'un optimizasyon kılavuzunda oldukça iyi ayrıntılı olarak ele alınmıştır: herkes umurunda durumunda Difference between MOVDQA and MOVAPS x86 instructions?

+4

Sadece bunun doğru olduğunu onaylamak için yorum yapın. :) Farklı etki alanlarında bir değeri atmak için genellikle 1-2 döngü gecikme vardır. – Mysticial

4

şudur ki: http://www.agner.org/optimize/microarchitecture.pdf

Bu benzer SO söz konusu bu açıklama bulundu tam olarak neden Agner Fog'un vectorclass o boolean şamandıra (Vec4fb) ve boole tamsayı (Vec4i) diye yazıyor onun kılavuzda http://www.agner.org/optimize/#vectorclass

ile kullanmak ayrı vektör sınıfları vardır. " için ayrı ayrı bir Boolean vektör sınıfını tanımlamamızın sebebi, kayan nokta vektörleri kullanmamızın daha hızlı kod üretmemizi sağlamasıdır. (Birçok modern CPU'lar, tamsayı vektörleri ve yüzer nokta vektörleri için ayrı yürütme birimlerine sahiptir. bazen Boolean işlemlerini kayan nokta biriminde yapmak ve böylece iki birim arasında veri taşımaktan kaynaklanan gecikmeyi önlemek mümkündür. " SSE ve AVX hakkında

En sorular onun vectorclass kod bakarak daha da önemlisi onun kitabını okuyup tarafından yanıtlanabilir.

+0

Referans için teşekkürler! Agner Fog inanılmaz. Bir kişinin o kadar kullanışlı kodu, dokümanı ve bilgiyi olduğu gibi nasıl çıkarabileceğine dair hiçbir fikrim yok. –

+0

Yani bu orada ANDPS neden" kullanılmaktadır ANDPD ve PAND, çıkarabilseniz yapmak için sanırım, ayrıca cevabı (ve aynı şekilde andn, OR, XOR için). Öyleyse, neden ANDPD farklı ANDPS? Farklı aynı eski birimdeki boru hattı profilleri, sanırım ... – greggo

İlgili konular