, ben ilginç bir yığın ayırma özelliğini fark, işte burada tedbir kez şablon toplam 500000 ints
tahsis edilebilir:Yığın ayırma özelliği (performans) benim küçük performans sorunları soruşturması sırasında
bir öbekte ayrılan
void foo() { const int size = 500000; int a1[size]; x = a1[size - 1]; }
Sonuç: 7.3 saniye;
void foo() { const int size = 250000; int a1[size]; int a2[size]; x = a1[size - 1] + a2[size - 1]; }
Sonuç:
iki parçalar halinde Ayrılan 3.5 saniye;
- dört parçalar Ayrılan:
void foo() { const int size = 125000; int a1[size]; int a2[size]; int a3[size]; int a4[size]; x = a1[size - 1] + a2[size - 1] + a3[size - 1] + a4[size - 1]; }
Sonucu: 1.8 saniye.
vb ... Ben16 parçalar halinde bölmek ve seferinde 0,38 saniye sonucu olsun.
Açıkla bana, lütfen, neden ve nasıl olur?
MSVC 2013 (v120), Release build'i kullandım.
UPD:
Makinem x64 platformudur. Ve ben Win32 platformu ile derledim.
x64 Platform ile derlediğimde, her durumda yaklaşık 40ms verir.
Platform seçimi neden bu kadar çok etkileniyor?
Kör: Mümkünse derleyici optimizasyonu. Orada gördüğünüz perfomances kesinlikle ** Cache Misses ** tarafından sakatlandı ... Genellikle, benchmarklarınızı en yüksek optimizasyon seviyelerinde yapmalısınız. :-) – WhiZTiM
Bilgisayarınızın özellikleri nedir? Derleyici sürümü ve Derleme bayrakları? – WhiZTiM
@WhiZTiM, optimizasyondan kaçınmaya çalışıyorum :) _Compiler optimization_ ve _Cache Misses_ 'ı önlemek için geliştirmeyi önerebilir misiniz? – MrPisarik