У меня есть низкоуровневая функция, которая будет называться миллионы раз, поэтому она должна быть очень эффективной. Когда я использую «gprof» в Linux, я обнаружил, что часть кода занимает 60% от общего вычисления функции (остальная часть - для решения корней кубического уравнения). Здесь Point - структура данных имеет x и v, которые будут преобразованы в матрицу для последующего использования. Идея состоит в том, чтобы вычесть каждую строку по первой строке. Код показан нижеКак улучшить производительность массива 2d в C++
double x[4][3] = {0}, v[4][3] = {0};
for (int i = 0; i < 4; ++i){
for (int j = 0; j < 3; ++j){
v[i][j] = Point[i]->v[j];
x[i][j] = Point[i]->x[j];
}
}
for (int i = 1; i < 4; ++i){
for (int j = 0; j < 3; ++j){
v[i][j] = v[0][j] - v[i][j];
x[i][j] = x[0][j] - x[i][j];
}
}
Может ли кто-нибудь показать мне проблему с этим кодом? Почему это так плохо?
Если ваш код работает, но может использовать улучшение, это не по теме здесь. Пожалуйста, опубликуйте его на Code Review. – Carcigenicate
Вы позволили компилятору сделать все возможное, установив уровень оптимизации 3 или аналогичный? –
Что такое 'Point'? –