Наложение указателей и улучшение производительности

Быстрый вопрос (надеюсь, это понятно).

Мне сказали, что производительность при рассмотрении скорости может быть значительно улучшена, если вы решите проблему сглаживания указателя (всегда перезагружайте значения из памяти, потому что компилятор не уверен, что указанное значение не было изменено другим указателем). Это можно решить, сделав указатели постоянными, например:

 void multiply (float a[2][2],float b[2][2], float c[2][2]){
 a[0][0] = b[0][0]*c[1][1];
 a[0][1] = b[1][1]*c[0][0];
 a[1][0] = b[0][1]*c[1][0];
 a[1][1] = b[1][0]*c[0][1];

   }
  // function below is supposedly much faster

  void multiply (float a[2][2],float b[2][2], float c[2][2]){

     const float b00(b[0][0]),b01(b[0][1]),b10([1][0]),b11([1][1]);
     const float c00(c[0][0]),c01([0][1]),c10(c[1][0]),c11(c[1][1]);

     a[0][0] = b00*c11;
     a[0][1] = b11*c00;
     a[1][0] = b02*c10;
     a[1][1] = b10*c01;
  }

Мой вопрос заключается в том, как реализовать эту функцию для гораздо большего массива данных в цикле, таких как:

  void multiply (float a[100][100],float b[100][100], float c[100][100]){

      // cant possibly declare 100 pointer here
      const float b00(b[0][0]),b01(b[0][1]),b10([1][0]),b11([1][1]).......
      const float c00(c[0][0]),c01([0][1]),c10(c[1][0]),c11(c[1][1])......


      for(i=0;1<100;i+=3){
          for(i=0;1<100;i+=3){

              a[i][j+1] = b[i][j]*c[i][j];
              a[i][j+2] = b[i][j+1]*c[i][j+1];
              a[i][j+3] = b[i][j+2]*c[i][j+2];

              a[i+1][j+1] = b[i+1][j]*c[i+1][j];
              a[i+2][j+2] = b[i+1][j+1]*c[i+1][j+1];
               // and so on..
          }
      }
  }

0 ответов

Другие вопросы по тегам