SORU
18 NİSAN 2009, CUMARTESİ


Nasıl en iyi performansını artırmak için CPU önbellek kullanan kod yazmak mı?

Bu öznel bir soru gibi gelebilir, ama aradığım şey bu ile ilgili karşılaşmış olabilecek belirli örnekler vardır.

  1. Nasıl kodu, önbellek/cache dostu (daha fazla önbellek isabet, birkaç önbellek özlüyor mümkün olduğunca etkili hale getirmek için mi? Bakış açıları, veri önbelleği ve önbellek her iki program (talimat önbellek) yani ne şeyler bir kod, veri yapıları ve kod yapıları ile ilgili biri olmalı önbellek etkin hale getirmek ister.

  2. Herhangi bir özel veri yapılarının bir kaçının, yoksa bu yapı üyelerine erişim belirli bir şekilde kullanmak gerekir vs... kod önbelleği etkin kılmak için vardır.

  3. Herhangi bir program yapıları (if, for, switch, break, goto,...), kod-Akış (için içinde bir, eğer içinde, vs ...) gerekir izleyin/önlemek bu konuda?

İleri bireysel deneyimleri önbellek verimli hale getirmek için ilgili genel kod duymak için sabırsızlanıyorum. Olabilir herhangi bir programlama dili (C, C , Assembly, ...), herhangi bir donanım hedef (ARM, Intel, Power PC, ...), herhangi bir işletim sistemi (Windows, Linux,S ymbian, ...), vb

Çeşitli daha derinden anlamak için yardımcı olacaktır.

CEVAP
19 HAZİRAN 2009, Cuma


Önbellek İŞLEMCİ (kaçınarak Bellek . Bellek yerine getirilmesi için bir talep bekliyor tıkanır sayısını azaltmak için vardır ^em>gecikmeve ikinci bir etkisi, transfer edilmesi gereken veri toplam miktarını azaltmak için muhtemelen (bellek . koruyarak ^em>bant genişliği).

Hafıza sorunum kaçınmak için teknikler gecikme genellikle dikkate ilk şey, ve bazen uzun bir yol yardımcı olur getir. Sınırlı bellek bant genişliği de sınırlayıcı bir faktör, özellikle bellek veri yolu kullanmak istiyor multicores ve çok iş parçacıklı uygulamalar için. Teknikleri farklı bir dizi ikinci sorununa yardımcı olur.

İyileştirilmesikonum mekansalher önbellek satırı bir önbellek eşleştirilmiş edildikten sonra tam olarak kullanıldığından emin olmak anlamına gelir. Çeşitli standart kriterler ele aldığımız zaman, bu şaşırtıcı büyük bir kısmını önbellek hatları tahliye olmadan önce 0 ihtimal önbellek hatları kullanmak için başarısız olduğunu gördük.

Üç açıdan önbellek satırı kullanımı geliştirmeye yardımcı olur:

  • Önbellekte daha yararlı verileri sığdırmak için, aslında etkili önbellek boyutunu artırma eğilimindedir.
  • Aynı önbellek satırında daha yararlı verileri sığdırmak için, istenen veri önbelleği bulunabilir olma ihtimalinin artırma eğilimindedir.
  • Daha az olacak gibi bellek bant genişliği gereksinimlerini azaltır, getirir.

Teknikleri ortak:

  • Küçük veri türleri kullanın
  • Veri hizalama delikleri (küçülterek yapı üyeleri sıralama bir yoludur) önlemek için düzenlemek
  • Isınır bellek gibi delikler tanıtmak ve veri yayılmış olan standart Dinamik Bellek ayırıcısı, dikkat edin.
  • Bitişik verileri gerçekten sıcak döngüler kullanılır emin olun. Aksi takdirde, sıcak sıcak döngüler veri kullanın, böylece sıcak ve soğuk bileşenlerine veri yapıları kesiliyor, düşünün.
  • erişim desenleri düzensiz sergi ve doğrusal datastructures iyilik algoritmalar ve datastructures kaçının.

Ayrıca bellek gecikme gizlemek için başka yollar da var önbelleğe kullanarak daha dikkat etmelisiniz.

Modern CPU:s genellikle bir veya daha fazladonanım prefetchers. Bir tren önbellek özlüyor ve düzeni spot çalışın. Sonraki önbellek hatları için birkaç kaçıştan sonra örneğin, ödev önceden getirici önbelleğine önbellek satırları getirilirken, uygulamanın ihtiyaçlarını tahmin başlayacaktır. Eğer düzenli erişim bir desen varsa, donanım önceden getirici genellikle çok iyi bir iş yapıyor. Ve eğer programınız düzenli erişim desen ekran değil. öyleyse ekleyerek şeyler artırabilirhazırlık yönergelerikendini.

Her zaman önbelleğinde Bayan olanlar birbirine yakın ortaya böyle bir şekilde talimatları kişileri CPU bazen bu uygulama sadece bir gecikme isabet sürdürmek, böylece getirir örtüşüyor (Hafıza seviyesi paralellik).

Toplam bellek yolu basıncı azaltmak için ne denir işe başlamak gerekirzamansal konum. Bu hala önbellekten çıkarılacak olmamışsa da verileri yeniden kullanmak anlamına gelir.

Aynı veri touch döngüleri birleştirme (döngü füzyonve teknikleri olarak bilinen yenidendöşemeyaengellemetüm bu ekstra bellek getirir önlemek için çalışıyoruz.

Bu egzersiz yeniden yazmak için dikkat etmeniz gereken bazı kurallar var olsa da, genellikle dikkatle döngü taşınan veri bağımlılıkları, programın mantığı etkiler değilsin emin olmak için göz önünde bulundurmanız gerekir.

Bu işler gerçekten çok çekirdekli dünyada amorti ne, genellikle alışkanlık ikinci iş parçacığı eklendikten sonra verimlilik geliştirmeleri çok görmek.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • KarnasCamillo

    KarnasCamill

    24 EKİM 2007
  • Leigh Momii

    Leigh Momii

    10 Mayıs 2006
  • vgeller1

    vgeller1

    22 Kasım 2009