Оптимизация скриптов C / C ++

0

У меня есть 3 матрицы, gX, gY и gNorm, а один для цикла:

for(y=1; y<n-1; y++){
      int base = y*this->_nxsIn;
      for(x=1; x<n-1; x++){ 
          i1 = base + x;
          i2 = i1 + 1;
          i3 = i1 + n;
          den = ( (gX[i1]+gY[i1])*gNorm[i1] - gX[i2]*gNorm[i2] - gY[i3]*gNorm[i3];
}

Если я gX * gNorm продукты gX * gNorm и gY * gNorm следующим образом:

for(y=0; y<n; y++){
      int base = y*n;
      for(x=0; x<n; x++){
           i = base + x;
          GxGnorm[i] = gX[i]*gNorm[i];
       }
   }

//Gy * GNorm

for(y=0; y<n; y++){
     int base = y*n;
     for(x=0; x<n; x++){
          i = base + x;
         GyGnorm[i] = gY[i]*gNorm[i];
      }
}


for(y=1; y<this->_nysIn-1; y++){
      int base = y*this->_nxsIn;
      for(x=1; x<this->_nxsIn-1; x++){  
      i1 = base + x;
      i2 = i1 + 1;
      i3 = i1 + n;

      i1Sum = GxGnorm[i1] + GyGnorm[i1];         //(gX[i1]+gY[i1])*gNorm[i1];
      float sum1 = GxGnorm[i2] + GyGnorm[i3];    //gX[i2]*gNorm[i2];

     }
}

Могу ли я улучшить время вычислений?

Если нет, то почему?

  • 0
    Да, но вопросы это другое. Почему второй сценарий может быть лучше первого
  • 0
    О, хорошо, не бери в голову.
Теги:
optimization
functional-programming
compiler-optimization

1 ответ

0

Ну, оба сценария имеют одинаковое асимптотическое время, O (n ^ 2), что плохо, если у вас есть существенный набор данных.

Поскольку у вас есть повторения вложенных циклов во втором скрипте, вы фактически увеличиваете постоянный коэффициент. Добавьте к этому затраты на создание дополнительных массивов.

Кроме этих обоих сценариев, они очень похожи. Таким образом, второй скрипт может быть медленнее.

  • 0
    Спасибо вам большое за ваш ответ. Другой вопрос: с точки зрения кеша (общий случай) они ведут себя одинаково?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню