SORU
16 Ocak 2009, Cuma


Sanal fonksiyonlar ve performans - C

Sınıf tasarımımda, soyut sınıflar ve sanal fonksiyonlar yoğun bir şekilde kullanıyorum. Sanal işlevleri performansını etkileyen bir his vardı. Bu doğru mu? Ama bu performans farkı yok noticebale ve erken optimizasyon yapıyorum gibi görünüyor bence. Değil mi?

CEVAP
17 Ocak 2009, CUMARTESİ


Sorunuzun devam ettim ve sipariş Power PC CPU çalıştığımız 3 GHz biraz zamanlamaları kaçtım beni merak yaptı. Test basit 4d vektör sınıfı yapmak/ayarlama işlevleri ile koştu

class TestVec 
{
    float x,y,z,w; 
public:
    float GetX() { return x; }
    float SetX(float to) { return x=to; }  // and so on for the other three 
}

Sonra da ben kurdum üç 1024-vektör diziler bunlar (küçük yeterince uyum L1) ve koştu bir döngü sözlerine ekledi onları birbirlerine (A. x = B x C x) 1000 kez. İşlevleri satıriçi, sanal ve doğrudan işlev çağrıları olarak tanımlanan bu koştum ve sonuçları:

  • satır içi: 8 MS
  • doğrudan: 68ms
  • sanal: 160ms

Yani, bu durumda her şeyi önbellek uyduğu () sanal işlev çağrıları satır içi aramalar göre yaklaşık 20x daha yavaştı. Ama bu gerçekten ne anlama geliyor? Döngü her yolculuk tam olarak 12,288 işlev çağrıları (Ekle başına 1024 vektörler kez dört bileşenleri üç kere çağırır) neden, bu kez 12,288,000 işlev çağrılarını temsil etmek. Sanal döngü doğrudan döngü daha uzun 92ms aldı, arama başına ek yükü 7 oldunanosaniyebaşına işlevi.

Ben buradan şu sonuca varıyorlar:Evetsanal fonksiyonlar doğrudan fonksiyonları daha yavaş ve ., ^strong>hayıronları saniyede on milyon kez aramaya niyetin yoksa , önemli değil.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 8lacKy

    8lacKy

    30 Mart 2009
  • Ben Schoon

    Ben Schoon

    23 Kasım 2012
  • TheForgottenGamer1

    TheForgotten

    28 AĞUSTOS 2009