ハードウェアな話
大遅刻ですみません.
苫小牧高専アドベントカレンダー 18 日目の記事でございます.
本当はすごくいっぱい書いていたのですが,
(内容は,創造工学のOB講演・4年のセミナーで話した話をもう少し雑談っぽくした内容)
消し飛びました(言い訳が,レポートに間に合わないアレみたいな感じですみません.)
今回は,気分が変わったので,情報な人たちにとってのハードな話にしようかなと思います.
ちょっと専門職が強いです.
ここでいうハードウェアは,「回路」的なニュアンスで言っています.
ソフトは,単にプログラムっていう感じですね.
その前に,少し研究的な自己紹介
ハードもソフトもだいすきで,昔からやってきています.
結局,どちらか片方しかできない人よりも,どちらもできた人のほうが,色々な考え方を出来るだろうと思ってやってきました.
その結果,「組込みシステム」という分野を専門にしたいなあと.
やっぱり,もの動かすのって楽しいんですよ.って僕は思います.
PCの中だけでぐちゃぐちゃ動いているよりも,実際に外の世界に影響を及ぼせるようなものを作りたいと思って,高専生時代はロボコンばっかりやっていました.
もちろん,動かなすぎてうなりつづけることも少なくなかったです.
専攻科生の頃,半年間,他の人より研究時間をがんばって作っていたのに,全く進捗がでなくて,暗闇の中を歩き続けたことがあります.
でも,苦労してなんとか動いたときの気持ちよさは,やっぱり一味違うものですね.
でまあ,今回は,皆さんソフトのことは詳しいと思うんで(?)ハードの話でもしようかなと思います.
実際,ハードウェアって勉強して良いことあるの?
まあ,こんなこと書くんだから,答えは「はい」なんですよね.そりゃあ.
実際,今の世の中って,ただ動くだけのソフトを作ろうと思うだけなら,
正直,大体ぐぐっちゃえば出てくるんですよね.
でも,ハードウェアの話って,原理の話はよく出てくるんですが,
実際に応用する話ってあまりないし,経験則によるところも結構多いですよね.
(ソフトでももちろん,経験則はあるんですけども)
ハードウェアのことを意識してプログラムを書くことができるかって,当然性能にも影響するし,下手をすれば消費電力にまで影響します.
「ただ動くだけ」でよければ,Pythonでてきとーなライブラリ引っ張ってきて,「あ,なんかしらんけど動いた」で良いんですよね.今の世の中.
だいたいやりたいことって,Pythonで出来ることばっかりだと思います.
そんでもって,ハードウェアを実践的に教えて貰える機会って,あんまり多くないと思います.
その割には,実はいま,結構ハードが出来る人って需要はあるんですよね.
下で書きますけど,機械学習の高速化って,すごい流行っていて(いた?),アルゴリズムの話というよりもハードウェアをどう使うかって話も結構多いんですよ.
今,立場が変わっちゃいましたが,むかしむかしから,ハードもかなりしっかり教えている情報がうちだと思います.
ハードウェアっていっても,どんなものがあるの?
ここでは,プログラム的なもので動作を変えられるデバイスを3つ話そうかなと思います.
- CPUは,当然プログラムを書き換えれば動作を変えられるし,
- FPGAも,実現する回路のコンフィグレーションを変えれば動作を変えられるし,
- GPUも,CPUからプログラムを送信しなおせば違う動作にできますよね.
ってことで,この3つについて軽く話します.
詳しくは調べてみてね.
CPU
あんま話さなくていいですよね.
プログラムを読み込んで実行する情報系のお友達です.
FPGA
いま,情報系3年は触っていると思いますが,論理回路を実現できます.ただ,ハードウェア記述言語というもので記述することがこれまでは多かったのですが,いい感じで設計しようと思うと,かなり職人技な部分もあります.
GPU
結構前からGPUが当たり前に機械学習に使われるようになりましたよね.GPUって,グラボに載ってるアレです.もともとは,ゲームとかのグラフィックのために使われることが多いものだったんですが,機械学習を始め,並列計算で力を発揮しています.
で,結局ハードだとなにがいいのさ?
CPUと比べての話にします.
CPUって,「汎用」のプロセッサなので,プログラムを書き換えるだけで色々なことが簡単に実現できてしまいます.だから,ソフト(柔らかい)なんですね.
で,ハードって言うと,ASICのようなもう中が作り込まれてしまって,作り変えられないようなもののイメージがいままで強いのかなと思います.
だからハード(硬い)なんですけども.
GPUは,小規模なCPUがめちゃくちゃたくさん集まったものだと思えば良いと思います.だから,同時に計算できる場合,めっちゃ早くなります.ただ,その代わり電力食うんですよね.グラボ積むのに,電源増強必要だったりするじゃないですか.
FPGAがまあ,今回の話で言えば,ハードらしいハードかなと.
ただ,FPGAのことを,以前「やわらかハードウェア」って若干ゆるい場所で後輩が言っていたことがあって,なんか矛盾して聞こえますよね.
ハードウェアって何かに特化してることがほとんどなんですよね.
だから,特定の処理に対してめちゃくちゃ強い(早い)っていう感じなんですが,
FPGAは,回路の構成を変えることができるんですね.
後からでも回路の設計を変更できるから「やわらかハードウェア」なんですね.
実際,めっちゃ早いです.(ただ,これも結局向き不向きがあるので,一概には言えないです)
実際にあった話でいうと,
「PID制御」と言って,「制御理論」のなかでも有名な制御があります.
これにかかる処理時間を測定したことがあるのですが,
CPU(1GHz程度)で,数百μsec程度,
FPGA(100MHz程度)で,数μsec程度,
まあ,雑に100倍位以上くらいFPGAが早いわけなんですね.クロックはCPUの方が10倍早いのに.周期が1/10 なのに100倍も差をつけられちゃうんだからすごいですよね.
いやまあ,CPUの方が早くなる場合ももちろんあるんですけどね.
まとめ
当たり前ですが,結局向き不向きが色んな所であるので,
最適なものを使おうねっていうことです.
で,別に僕はハードを使うことを強要したいわけではまったくないのですが,
引き出しは多いほうがいいっていう話ですね.
さっき,FPGAは職人の技があるということもいいましたが,
最近は高級言語(CとかPythonとか)でかけるような環境もあって,
それを使えば(多少は)ソフトやさんでもハードの設計ができるようになってきています.
いろいろ,最近は安く売っているから,ぜひ遊んでみてください!