şu doğrultusunda Kısa Versiyon
: aOn
0
veya 1
olduğunuişlemciler gerçekte sıfır veya teker çarpma hesaplamak musunuz? Niye ya?
aData[i] = aData[i] + (aOn * sin(i));
ise işlemci aslında çarpma işlemini yapar, ya da koşullu diğer sonucu (0
için 0
, dışarı çalışır) 1
için -değerinin?
Uzun Versiyon
Ben kısmen Branch Prediction etkisiyle içine bir göz gerektirir algoritma performansı tutarlılık, araştırıyorum.
for (i = 0; i < iNumSamples; i++)
aData[i] = aData[i] + (aOn * sin(i));
(şube tahmin performansını kararsız) bu kod daha kararlı bir performans sağlayacaktır:
hipotez bu kod aOn
ile
for (i = 0; i < iNumSamples; i++)
{
if (aOn)
aData[i] = aData[i] + sin(i);
}
0
veya 1
ya olmak ve başka bir iş parçacığı tarafından döngü yürütme sırasında geçiş yapabilirsiniz.
gerçek koşullu hesaplama (yukarıdaki örnekte + sin(i)
) daha fazla işleme gerektirir ve durum döngü içinde olması gerekir, (tek bir yukarıdaki örnekte olduğu gibi, koşullar çok sayıda vardır, aynı zamanda, aOn
değişiklik olmalı döngü başına hemen değil, etki).
Performans tutarlılığını göz ardı ederek, iki seçenek arasındaki performans değiş tokuşu, if
bildirimini ve bir çarpımın yürütülmesi için gereken süredir.
Her ne kadar, bir işlemci, 1
ve 0
gibi değerler için gerçek çoğaltmayı gerçekleştiremezse, ilk seçenek bir kazan-kazan çözümü olabilir (dal tahmini, daha iyi performans).
Bu derleyici bu dışarı optimize olacaktır olasıdır. – iamnotmaynard
Birlikte ve optimizasyon olmadan kontrol etmesini ve 0' 'ait çarpanları arasındaki göreli performansını hiçbir fark,' 1' ve diğer sayılar (optimizasyon olsa tüm durumlar için hafifçe performansını artırmak etmez) yapar. Yani optimizasyon işlemci çarpma yapar olsun veya olmasın ilgilidir tam olarak nasıl? – Izhaki
aon sabit değilse, derleyici dışarı optimize olamaz @iamnotmaynard ama OP olacağına dair herhangi bir belirti yok. –