Ich habe Zweifel, wie die Maschinen ein zweidimensionales Array im Speicher speichert. Ich werde Ihnen meinen Code vorstellen, um klarer zu sein. Ich Definiere eine zweidimensionale Anordnung auf diese Weise in meiner Hauptschleife:Cache-Fehler in einem zweidimensionalen Array
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 Wo ein Benutzer definierte Variable ist und InternalNode ist eine Struktur. In der Funktion CalculusOnGrid Ich werde dieses Kalkül auf dem Gitter tun (meine zweidimensionale Matrix):
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);
also die vier Nachbarn meines aktuellen Punktes (i, j) Ich gehe zur Suche des Gitters.
Hier ist meine Frage: Ich werde eine Cache Miss auf dem oberen und unteren Element (das heißt Registerkarte [i + 1] [] und Registerkarte [i-1] []) oder auf der rechte und linke Elemente? (Das heißt Tab [] [j + 1] und Tab [] [j-1])
Was ist Ihr Vorschlag für die Beschleunigung meines Codes und die Verringerung der Cache-Fehler?
Ich hoffe, dass die Frage in einer klaren Art und Weise vorgeschlagen wird. Wenn das nicht der Fall ist, frag mich, was du willst!
Vielen Dank!
Alessandro
Das ist kein 2d-Array, sondern ein Array von Zeigern auf Arrays. – 2501
differency zwischen Array von Arrays und 2 dimensionalen Array http://www.c-faq.com/aryptr/dynmuldimary.html – Boiethios