やりたい事

  • PiConでWikipediaリーダーを作る
  • 重箱PCを作る

やった事

  • PiCon
    • 画面描画ベンチマークを作って10倍速
    • Wikipediaリーダーを作った
  • ETL
    • クロージャを実装

学んだ事

  • ARMは基本リトルエンディアン
  • (Micro)Pythonはちゃんと遅い
    • ループアンローリングが効く
    • 配列アクセスが遅い
  • 6000件を線形探索したらCでも遅い、2分探索したら早くなった。
  • SDカードに1.5M個のファイルを置くのは遅い。
    • ループバックマウントでイメージ作ってddした方が早い。

記録

  • 20250324
    • PiCon
      • とりあえずベンチマークを書きはじめる。
      • 定型文を1画面文表示する時間を計測する。
      • 英語と日本語。
  • 20250325
    • 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
  • 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
            • 思ったより早くならない、コンテキストスイッチ?
            • 見た感じフォントを線形探索してるのが駄目みたい。
          • 二分探索を実装したが、動かない。
  • 20250328
    • PiCon
      • ベンチマーク
        • 寝てたら気がついた。ARMはビックエンディアンだと思い込んでたが、リトルエンディアンだ。
          • 線形探索では、単に一致するかだけを見てるから、エンディアン関係ないが、二分探索だと順序がおかしくなる。
          • Q: C言語で二分探索
            • 英語: 0.142sec 日本語:0.112sec
            • もう10%ぐらい行きたいが。まあ、いいことにするか。
        • 最初と最後の比較動画
      • SDCard
        • この実装を使ってる
        • 読めない。
          • タイムアウトを伸ばしたり、いろいろコードを弄ったが駄目だった。
        • SDカードを変えたら読めた。
    • 走ってきた。
  • 20250329
    • PiCon
      • SDCard
        • 読めるSDカードにWikipediaデータを入れた。
          • 1.5M個で8GBのテキストファイル
          • 8時間たっても300kファイルぐらいしかコピーできなかった。
          • 一旦、ループバックファイルシステムを用意して、そこにコピーした(30分ぐらい)
          • イメージをddでコピーしたら1時間ぐらいだった。
            • 何か途中でエラーがでて止まって、カーネルがエラー出してた。
            • ひょっとしたら、どっか壊れてるかも。
        • ランダムにファイルを1つ選んで画面に表示するプログラム書いた。
          • スクロールしてっちゃって見えない。
          • ページャーがいるな。
  • 20250330
    • PiCon
      • SDCard
        • アドホックなページャー的なのを作った。
    • 立方体型スマホスタンド
      • 今週3Dプリンタを使ってない事に気がついたので、サクっと設計して印刷。