古い格言「吸うと見る」がここでは適切だと思われる。我々はしばしば、最も一般的なプロセッサは4/8/16ビットマイクロであり、奇妙で素晴らしいアプリケーション固有のアーキテクチャーと適切な奇妙なベンダー固有のコンパイラーがそれに付随することを忘れています。コンパイラには、コンパイラが「より良い」コードを生成するのを助ける(または混乱させる)ためのコンパイラ拡張が頻繁にあります。
2000年代初頭の1つのDSPは、パイプライン内で並列にクロックサイクルごとに8つの命令を実行しました(複雑 - 「ロード+増分+乗算+加算+ラウンド」)。これが機能するための前提条件は、すべてが事前にレジスタにプリロードされなければならないということでした。これは、レジスタが明らかに(いつものように)プレミアムであることを意味しました。このアーキテクチャでは、空きレジスタに結果を格納し、後で再計算するために並列化できない空きスロット(同じサイクルで他の命令を使用できない命令があります)を使用することがよくありました。コンパイラはこれを "正しい"ものにしましたか?はい、その結果を後で再利用することがしばしばありました。その結果、実行速度が遅くなったレジスタがないためにパイプラインが停止してしまいました。
だから、コンパイルしてコンパイルしたときにコンパイルして、それを調べて、それをプロファイリングして、いつコンパイラが「正しい」状態になって修正できるかを確認してください。言語によってサポートされていない追加の意味情報がなければ、「正しい」ものが何であるかを知ることは本当に難しい。
結論:吸うと
インデックスが基本的な整数型の場合、ほとんどの場合、最適化が有効になります。 – StoryTeller
最適化を有効にしてビルドして、生成されたコードをチェックするのはなぜですか? –
コンパイルしてアセンブリを確認します。おそらくそれは可能だろうが、私は疑わしい。 – NathanOliver