前回(2022年3月17日の日記参照)同様に自治体の接種会場に行きました。ワクチンは前回同様にモデルナ製です。時期的には5回目の接種時期ですが、私はうっかりしていて1回行くのを忘れてしまい、今回が4回目の接種です。いつもながら看護師を始めとした医療従事者の皆様は非常に親切かつ効率的に働いていました。マメな世の中の人はみな5回目の接種だからか、接種会場では「5回目の接種でよろ......あら?4回目です?」って2度ほど聞かれました。ワクチンって打つ人は毎回打つし、打たない人は全然打たないのかなあ?COVIDのワクチンは他のワクチンと比べると副作用が結構強いですよね。熱は解熱剤で何とかなるんですが、とにかく肩が痛い。15:41)コメント一覧コメントはありません。RISC-V最近はRISC-Vのシングルボードコンピュータ(SBC)が市販されています。嬉しい時代になりました。これからのお買い物の参考としてリストアップしました。18:08)コメント一覧コメントはありません。ベンチマークFizzBuzzの実装は簡単ですが、可能な限り高速に出力しようとするとなかなか面白い遊びになります。今回は実装の改善ではなく、コンパイラを変えたらどうなるか試しました。gccとclangのどちらが速いかは場合によるみたいで、一筋縄ではいかないです。基本戦略ソースコードが散らかっていたので再整理し、実装も少し見直してシンプルにしています。最適化のアイデアや仕組みは今まで解説した通りです。20231019_fizzbuzz_simple.c第1回で紹介(2023年9月21日の日記参照)した、条件分岐と剰余演算とprintf()を使った単純な実装です。全てはここから始まりました。20231019_fizzbuzz_base.c第1回で紹介(2023年9月21日の日記参照)した、独自のitoa()を実装した単純な実装です。実装の主眼はそちらではなく、ダブルバッファリングとvmsplice()を導入して、以降の改善で出力側がボトルネックにならないようにしています。20231019_fizzbuzz_30.c第1回で少し紹介(2023年9月21日の日記参照)した、一度に30個処理することで条件分岐や剰余演算を省いた実装です。20231019_fizzbuzz_offset.c第2回で紹介(2023年9月22日の日記参照)した、桁上がりと文字列変換の効率を両立したエレガントなアルゴリズムを用いた実装です。20231019_fizzbuzz_div10.c第6回で紹介(2023年10月12日の日記参照)した、30個まとめるアイデアをもう一歩改善した実装です。20231019_fizzbuzz_sse.c第5回で紹介(2023年10月9日参照)した、オフセット0xf6アルゴリズム(仮)をSIMD命令(SSE4.1)を使って最適化した実装です。各最適化のアイデアは基本的に独立しており順不同で適用できますが、いくつか依存関係があります。1桁落とし自分で実装してみたい人以外は気にしなくて良いと思います。J4205)で測定した結果のみを載せます。0m1.875sコンパイラの種類も変えて測定した結果を載せます。J4205でSSE版の実装を連続で実行すると負荷が掛かりすぎる(?)のか、サーマルスロットリングに引っかかるのか、極端に速度が低下してしまうことがあるため、30秒くらい間を空けて実行しています。-O3でしたが、常にclangの生成するコードが速い訳でもなければ、場合によってはO3がOsより遅くなることもありまして最適化の奥深さを感じます。ソースコードソースコードはこちらからどうぞ。21:19)コメント一覧コメントはありません。08:30)「おー、面白いですね。最終勤務日でした、入門カードや会社のPCを返却してきました。マンガ紹介一覧が欲しくなったので作りました。マンガ紹介お気に入りのマンガ紹介シリーズ。最近完結した短めの作品を紹介します。