STM32H7を使ってみる4 -キャッシュ・ワンダリング(中篇)-
←前回                       次回→
自宅のPC環境を完全にWin10に切り替えました。
ハードウエアも11年ぶりに新調してメモリも16GBも乗っけてます!!!!
システムディスクも最新のM.2SSDに換装してこれで向こう20年は戦うことが
できるでしょう!!!!!
さて、今回は前回説明した各種キャッシュ設定がパフォーマンスにどう影響
してくるのかを実動作を交えて説明していこうとおもいます。

比較ということでlibpng(倍精度浮動小数点演算あり)のデコード/表示時間を計測して
いきます。テスツ用png画像は自作の虹裏的美少女イラスツを使用してまいります!
突っ込みは受け付けません!!いないさんかわいい!!1!!!1!

また、png画像を読み出すストレージは以前紹介した産業用MicroSDの64GB品を使用
します。安くて信頼性があって使い勝手が良いので重宝します♥
●キャッシュ無し

まずはデータキャッシュそのものを無効にします。
本当はAXI-SRAMだけ無効にしたかったのですがなぜかpngのデコード時にHardFaultに
なってしまったので仕方なくぜんぶキャッシュOFFにしてます。
キャッシュ効いてないせいで遅いのですがAXIバスのクロックが200MHzと高速なので
それでも十分"早い"ですね…
●ライトバック&ライトアロケートなし

こちらはいつもので公開しているキャッシュ設定となります。
ライトスルーのエラッタが認知されてしまった今これに頼らざるを得ません。
●ライトバック&ライトアロケートあり

ライトアロケートなしとほとんど変わらず誤差程度です。
これならライトアロケートありでいいじゃんとお思いでしょうが…

残念ながらLTDCと相性が非常に悪くLTDCが管轄するフレームバッファ領域にこの
設定を行っているとご覧の通り表示が崩れてしまいます…
一応対策できないこともないですがキャッシュコントロール関数をあちこちに放り
こまないといけないため全く現実的ではないです。
それならSDRAMにはその設定しないでAXI-SRAMだけにすればとお思いででしょうが
ねむいさんもそうしようと思ったのですがなんとSAIとも相性が悪く高ビットレートの
音声再生時にブチブチノイズが入りやがりますorzこちらもあちこちでキャッシュコント
ロールしまくったら問題ないのですがそんなんするくらいならライトバック+ライト
アロケートなしのほうでいいやとなり今に至った次第です。
●ライトスルー

今となってはエラッタで禁じ手になったライトスルーモードです。
ライトバックより遅いですがキャッシュ無しより断然早い理由は実メモリに書き込みに
いったときにライトバッファが効いて速度が上がっているからです。
いちいちcleanしないで済むから楽だったんですけどねライトスルー…
●おまけ・カリカリチューンのF7

STM32F769I-Discoでも同じMicroSDを使ってやってみました。
フレームバッファを除くDMAの送受信バッファ・各変数・ヒープ領域をキャッシュ
しなくても超高速に動作できるDTCMに設定して同じようにやってみたのがこちら。
H7と比べるとコアクロックが1/2の200MHz動作なのですが意外と健闘してます。
F7シリーズではDTCM領域でもDMAできるのでこのような芸当ができるのですが
H7は直接できなってしまいましたのでライトスルーが使えなくなったのもあって
DMAするだけでもいろんな工夫が必要です。
次回はSTM32H7でキャッシュを効かせた状態でDMAをどのように安定して動かして
いけば良いのかを解説していこうと思います。
20191104追:
jujurouさんがF7ではSDRAMのライトバック+ライトアロケートなしでもDMA2Dで
表示おかしくなると報告されているのでねむいさんも追って知らべてみました…
が…(STM32F746G-Discoveryで試した)


ううむねむいさんのいつものじゃどういう状況でもデータ化けしてぬぇ…
※9月度版の時点でライトバック版に変更済みです。
キャッシュを効かせたRAM領域にフレームバッファを確保してLTDCを動作させている
時点でDMAしてる時と同じようになりDMA2DせずともキャッシュとLTDCコントローラ
との干渉が発生してしまいます。これはライトアロケートあるなしに関係は
ないのでライトバックではデータ転送前に必ずキャッシュのCleanが必要です。
ねむいさんのいつものでこれに引っかかった例がChaNさんのjpegライブラリを使い
jpegファイルを表示させようとした時で、disp_blt関数内で転送直前にクリーンを
行うことにより対策しております。
そして前回も簡単に説明しましたがキャッシュコントロールをしているにもかかわらず
ライトアロケート時に表示が崩れてしまう原因は書き込みキャッシュミス時に実メモリ
からデータを読み出しキャッシュラインに展開している動作そのものにあります。
実メモリ(SDRAM)からのread動作によってキャッシュラインが逆汚染され、結果として
寄生Evictionが起こりまくり表示が崩れてしまうことになります。
データキャッシュサイズ上限以下の容量でチマチマ書き換える…たとえばFONTX2の
表示とかの時に一番崩れやすくなります。

↑こんな感じに崩れます。
これはLTDCに限らずSAIとかの基本書き込みっぱなしのぶっ放しのペリフェラルでも
起こりますが長くなりそうなので次回にでも解説します。
	

免責・連絡先は↑のリンクを
↓SNSもやってます↓
powered by まめわざ
	- ARM/STM32 (119)
 - OpenOCD (27)
 - ARM/NxP (34)
 - ARM/Cypress (5)
 - ARM/Others (3)
 - ARM/Raspi (1)
 - AVR (13)
 - FPGA (4)
 - GPS/GNSS (20)
 - MISC (86)
 - SDCard_Rumors (1)
 - STM8 (2)
 - Wirelessなアレ (16)
 - おきぱ (1)
 - ブラウザベンチマーク (29)
 - 日本の自然歩道 (27)
 
	- GNSSモジュールを試用する21 -SAM-M10Qが壊れた…!?と思ったら直せた(おまけあり)-
⇒ Kenji Arai (05/29) - GNSSモジュールを試用する21 -SAM-M10Qが壊れた…!?と思ったら直せた(おまけあり)-
⇒ ねむい (05/26) - GNSSモジュールを試用する21 -SAM-M10Qが壊れた…!?と思ったら直せた(おまけあり)-
⇒ Kenji Arai (05/24) - 中部北陸自然歩道を往く -砺波平野の県境を駆け抜ける!-
⇒ ねむい (12/18) - 中部北陸自然歩道を往く -砺波平野の県境を駆け抜ける!-
⇒ ひかわ (12/15) - STM32U0はぢめました
⇒ ねむい (08/07) - STM32U0はぢめました
⇒ ひかわ (07/28) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ねむい (05/17) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) 
	- October 2025 (1)
 - September 2025 (1)
 - August 2025 (1)
 - July 2025 (1)
 - June 2025 (1)
 - May 2025 (1)
 - April 2025 (1)
 - March 2025 (1)
 - February 2025 (1)
 - January 2025 (1)
 - December 2024 (2)
 - November 2024 (1)
 - October 2024 (1)
 - September 2024 (1)
 - August 2024 (1)
 - July 2024 (1)
 - June 2024 (1)
 - May 2024 (1)
 - April 2024 (1)
 - March 2024 (1)
 - February 2024 (2)
 - January 2024 (1)
 - December 2023 (4)
 - November 2023 (2)
 - October 2023 (2)
 - September 2023 (1)
 - August 2023 (2)
 - July 2023 (1)
 - June 2023 (2)
 - May 2023 (3)
 - April 2023 (1)
 - March 2023 (1)
 - February 2023 (1)
 - January 2023 (1)
 - December 2022 (2)
 - November 2022 (1)
 - October 2022 (1)
 - September 2022 (1)
 - August 2022 (1)
 - July 2022 (1)
 - June 2022 (1)
 - May 2022 (1)
 - April 2022 (1)
 - March 2022 (1)
 - February 2022 (1)
 - January 2022 (1)
 - December 2021 (2)
 - November 2021 (2)
 - October 2021 (1)
 - September 2021 (1)
 - August 2021 (1)
 - July 2021 (1)
 - June 2021 (1)
 - May 2021 (1)
 - April 2021 (1)
 - March 2021 (1)
 - February 2021 (1)
 - January 2021 (1)
 - December 2020 (3)
 - November 2020 (1)
 - October 2020 (1)
 - September 2020 (1)
 - August 2020 (1)
 - July 2020 (1)
 - June 2020 (2)
 - May 2020 (1)
 - April 2020 (1)
 - March 2020 (1)
 - February 2020 (1)
 - January 2020 (1)
 - December 2019 (3)
 - November 2019 (1)
 - October 2019 (1)
 - September 2019 (2)
 - August 2019 (1)
 - July 2019 (1)
 - June 2019 (1)
 - May 2019 (1)
 - April 2019 (1)
 - March 2019 (1)
 - February 2019 (1)
 - January 2019 (1)
 - December 2018 (3)
 - November 2018 (2)
 - October 2018 (1)
 - September 2018 (1)
 - August 2018 (1)
 - July 2018 (1)
 - June 2018 (1)
 - May 2018 (1)
 - April 2018 (2)
 - March 2018 (1)
 - February 2018 (1)
 - January 2018 (1)
 - December 2017 (2)
 - November 2017 (2)
 - October 2017 (1)
 - September 2017 (1)
 - August 2017 (1)
 - July 2017 (1)
 - June 2017 (1)
 - May 2017 (1)
 - April 2017 (1)
 - March 2017 (2)
 - February 2017 (2)
 - January 2017 (2)
 - December 2016 (7)
 - November 2016 (2)
 - October 2016 (2)
 - September 2016 (1)
 - August 2016 (1)
 - July 2016 (1)
 - June 2016 (1)
 - May 2016 (2)
 - April 2016 (1)
 - March 2016 (2)
 - February 2016 (1)
 - January 2016 (1)
 - December 2015 (3)
 - November 2015 (1)
 - October 2015 (3)
 - September 2015 (2)
 - August 2015 (2)
 - July 2015 (3)
 - June 2015 (3)
 - May 2015 (4)
 - April 2015 (2)
 - March 2015 (4)
 - February 2015 (1)
 - January 2015 (3)
 - December 2014 (3)
 - November 2014 (2)
 - October 2014 (1)
 - September 2014 (2)
 - August 2014 (2)
 - July 2014 (3)
 - June 2014 (2)
 - May 2014 (1)
 - April 2014 (1)
 - March 2014 (4)
 - February 2014 (4)
 - January 2014 (3)
 - December 2013 (5)
 - November 2013 (4)
 - October 2013 (3)
 - September 2013 (2)
 - August 2013 (2)
 - July 2013 (2)
 - June 2013 (3)
 - May 2013 (2)
 - April 2013 (2)
 - March 2013 (2)
 - February 2013 (2)
 - January 2013 (3)
 - December 2012 (4)
 - November 2012 (2)
 - October 2012 (2)
 - September 2012 (4)
 - August 2012 (1)
 - July 2012 (3)
 - June 2012 (2)
 - May 2012 (3)
 - April 2012 (3)
 - March 2012 (2)
 - February 2012 (3)
 - January 2012 (3)
 - December 2011 (5)
 - November 2011 (3)
 - October 2011 (2)
 - September 2011 (2)
 - August 2011 (2)
 - July 2011 (2)
 - June 2011 (2)
 - May 2011 (2)
 - April 2011 (2)
 - March 2011 (2)
 - February 2011 (2)
 - January 2011 (3)
 - December 2010 (7)
 - November 2010 (1)
 - October 2010 (1)
 - September 2010 (1)
 - August 2010 (3)
 - July 2010 (4)
 - May 2010 (1)
 - April 2010 (2)
 - March 2010 (2)
 - February 2010 (2)
 - January 2010 (3)
 - December 2009 (3)
 - November 2009 (8)
 - October 2009 (7)
 - September 2009 (5)
 - August 2009 (4)
 - July 2009 (6)
 - June 2009 (6)
 - May 2009 (14)
 - January 1970 (1)
 
Copyright(C) B-Blog project All rights reserved.