« 仮組継続中 | トップページ | 空中配線など »

2017年12月17日 (日)

STM32L443 SRAM上でコード実行

STM32L443のドキュメントを、つらつら読んでいると、SRAMは常にノーウエイトアクセスとある。

あれ。じゃあ、クロックが高くなると、FLASHよりもSRAMの方に
コードを置いて実行した方が速いのか?

さっそく実行してみる。
簡単な時間待ちforループだけの関数を作り、
SRAM上に配置したものと、FLASH上に配置したもので、速度比較する。

SRAM上に関数単位で実行コードを配置する方法は、
このブログの、15年ころの記事にまとめてある。
自分で書いたものを参考にテストコードを書く。

------

あれ?4ウエイトサイクルも入るFLASHの方が、
0ウエイトのSRAMよりもかなり速いな。

これはあれだ...試しにプリフェッチと、キャッシュを止めてみると、
今度はSRAMの方が相当速い。
FLASHはウエイトが多くても、この程度の小さな関数では
プリフェッチと読み込みバス幅の恩恵が大きくて、取り返せているようだ。

キャッシュが効かないような大きな関数とか、(チップ的に)
大量のデータにアクセスしない限りは、FLASH優位なのか。

マウスの最短経路解析処理くらいの規模では、どっちが速くなるのか。
実際にやってみて、メリットがあるようであれば、
SRAM上でコード実行を検討しよう。

------

STM32F303では、さらに早いCCMなんてものが実装されているのだが。
こっちでは実装されてない処を見ると、いまいちだったのか、
燃費が悪くて、見送られたのか。

|

« 仮組継続中 | トップページ | 空中配線など »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: STM32L443 SRAM上でコード実行:

« 仮組継続中 | トップページ | 空中配線など »