У меня есть кодКак оптимизировать следующий общий цикл?
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
void foo(int n, double* a, double* b, double *c, double*d, double* e, double* f, double* g)
{
for (int i = 0; i < n; ++i)
a[i] = b[i] * a[i] + c[i] * (d[i] + e[i] + f[i] + g[i]);
}
int main()
{
int m = 1001001;
vector<double> a(m), b(m), c(m), d(m), f(m);
clock_t start = std::clock();
for (int i = 0; i < 1000; ++i)
foo(1000000, &a[0], &b[0], &c[0], &d[0], &d[1], &f[0], &f[1000]);
double duration = (std::clock() - start)/(double)CLOCKS_PER_SEC;
cout << "Finished in " << duration << " seconds [CPU Clock] " << endl;
}
Можете ли вы дать мне работоспособный пример, чтобы оптимизировать его с более высокой производительностью? Любой компилятор хорош, как компилятор Intel C++ и визуальный компилятор C++. Пожалуйста, предложите процессор с хорошей производительностью, чтобы выполнить такую работу.
Вопрос звучит довольно широко, но я дам один конкретный совет: вы проверили, что код векторизован? – Petr
вы можете попробовать openmp '#pragma omp parallel for' см. Https://en.wikipedia.org/wiki/OpenMP – johngull
Я использую visual C++ и он векторизован. Не уверен, что я могу получить лучшую производительность, чем авто-векторизация компилятора. – user1899020