2次元配列をメモリにどのように格納するのか疑問があります。私は明確にするためにあなたに私のコードを提示します。 私は私のメインループでは、このように2次元配列を定義しています:2次元配列のキャッシュミス
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が構造体です。
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);
だから私は私の現在のポイント(i、j)の4人の隣人を検索するつもりです:私は、グリッド(私の2次元配列)にこの計算をするつもりです関数CalculusOnGridで グリッドの
ここで私の質問があります:上と下の要素(つまりタブ[i + 1] []とタブ[i-1] [])上のキャッシュミスを行うか、右と左の要素? (つまり、タブ[] [j + 1]とタブ[] [j-1])
私のコードをスピードアップし、キャッシュミスの数を減らすためのあなたの提案は何ですか?
質問が明確な方法で提案されることを願っています。これが当てはまらない場合は、あなたが欲しいものを私に尋ねてください!
ありがとうございました!
アレッサンドロ
2次元配列ではなく、配列へのポインタの配列です。 – 2501
配列の配列と2次元配列の間の相違点 – Boiethios