STM32L443 SRAM上でコード実行
STM32L443のドキュメントを、つらつら読んでいると、SRAMは常にノーウエイトアクセスとある。
あれ。じゃあ、クロックが高くなると、FLASHよりもSRAMの方に
コードを置いて実行した方が速いのか?
さっそく実行してみる。
簡単な時間待ちforループだけの関数を作り、
SRAM上に配置したものと、FLASH上に配置したもので、速度比較する。
SRAM上に関数単位で実行コードを配置する方法は、
このブログの、15年ころの記事にまとめてある。
自分で書いたものを参考にテストコードを書く。
------
あれ?4ウエイトサイクルも入るFLASHの方が、
0ウエイトのSRAMよりもかなり速いな。
これはあれだ...試しにプリフェッチと、キャッシュを止めてみると、
今度はSRAMの方が相当速い。
FLASHはウエイトが多くても、この程度の小さな関数では
プリフェッチと読み込みバス幅の恩恵が大きくて、取り返せているようだ。
キャッシュが効かないような大きな関数とか、(チップ的に)
大量のデータにアクセスしない限りは、FLASH優位なのか。
マウスの最短経路解析処理くらいの規模では、どっちが速くなるのか。
実際にやってみて、メリットがあるようであれば、
SRAM上でコード実行を検討しよう。
------
STM32F303では、さらに早いCCMなんてものが実装されているのだが。
こっちでは実装されてない処を見ると、いまいちだったのか、
燃費が悪くて、見送られたのか。
| 固定リンク | 0

コメント