У меня есть сомнения в том, как машины хранят двумерный массив в памяти. Я представлю вам свой код, чтобы быть более четким. я определяю двухмерного массива в этом случае, в моем главном цикле:Cache Misses на двумерном массиве
int main()
{
int i;
internalNode**tab =(internalNode **)malloc(sizeof(internalNode *)* DIM);
for (i=0; i<DIM ; i++)
tab[i] = (internalNode *)malloc(sizeof(internalNode) * DIM);
//CODE
CalculusOnGrid(tab,DIM);
}
Где DIM является определенной пользовательской переменной и internalNode является структурой. В функции CalculusOnGrid я буду делать это исчисление на сетке (мой двумерный массив):
for(i=1;i<DIM-1;i++)
for(j=1;j<DIM-j;i++)
tab[i][j].temperature_new = 0.25*tab[i+1][j].temperature+tab[i-1][j].temperature + tab[i][j+1].temperature + tab[i][j-1].temperature);
Так я буду искать для 4 соседей моей текущей точки (I, J) сетки.
Вот мой вопрос: я собираюсь сделать миссию кэша на верхнем и нижнем элементах (это означает вкладку [i + 1] [] и вкладку [i-1] []) или на правый и левый элементы? (т. е. вкладка [] [j + 1] и вкладка [] [j-1])
Какое у вас предложение ускорить мой код и уменьшить количество промахов кэш-памяти?
Я надеюсь, что этот вопрос предлагается в ясной форме. Если это не так, спросите меня, что вы хотите!
Спасибо!
Алессандро
Это не 2d-массив, а массив указателей на массивы. – 2501
отличия между массивами массивов и 2 размерными массивами. Http://www.c-faq.com/aryptr/dynmuldimary.html – Boiethios