У меня есть следующий код:
#include <iostream>
int main()
{
int n = 100;
long a = 0;
int *x = new int[n];
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
for(int k = 0; k < n; ++k)
for(int l = 0; l < n; ++l)
{
a += x[(j + k + l) % 100];
}
std::cout << a << std::endl;
delete[] x;
return 0;
}
Если я скомпилирую без оптимизации g ++ test.cc, а затем запустлю время выполнения ./a.out, он покажет 0,7 с. Однако, когда я компилирую это с -O, время уменьшается в 2 раза.
Используется компилятор
g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2
Мой вопрос
Как я могу переписать код, чтобы при компиляции без -O я мог получить то же время (или близко к нему)? Другими словами, как вручную оптимизировать вложенные циклы ?
Почему я спрашиваю
У меня похожий код, который работает примерно в 4 раза быстрее, если я использую оптимизацию -O.
PS: я посмотрел руководство к компилятору, но там слишком много флагов, чтобы проверить, какой из них действительно имеет значение.