SORU
4 NİSAN 2012, ÇARŞAMBA


C kodu döngü performans [devamı]

Bu soru benim sorum burada (Mistik tavsiyesi üzerine) devam ediyor:

C code loop performance


Skaler talimatları yerine paketlenmiş talimatları kullandığımda benim sorum devam edersek, kodu ön tanımlı kullanarak çok benzer görünecektir:

for(int i=0; i<size; i =16) {
    y1 = _mm_load_ps(output[i]);
    …
    y4 = _mm_load_ps(output[i 12]);

    for(k=0; k<ksize; k  ){
        for(l=0; l<ksize; l  ){
            w  = _mm_set_ps1(weight[i k l]);

            x1 = _mm_load_ps(input[i k l]);
            y1 = _mm_add_ps(y1,_mm_mul_ps(w,x1));
            …
            x4 = _mm_load_ps(input[i k l 12]);
            y4 = _mm_add_ps(y4,_mm_mul_ps(w,x4));
        }
    }
    _mm_store_ps(&output[i],y1);
    …
    _mm_store_ps(&output[i 12],y4);
    }

Ölçülen performans bu çekirdek yaklaşık 5.6 FP işlemleri, döngü, her ne kadar beklediğiniz için tam olarak 4x performans skaler sürümü, yani 4.1,6=6,4 FP ops başına döngüsü.

Dikkate ağırlık faktörü (buna dikkat çektiğin için teşekkürler) taşı alarak, zamanlama gibi görünüyor:

schedule

Görünüşe göre programı değiştirmez olmasına rağmen, fazladan bir talimat sonra movss çalışma gider skaler ağırlık değeri XMM kayıt ve daha sonra kullanır shufps kopyalama bu skaler değeri tüm vektör. Göründüğü gibi kilo vektör hazır olmak için mulps zaman geçiş gecikmesi yüklemek için kayan nokta etki alanı hesabı, yani bu olmamalı tabi ekstra bir gecikme.

movaps (uyumlu, paketlenmiş hareket),addps & mulps talimatları kullanılan bu çekirdek (kontrol ile derleme kod) aynı gecikme süresi ve işlem hacmi olarak skaler sürümleri, yani bu olmamalı tabi ekstra bir gecikme ya.

Var mı bir fikrin bu ekstra döngü başına 8 devir geçirdi, varsayarak maksimum performans bu çekirdek alabilirsiniz. 6.4 FP ops başına döngüsü ve çalışan 5.6 FP ops başına döngüsü?


Gerçek montaj gibi görünüyor buraya kadar.

…
Block x: 
  movapsx  (%rax,%rcx,4), %xmm0
  movapsx  0x10(%rax,%rcx,4), %xmm1
  movapsx  0x20(%rax,%rcx,4), %xmm2
  movapsx  0x30(%rax,%rcx,4), %xmm3
  movssl  (%rdx,%rcx,4), %xmm4
  inc %rcx
  shufps $0x0, %xmm4, %xmm4               {fill weight vector}
  cmp $0x32, %rcx 
  mulps %xmm4, %xmm0 
  mulps %xmm4, %xmm1
  mulps %xmm4, %xmm2 
  mulps %xmm3, %xmm4
  addps %xmm0, %xmm5 
  addps %xmm1, %xmm6 
  addps %xmm2, %xmm7 
  addps %xmm4, %xmm8 
  jl 0x401ad6 <Block x> 
…

CEVAP
17 NİSAN 2012, Salı


Vtune veya oprof gibi bazı eşdeğer aracında EMON profil kullanmayı deneyin

  • 11* *(Windows sürümü için arama yapabilirsiniz)
  • oprofile

EMON (Olay Takibi) = ^ profil oluşturma . bir zaman tabanlı araç gibi, ama performans olayı soruna neden olduğunu anlarsınız. Bir süre önce profil tabanlı ile işe başlamak gerekir, Ancak Eğer dışarı atlar belirli bir talimat olup olmadığını görmek için. (Ve muhtemelen ilgili olaylar o IP emeklilik oyalandım.)

EMON profil, olayların listesi ile çalıştırmalısınız, değişen kullanım için "olağan şüpheliler"

Burada, önbellek özlüyor kapalı, hizalama başlamak istiyorum. Bilmiyorum eğer işlemciyi kullanarak bir sayaç için RF port kısıtlamaları gerekir - ama ekledim EMON profilleme uzun zaman önce, ve bilmiyorum ne kadar iyi olduklarını uydurarak ekleyerek olayları uygun için uygundur.

Ayrıca ön uç, oyala talimatı getirmek olduğunu mümkün olabilir. Kaç bayt bu yönergeler, her neyse. Bunun için EMON olaylar da var.


VTune Die L3 olayları görmüyor bu yorum yanıt: doğru değil. Burada yorum ekleyerek, ama uymayan şeyler:

Aslında, / L3$ / LL3 sözde Uncore için performans sayaçları VARDIR. Eğer VTune onları desteklemez. eğer çok şaşırırım. PTU gibi VTune ve diğer araçlar için http://software.intel.com/sites/products/collateral/hpc/vtune/performance_analysis_guide.pdf puan bakın. Hatta LL3 olaylar olmadan aslında, David Levinthal diyor: "Intel® Core™ i7 işlemci bir “olay” olan gecikme süresi vardır çok benzer Alınmıyor® İşlemci Ailesi Veri KULAK olayı. Bu olay örnekleri yükler, talimatın yerine getirilmesi ve gerçek arasındaki devir sayısı kaydı veri sunun. Eğer ölçülen gecikme süresi minimum gecikme büyükse 0x3f6, 15:0, tezgaha bit MSR programlanmış artırılır. Sayaç bir sonraki olay gecikme tatmin edici taşma silah PEBS mekanizması ve eşik, ölçülen gecikme, sanal ya da doğrusal adres ve veri kaynağı PEBS tampon 3 ek kayıtları kopyalar. Sanal adres olduğundan bilinen bir konum içine çekilen, örnekleme sürücü de bir sanal yürütebilir fiziksel çeviri ve fiziksel adresini yakalayın. Fiziksel adresini tanımlar Ve prensipte NUMA ev konumu önbellek ayrıntıları analiz sağlar occupancies." Ayrıca, sayfa CACHE_HİT_UNCORE_HİT L3 ve L3 CACHE_MİSS_REMOTE_DRAM gibi olaylar VTune 35, on puan. Bazen sayısal kodları Ara ve VTune daha düşük seviyeli bir arayüz içine programı gerekir, ama bu durumda oldukça kullanıcı arabirimi görünür olduğunu düşünüyorum.


TAMAM, http://software.intel.com/en-us/forums/showthread.php?t=77700&o=d&s=lr Rusya'da VTune bir programcı (sanırım)" Uncore olaylara örnek olamaz. "diye açıklıyor

Haksızsa, örneğin, tek bir CPU, örnek ve anlamlı bir şekilde yapılmasını sağlayabilirsiniz. Ben de CPU döndüğünde L3 eksik veri işaretlemek için yeteneği olduğuna inanıyorum. Aslında, genel L3 kesinlikle örnek böylece veri dönmeden hangisi olduğunu bilir. Hangi hyperthread bilmiyor olabilirsiniz, ama yine, tek iş parçacığı devre dışı moduna gidebilirsiniz.

Ama, oldukça yaygın olarak, VTune ETRAFINDA değil, iş için, bunu yapmak zorunda olacak gibi görünüyor.

Gecikme profilleme ilk deneyin. Bu tamamen CPU içinde ve VTune Millet çok berbat değildir.

Ve yine ihtimal senin sorunun özünde ise, L3 derim. VTune bunun üstesinden bne.


"Levinthal başına. "Döngüsü Muhasebe deneyin

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • OVERWERK

    OVERWERK

    6 Temmuz 2010
  • Techmoan

    Techmoan

    31 Mayıs 2009
  • The CGBros

    The CGBros

    20 AĞUSTOS 2011