私はc++(MSVS)で少し速度テストを行っていましたが、奇妙な結果が得られました。1つのforループと複数のネストされたforループを使用する速度をテストしていました。コードは次のとおりです。
double testX = 0;
// Single loop executes in roughly 0.04 seconds
for( int i = 0; i < 27000000; i++ ){
testX += 1;
}
// Nested loop executes in roughly 0.03 seconds
for( int x = 0; x < 300; x++ ){
for( int y = 0; y < 300; y++ ){
for( int z = 0; z < 300; z++ ){
testX += 1;
}
}
}
ご覧のとおり、速度の違いはかなり明白です。私はこれを何度も実行しました、そしてそれらは私が見ている平均時間です(これらはglfwGetTime()を使用して計時されます)。
だから私の質問は:なぜですか?私の試験方法は不十分ですか?使用しているループが少なすぎませんか?私はグーグルを検索しようとしました、そして私が見つけた唯一の同様の質問は彼の問題をキャッシュコヒーレンシに関連させました、しかしこれらはループのために空であるため、私はそれが本当に効果があるとは思いませんでした。
どんな助けでも適用されます:)
編集:コメントのおかげで、空のforループを使用するのはおそらくテストの最良の方法ではないことに気づきました...そこで、コードを更新して、いくつかの(非常に)単純な操作をdoubleに実行しました。また、リリースモードでコンパイルしています。ただし、2つの方法は時間的にははるかに似ていますが、2番目の方法はまだわずかに高速です。
そして、はい、これはすべてのテストコードです(タイミング/出力関数を除いていますが、それらは質問に正確に固有ではありません)。