私はいくつかの C コードを分析して最適化するつもりなので、最初に、最適化したい関数がメモリ バウンドか CPU バウンドかを確認する必要があります。一般に、これを行う方法はわかっていますが、浮動小数点演算のカウントと使用されるデータのサイズの分析についていくつか質問があります。分析したい次の for ループを見てください。配列の値は double です (つまり、それぞれ 8 バイトを意味します)。
for(int j=0 ;j<N;j++){
for(int i=1 ;i<Nt;i++){
matrix[j*Nt+i] = matrix[j*Nt+i-1] * mu + matrix[j*Nt+i]*sigma;
}
}
1) 浮動小数点演算はいくつ数えますか? 私は 3*(Nt-1)*N について考えました...しかし、配列内の操作もカウントする必要がありますか?
2) どのくらいのデータが転送されますか? 2* ((Nt-1)*N) 8Byte または 3 ((Nt-1)*N)*8Byte. つまり、マトリックスのすべてのエントリをロードする必要があります。計算後、新しい値が配列のそのインデックスに保存されます (これらは 1 ロードと 1 ストアです)。ただし、この値は次の計算に使用されます。したがって、別のロード操作が必要ですか、それともこの値 (matrix[j*Nt+i-1]) はロード操作なしで既に使用可能ですか?
ありがとう!!!