技術評論社が刊行している雑誌「Software Design」の2023年4月号は、CPUの特集です。 今回は私も少しだけお手伝いをさせていただきました。
全体的に基本的なCPUの話から、論理演算から始まるCPUの話、ISAの話、マイクロアーキテクチャの話、HPC向けSIMD命令の話と続きます。
大変申し訳ないことにSoftware Designはあまり読んだことがありません(自分自身がハードウェア屋なので)。 これまでにどのような特集が組まれていたのかはよく知らなかったのですが、ハードウェアの話はあまり特集を組まれていなかったですよね。 結構珍しいと思います。
したがって、どこまでの話を書けばよいのかというのは結構悩みどころです。 全体的に見ると、低レイヤからハードウェアの人間にしてみれば結構基本的なことが書いてある気がします。 しかし、ソフトウェア屋さんからすると結構珍しい内容なのかもしれません。
これは自分も記事の中に書いたのですが「ソフトウェア屋さんがハードウェアを知る必要があるか?」という疑問があります。
正直、コンピュータがここまで複雑かつ高度なことができるようになったのは「非常に厳密な抽象化」が一つの理由にあると思っています。 半導体のウエハから、スタンダードセル、論理回路、デジタル回路設計、マイクロアーキテクチャ、命令セットアーキテクチャ、低レイヤABI、オペレーティングシステム、アプリケーションプログラムと、コンピュータには非常に多くの改装が存在します。
これにより、ソフトウェア屋さんはCPUの知識がなくてもアプリケーションを書くことができます。 また、ハードウェア屋さんは命令セットアーキテクチャに準拠するハードウェアさえ作れば、上位レイヤのソフトウェアについて知る必要がありません。
このように「階層化することでうまく仕事を分離する」ことで、コンピュータシステムはうまく成り立っているといえます。
では、あえてソフトウェア屋さんがハードウェアを知る必要とは何なのか。 一つの考え方は、より高い性能を達成するため。 本記事の最後の特集のように、SIMD命令のintrinsicをうまく活用すれば、ソフトウェアの性能を上げることができる。 ハードウェアをより効率的に使い切るために、ハードウェアの知識はある程度必要だ。
でも、だからと言って絶対にハードウェアの知識が必要なわけではない。
本雑誌に登場する、本当に基礎的な話だけ押さえておけば十分なのだ。 必要になれば自分で調べれば十分。 ソフトウェア屋さんは無理にハードウェアを知る必要はないのだ。ハードウェアの設計や、チップの高速化は私たちハードウェア屋さんに任せてほしい。 その代わり、ソフトウェア屋さんには世界を変えることのできるソフトウェアを、思う存分作ってほしいのだ。