2025W13
やりたい事
- PiConでWikipediaリーダーを作る
- 重箱PCを作る
やった事
- PiCon
- 画面描画ベンチマークを作って10倍速
- Wikipediaリーダーを作った
- ETL
- クロージャを実装
学んだ事
- ARMは基本リトルエンディアン
- (Micro)Pythonはちゃんと遅い
- ループアンローリングが効く
- 配列アクセスが遅い
- 6000件を線形探索したらCでも遅い、2分探索したら早くなった。
- SDカードに1.5M個のファイルを置くのは遅い。
- ループバックマウントでイメージ作ってddした方が早い。
記録
- 20250324
- PiCon
- とりあえずベンチマークを書きはじめる。
- 定型文を1画面文表示する時間を計測する。
- 英語と日本語。
- PiCon
- 20250325
- ETL
- フィボナッチを計算しようとしたら、クロージャがなくてできなかった。
- がんばってクロージャを実装した。
- ETL
- 20250326
- PiCon
- ベンチマークをはじめた。
- 多少ブレがありそう。10回やって平均を取るか。
- A: fonts.dat(2分探索)
- 英語: 7.251sec 日本語: 7.142sec
- B: ネイティブ関数(線形探索)
- 英語: 7.195sec 日本語: 5.805sec
- C: フォントの読み込みをやめて縦線を描画
- 英語: 20.283sec 日本語: 15.720sec
- D: 1ピクセルごとではなく1文字ごと(256ピクセルごと)転送
- 英語: 6.493sec 日本語: 4.333sec
- E: 8ビットカラー(1文字ごと転送)
- 英語: 3.360sec 日本語:1.495sec
- F: CPUクロックを200Mhzにオーバークロック
- 英語: 2.109sec 日本語:0.942sec
- G: SPI通信をコメントアウト
- 英語: 1.823sec 日本語:0.740sec
- PiCon
- 20250327
- PiCon
- ベンチマーク
- H: 8ビットカラー(1文字ごと転送)
- 英語: 3.394sec 日本語: 1.517sec
- I: SPI通信をコメントアウト
- 括弧の中はHとの相対
- 英語: 2.940(-0.454)sec 日本語: 1.197(-0.320)sec
- J: フォントルックアップをコメントアウト(豆腐で埋める)
- 英語: 1.927(-1.467)sec 日本語: 1.472(-0.045)sec
- K: フォントをバッファに詰める部分をコメントアウト
- 英語: 2.647(-0.747)sec 日本語: 0.905(-0.611)sec
- L: バッファをループの中で確保するのをやめる。
- 逆に0で埋める必要がある。
- 英語: 3.813sec 日本語: 1.806sec
- M: ループアンローリング
- 英語: 3.081(-0.313)sec 日本語: 1.272(-0.245)sec
- KとMを比べると、40%ぐらい減ってる。すげぇ。
- 英語のフォントルックアップの結果をどう解釈するべき?
- ルックアップ回数は英語:479で日本語:373
- 回数あたりにすると、英語3ms vs 日本語0.1ms
- あー、これ文字のみっちり度に依存するのか。
- N: Hを元に、フォントを読んだ後、豆腐で埋める。
- 英語: 3.876sec 日本語: 1.856sec
- JとNを比較すると、英語: -1.949sec 日本語: -0.384sec
- 1文字あたり英語:4.069ms 日本語:1.029ms
- やっぱり日本語の方が早い。
- O: ‘あ’と’A’で画面を埋める。
- 英語: 4.87sec 日本語: 2.503sec
- あ、良くみたら、フォント的にはアルファベットの方がコードが後ろだった。
- 英語表示で考えてみる。
- 13.3%がSPI
- 43.2%がフォントルックアップ
- 22.0%が描画
- ルックアップして描画するAPIをCで作ればいいかな?
- P: 描画までCでやった。
- 英語: 2.409(-0.985)sec 日本語: 0.724(-0.793)sec
- 思ったより早くならない、コンテキストスイッチ?
- 見た感じフォントを線形探索してるのが駄目みたい。
- 二分探索を実装したが、動かない。
- H: 8ビットカラー(1文字ごと転送)
- ベンチマーク
- PiCon
- 20250328
- PiCon
- ベンチマーク
- 寝てたら気がついた。ARMはビックエンディアンだと思い込んでたが、リトルエンディアンだ。
- 線形探索では、単に一致するかだけを見てるから、エンディアン関係ないが、二分探索だと順序がおかしくなる。
- Q: C言語で二分探索
- 英語: 0.142sec 日本語:0.112sec
- もう10%ぐらい行きたいが。まあ、いいことにするか。
- 最初と最後の比較動画
- 寝てたら気がついた。ARMはビックエンディアンだと思い込んでたが、リトルエンディアンだ。
- SDCard
- この実装を使ってる
- 読めない。
- タイムアウトを伸ばしたり、いろいろコードを弄ったが駄目だった。
- SDカードを変えたら読めた。
- ベンチマーク
- 走ってきた。
- PiCon
- 20250329
- PiCon
- SDCard
- 読めるSDカードにWikipediaデータを入れた。
- 1.5M個で8GBのテキストファイル
- 8時間たっても300kファイルぐらいしかコピーできなかった。
- 一旦、ループバックファイルシステムを用意して、そこにコピーした(30分ぐらい)
- イメージをddでコピーしたら1時間ぐらいだった。
- 何か途中でエラーがでて止まって、カーネルがエラー出してた。
- ひょっとしたら、どっか壊れてるかも。
- ランダムにファイルを1つ選んで画面に表示するプログラム書いた。
- スクロールしてっちゃって見えない。
- ページャーがいるな。
- 読めるSDカードにWikipediaデータを入れた。
- SDCard
- PiCon
- 20250330
- PiCon
- SDCard
- アドホックなページャー的なのを作った。
- SDCard
- 立方体型スマホスタンド
- 今週3Dプリンタを使ってない事に気がついたので、サクっと設計して印刷。
- PiCon
意見、ご感想、コメントはフォームにどうぞ。