4

私は2D配列でいくつかの計算を行っており、4つの異なる方法で配列を通過する必要があります

for(int i=0; i < array_size; i++) {
   for(int j=0; j < array_size; j++) {
      #do some computation around [i][j] element
   }
}

for(int i = array_size - 1; i >= 0; i--) {
   for(int j=0; j < array_size; j++) {
      #do the same computation around [i][j] element
   }
}


for(int i=0; i < array_size; i++) {
   for(int j=array_size - 1; j >= 0; j--) {
      #do the same computation around [i][j] element
   }
}



for(int i = array_size - 1; i >=0; i--) {
   for(int j = array_size - 1; j >= 0; j--) {
      #do the same computation around [i][j] element
   }
}

問題は、まず、計算のコードが長く、将来変更される可能性があることです。次に、アレイが巨大であるため、ここでもパフォーマンスが問題になります。

コードの重複を回避し、パフォーマンスを維持する方法があるかどうか疑問に思っていました。コードを関数に抽出すると、おそらくパフォーマンスが低下するためです。

4

1 に答える 1

5

インライン関数を使用する場合、コンパイラがインライン化を行う可能性が高いため、必要な結果が得られます。

inline void work(int i, int j) { ... }

これについてもっと科学的になりたいと思っていて、この機能にかなりの時間がかかる場合は、プロファイラーに投資することをお勧めします。オープンソース側では、gprofを推奨する人もいます。プロプライエタリな面では、Intel の VTuneを推奨する人 (私を含む) もいます。

于 2013-08-02T15:54:32.330 に答える