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

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

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

 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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]