最近、Herb Sutter は"Modern C++: What You Need to Know"について素晴らしい講演を行いました。この講演の主なテーマは、効率と、データの局所性とメモリへのアクセスがどのように重要かということでした。彼はまた、メモリ (配列/ベクトル) の線形アクセスが CPU によってどのように愛されるかについても説明しています。彼は、このトピックに関する別の古典的な参考文献「Bob Nystrom によるゲーム パフォーマンス」から 1 つの例を取り上げました。
これらの記事を読んだ後、プログラムのパフォーマンスに影響を与える 2 種類のキャッシュがあることがわかりました。
- データキャッシュ
- 命令キャッシュ
Cachegrindツールは、プログラムの両方のキャッシュ タイプ インストルメンテーション情報も測定します。最初のポイントは、多くの記事/ブログで説明されており、データキャッシュの効率 (データの局所性) を達成する方法です。
しかし、トピック命令キャッシュと、パフォーマンスを向上させるためにプログラムで注意すべきことについては、あまり情報が得られませんでした。私の理解によると、私たち(プログラマー)は、どの命令またはどの順序が実行されるかをあまり制御できません。
小さな C++ プログラムで、このカウンター (つまり、命令キャッシュ) が私たちのプログラムの書き方によってどのように変化するかを説明できれば、本当に素晴らしいことです。この点に関して、プログラマーがより良いパフォーマンスを達成するために従うべきベストプラクティスは何ですか?
私たちのプログラムが(ベクトルとリスト)を同じように行う場合、データキャッシュのトピックについて理解できることを意味し、2番目のポイントについて説明することができます。この質問の主な意図は、このトピックを可能な限り理解することです。