Я написал два фрагмента кода, один из которых делит случайное число на два, и тот, который сбрасывает одно и то же случайное число справа. Как я понимаю, это должно привести к такому же результату. Однако, когда я использую оба фрагмента кода, я последовательно получаю данные о том, что смена происходит быстрее. Почему это?Почему деление происходит медленнее, чем битхифтинг в C++?
Shifting код:
double iterations = atoi(argv[1]) * 1000;
int result = 0;
cout << "Doing " << iterations << " iterations." << endl;
srand(31459);
for(int i=0;i<iterations;i++){
if(i % 2 == 0){
result = result + (rand()>>1);
}else{
result = result - (rand()>>1);
}
}
Разделив код:
double iterations = atoi(argv[1]) * 1000;
int result = 0;
cout << "Doing " << iterations << " iterations." << endl;
srand(31459);
for(int i=0;i<iterations;i++){
if(i % 2 == 0){
result = result + (rand()/2);
}else{
result = result - (rand()/2);
}
}
Сроки и результаты:
$ time ./divide 1000000; time ./shift 1000000
Doing 1e+09 iterations.
real 0m12.291s
user 0m12.260s
sys 0m0.021s
Doing 1e+09 iterations.
real 0m12.091s
user 0m12.056s
sys 0m0.019s
$ time ./shift 1000000; time ./divide 1000000
Doing 1e+09 iterations.
real 0m12.083s
user 0m12.028s
sys 0m0.035s
Doing 1e+09 iterations.
real 0m12.198s
user 0m12.158s
sys 0m0.028s
Addtional информация:
- Я не использую никаких оптимизаций при компиляции
- Я бег это на виртуализированной установку Fedora 20, керналь: 3.12.10-300.fc20.x86_64
Оптимизация использования s. В профилировании неоптимизированного кода мало смысла. Кроме того, различия настолько малы, я бы провел сравнение 100 раз или около того. – juanchopanza
@juanchopanza Я использую оптимизированный код производства. Тем не менее, мне все равно хотелось бы знать, почему эта разница появляется. Кроме того, я использовал это сравнение много раз, со многими различными размерами ввода и обнаружил подобное несоответствие. – Avery
Затем вы должны написать более простой код, который выполняет разделение и сдвиг, и посмотрите на сборку, созданную как с оптимизацией, так и без нее. – juanchopanza