手を動かして本物に触れろ

最近、SNSで浮動小数点数についてのIntelとAMDの違いみたいな話題があった。「IntelのCPUとAMDのCPUで浮動小数点演算の結果が異なる」みたいなツイートが物議を醸していたのだ。実際のところIntelのCPUとAMDのCPUは互換性が高く、同じ命令に対するメーカーによる違いを観測したかったら近似命令に手を出す必要があるのだが、ツイート主がそこまで分かった上で発言していたのかは定かではない。

その流れで、「浮動小数点」みたいな検索ワードでSNSを観察していると、公園の大きな石をひっくり返したような感じで多様な人の発言が目に入る。その中で、四半世紀前からタイムスリップしてきたかのような頓珍漢な発言をしている人がいた。わざわざリンクを貼ることはしないが、そういう人がいたのだ。

その人は、現代の環境(x86_64)で実際にコードを書いて、実際にアセンブリー言語を確認して、実際に実行結果を見てみれば、勘違いに気付けただろう。しかしその人はそれをしなかったので頓珍漢な発言を繰り返す。ああはなりたくないものだ。

私が思うに、技術で飯を食っていこうという人は、なるべく自分の手を動かす習慣を持っていて欲しい。手を動かして本物に触れろ。IT系なら個人レベルで本物に触れられる場合も少なくないはずだ。

文献を読んだだけではわからないことも、手を動かして本物に触ればわかるかもしれない。ネットの情報源が間違っていても、手を動かして本物に触れば間違いに気づけるかもしれない。普段から手を動かして本物に触れていれば、新しい技術が出てきた時に勘が働くかもしれない。

最近はAIが技術記事を生成できるようになった。ネットの情報をまとめるだけならAIの方が得意かもしれない。ネットの情報をまとめただけの記事なら人間が書く必要はないのだ。人間ならではの記事とは何か。書き手の経験が詰まった記事だ。


私はもちろん、本や記事を書く時にはできる範囲で手を動かして動作確認するようにしている。「GHC 9.14の新機能」などの新機能紹介記事はリリースノートの翻訳に留まらず、実際の新バージョンで動作を確認している。その過程でバグを見つけることもあった。明らかな新機能なのにリリースノートに記載がないことに気づいた時もあった。

Binary Hacks Rebooted」で取り上げた内容も、なるべく動作確認するようにした。機械語の書き換えで命令キャッシュのクリア、みたいな話をするなら実際に自己書き換えするプログラムをx86やArmで書いて動作検証する、などだ(その結果が判然としないものだったので本では不用意なことは書かない、ということになったりしたが)。私が書いたパートではないが、Row Hammerの記事があったので手持ちの古いマシンで実証コードを試す、ということもした(対策済みだったのか、再現できなかった)。

最近書いた記事「RISC-Vベクトル拡張(RVV)はじめの一歩:C言語から触ってみる」でも、実際に動かしたからこそ仕様書とコンパイラーの実装の食い違いに気付けている。

実物で試せるようにするためには、多様な動作環境を手元に持っておくことも大事だ。CPUで言えばx86_64、Arm、RISC-Vは最低限揃えたい。浮動小数点数オタクとしてはAVX-512が動く実機も欲しい。OSで言えばWindows、macOS、Linuxを揃えたい(本当はBSD系もあった方が良いのだろうが)。LinuxはVMで動かせるので、ハードウェアとしてはWindows機とMacを手に入れることになる。Windows on Armの実機も欲しいのだが、購入には至っていない。


もちろん、個人レベルでは本物に触れるのが難しいこともある。Intelの最新の命令セット拡張を試すためにSapphire Rapidsを搭載したサーバーやワークステーションの購入に踏み切れる個人は多くはないだろう(それでもクラウドで借りるという手はある)。実用的な大規模言語モデルを自前で訓練できる個人も少ないだろう。

実物がない場合もある。「Binary Hacks Rebooted」で取り上げた内容でも、ArmのFEAT_AFPは当時実際に動かせる環境がエミュレーターを含めて手元に存在しなかったので、仕様書を頼りに書いたプログラムをサンプルコードのリポジトリに載せた(後知恵だが、Apple M3搭載マシンを持っていれば動作確認できたのだろう)。PowerPCやRISC-Vも本当は実物があれば良かったのだろうが、持っていなかったのでエミュレーターで動作確認とした。C23のFENV_ROUNDも、どこかのコンパイラーに実装されたという話は聞かない。

「実際に動かせば白黒つく」ような話ばかりでもない。C言語の規格の解釈が正しいかどうかは、実際のコンパイラーやSanitizerで動かせば判定できるという性質のものではない。


偉そうなことを言っているが、私もあらゆる技術を触っているわけではない。去年くらいから流行っていたAIコーディングエージェントも、私は今年になってからようやく使い始めた。Webやアプリ開発など、世間ではメジャーな技術でも、私がちゃんと触っていないものはたくさんある。それでも、何か有意義な発言をしたいなら最低限それに触っておくようにしたい。


実際に手を動かして本物に触れつつ記事を書くのには、時間がかかる。手っ取り早く記事を量産したいなら面倒な手順は省いて、ネットの情報や 大本営 公式発表、AIの出力を信じて記事を書けばいいだろう。その方が稼げるのだろう。

しかし、私としてはAIが書いた美しい記事よりも、人間の泥臭い経験を詰め込んだ記事の方が価値があると信じている。合理性ではなく、そう信じているのだ。

せっかくなので宣伝もしておこう。本文中で言及した「Binary Hacks Rebooted」の出版社ページはここだ:Binary Hacks Rebooted – O’Reilly Japan 電子版も出版社の方からPDFで入手できる(電子版はAmazonにはない)。

Spread the love