結論としてはごく当たり前だが、「特性を押さえて適材適所で使うことになるでしょう。GPUやFPGAでOSを走らせるのは難しいです。CPUにハウスキーパー的なことをやらせ、GPUやFPGAには重たいデータ処理をオフロードする形で、使い分ける必要があります」(泉田氏)というところに落ち着く。
ちなみにGPUとFPGAで比べたら、「GPUの方がプログラムを書くのは楽でしょう。CPUのソフトウェアパラダイムのちょっと先にある世界なので、ハードルは低いと思います。一方FPGAとなると、ハードウェアに落とし込む必要があるので、これまでソフトウェアしかやってこなかった人にとってはかなり難しいと思います」(泉田氏)という。
ハードウェアには並列度を高められるメリットがある反面、「ロジックを変えようと思ったら、ハードウェアそのものをプログラムし直す必要があり、それは非常に面倒くさい作業になります。この両極端の間のどこでバランスを取るかを考える必要があります」と泉田氏は述べた。
ただFPGAは、うまく回路を組めたときの効果は絶大だ。「GPUならばCPUと比べて20倍ぐらいの効果が得られと思いますが、FPGAなら、もしかすると100倍、200倍ぐらいの効果が得られるかもしれません。超高速取引のようにスペックが決まっており、コストが高くてもペイする商売ならば、専門家を雇ってでも取り組む価値はあるかもしれません。逆にCPUと比べて20倍速くなれば御の字という話であれば、クラウドのGPUインスタンスでも借りれば楽にできるでしょう」
こういったコストパフォーマンスを事前に試算するベースとして、メニーコア環境向けだが、「Software-Hardware Interface for Multi-many-core(SHIM)」と呼ばれる標準仕様が策定されている。こうした「共通の土俵」が広まれば、「用途に応じて、どのハードウェアを、どう利用するか」の検討が容易になるかもしれない。
もう1つ、泉田氏がハードウェア技術者としての経験を踏まえて強調したことがある。「物理法則からは逃れることができない」ということだ。
泉田氏は、IoT(Internet of Things)が注目を浴びるようになる以前から、IoT的な仕事に携わってきた。IoTの末端に当たるセンサーを開発し、工事現場や吹きさらしの海岸といった過酷な環境での導入、運用を支援してきたそうだ。時には、防水、防塵といった対策を施したにもかかわらず、予想外の現象に悩まされることもあった。
「静かな環境では問題なくデータを拾えたセンサーが、工事現場に持っていくとノイズを出すことがありました。調べてみると、建設機器が引き起こす振動がちょうどうまく干渉する周波数になっていて、とんでもないノイズの原因となっていました」
IoTというと、バックエンドでクラウドとビッグデータ、人工知能を組み合わせたスマートなアーキテクチャというイメージがあるが、物理的現象を分かっていないと、正確なデータは取得できない。「現場では想定していないいろいろな阻害要因が入ってきます。分かりやすいところで言ったら、例えば、雷など自然現象もセンサーデータ取得の阻害要因になります。その対策を行うのが楽しいところでもありますが」(泉田氏)。
これは、FPGAなどのハードウェア設計にもいえることだ。
「ソフトウェアは、コンパイルすれば必ず結果が出ます。けれどハードウェアは、コンパイルしても本当に結果が出るかどうか分かりませんし、極端な話、壊れてしまうかもしれません。ハードウェアは物理原則の基で動きますから、ある回路が『本当にスピードを満たしているか』『ロジックに足りるだけの配線本数があるか』は、コンパイルしてもうまくいかないこともあります。そんなとき“ハードウェア屋”は、『この部分をもっと短くするために回路を変えてみよう』と試行錯誤するわけです。
昔に比べれば、ハードウェア作成もずいぶん楽に、効率良くできるようになったというが、「極限までリソースを使い切ろうとすると、必ずこういう問題に突き当たります」(泉田氏)。
「ソフトウェアは、人間の取り決め、ロジックに基づいて動いてくれます。『例えばインフラのレイヤーのソフトウェアを作った人と、こう取り決めたから、こう動くはずだが動かない』という課題は、作った人に修正を依頼すれば何とかなります。けれどハードウェアの場合、最後に効いてくるのは物理現象です。この消費電力だと壊れたり、ノイズが乗ってきたりという現象も出てくるわけです。物理現象はこちらの言い分を聞いてくれません。人間の頭の中では動くはずのロジックが、物理法則の問題に突き当たって失敗するというのは、ハードウェア特有の問題です」
ソフトウェアは、OSやハードウェアといった下のレイヤーを意識しなくてもコードを書けるような方向に進化してきた。今や、メモリ管理でさえ、あまり意識しなくてもフレームワークやミドルウェアでサポートしてくれる仕組みが用意され、非常に便利な時代になったといえるだろう。
OSやハードウェアを意識しないで済むというのは、ソフトウェア技術者にとってありがたいことではあるのだが、今後は、それを意識する必要性が高まっているということだ。それには、どうすればいいのか。
泉田氏が、ハードウェア技術者とソフトウェア技術者の違いで印象的だった出来事がある。「あるデータベース技術者と一緒に仕事をしたときに印象的だったのが、ブートローダが書けないことでした。“ハードウェア屋”としては、演算器に電源が入って、マイクロプロセッサが立ち上がって、何をアサインして……というところを書いて、そこまでやれば仕事はおしまい、という感じです。C言語でいえば、main()が走る前のところを書かないといけないわけです。けれど、例えばデータベースを専門的にやっている人からすると、『main()の前って何?』という感じで、その前にもプログラムがあるとは思っていなかったのです」(泉田氏)。
OSやハードウェアを意識してソフトウェアを開発するには、何から手をつければいいいのだろうか。これについて泉田氏は、「例えば、C言語が分かるようになれば、コンパイラがどういうコードを吐いていて、今何をやっているかが分かるようになります。さらに、できれば機械語、難しければアセンブラのコードを読んで、『あ、こんなことやっているんだ』というのを理解すれば、ハードウェアのことが少しは分かるのではないでしょうか」と述べた。
もう1つ、ソフトウェア技術者がハードウェアに取り組む際の「壁」があるという。
「ソフトウェアの場合、『AをBに入れて、BをCに入れて……』と書けば、上から順に実行されます。けれどハードウェアは全部同じタイミングで動きます。ハードウェアの記述言語であるVerilog HDL(Hardware Description Language)やVHDL(Very high-speed integrated circuit HDL)は、値を代入していったら全部同じタイミングで動いちゃうんです。疑似的に順番に動かすことはできますが、本質的にはハードウェアはフル並列です。“順番”という根本的なところが違うことに気付けるかどうかが、ソフトウェア技術者にとって最初のギャップではないでしょうか」
ハードウェアに取り組むことについて、泉田氏によると「実は、ハードウェア技術者は減っています。大学でいうと、今は人工知能やロボット、生命科学なんかは人気がありますが、電気・電子工学って人気がありませんね」とのこと。一方で最近、大学生が独自CPUを作成し、その経験を書籍『独自CPU開発で学ぶ コンピュータのしくみ』(伊藤剛浩、川田裕貴著:秀和システム刊)にまとめるといったことも起きているという。
「大学生でもCPUが作れるほど、ハードウェアを作るツールは使いやすくなっている時代です。使いこなそうと思えば使いこなせますので、恐れず、まずは試してみてはいかがでしょうか」
ビッグデータ/機械学習、そしてIoTの潮流により、大量のデータを速く加工・蓄積・分析できるコンピューティング環境を構築するためにGPUやFPGAのアクセラレーションが注目を浴びている。また、Flashストレージ製品は増加し、その特性を理解した上でシステムを構築する利点を訴えるベンダーが多いなど、現在はかつてないほどハードウェアの知識がインフラエンジニアに求められている。一方で「クラウド/仮想化時代にハードウェアの知識なんて必要ない」と思っているエンジニアも少なくないのではないだろうか。本特集では、なぜ今ハードウェアの知識が求められるのかを浮き彫りにし、今までソフトウェアの知識中心でインフラを構築してきたエンジニアが、チップからサーバー、ストレージまで、ハードウェアの知識をいかにして身に付け、活用していくべきかの道標としたい。
Copyright © ITmedia, Inc. All Rights Reserved.