Я нахожу эту тему Почему быстрее обрабатывается отсортированный массив, чем несортированный массив?. И попробуйте запустить этот код. И я нахожу странное поведение. Если я скомпилирую этот код с флагом -O3
оптимизации, для выполнения требуется 2.98605 sec
. Если я скомпилирован с -O2
, он принимает 1.98093 sec
. Я пытаюсь запустить этот код несколько раз (5 или 6) на одной машине в одной и той же среде, я закрываю все другое программное обеспечение (хром, скайп и т.д.).
gcc --version
gcc (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Итак, пожалуйста, вы можете объяснить мне, почему это происходит? Я прочитал руководство gcc
, и я вижу, что -O3
включает -O2
. Благодарим вас за помощь.
P.S. добавить код
#include <algorithm>
#include <ctime>
#include <iostream>
int main()
{
// Generate data
const unsigned arraySize = 32768;
int data[arraySize];
for (unsigned c = 0; c < arraySize; ++c)
data[c] = std::rand() % 256;
// !!! With this, the next loop runs faster
std::sort(data, data + arraySize);
// Test
clock_t start = clock();
long long sum = 0;
for (unsigned i = 0; i < 100000; ++i)
{
// Primary loop
for (unsigned c = 0; c < arraySize; ++c)
{
if (data[c] >= 128)
sum += data[c];
}
}
double elapsedTime = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
std::cout << elapsedTime << std::endl;
std::cout << "sum = " << sum << std::endl;
}