дополнение против сравнения

Допустим, у меня есть массив из 1000000 элементов с примерно 90% от 0 и 10% от 1.

Для того, чтобы считать 1 с, я могу сделать

sum=0;
for(int i=0;i<size;i++) {
sum+=x[i]
}

Но я подумал, может быть, сравнение дешевле, чем сложение, так что это будет лучше.

sum=0;
for(int i=0;i<size;i++) {
if(x[i]==1)
sum++;
}

Но я не уверен. Какой из них быстрее?

1

Решение

Трудно сказать, какая из них будет быстрее без попытки, но даже немного более медленная инструкция без ветвления обычно будет быстрее из-за конвейерная обработка и прогноз ветвления.

В вашем случае предиктор ветвления будет ошибочным в 90% случаев, что несколько снижает скорость.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]