FPGA、GPGPU、CPUの違いは消費電力対性能比

今どきCPUだけで大丈夫?

GPGPUとCPUの違いを並列性の有無とか高速性で説明するとミスリードするよね。

CPUだって並列化が進んでる。ハイエンドのCorei7だとSIMDで1コア辺り8個の倍精度演算を同時におこなう。それが6コアあるので48並列で演算できる事になり、理論性能は倍精度で160GFLOPS近い。

GPGPUはというと、例えば GeForce GTX 980の場合、2048コアで単精度なら4.6TFLOPSを超える。単精度ならってのがGPUに特化したチップの弱点で、倍精度だと144GFLOPSまで落ち込む。

Core i7 5820K BOXが4万円台、GeForce GTX 980搭載ビデオボードが5万円台。科学技術計算で多く使われる倍精度演算に用途を限ると、価格性能比ではよい勝負となる。GPGPUのほうが並列数が多い上に、バス速度がボトルネックになりやすく、最適化も難しい。下手をすると価格性能比でGPGPUよりもCPUの方が勝るということになる。

数値演算に特化したNVIDIA TESLA K20だと倍精度でも十分な演算速度が得られており、約1.2TFLOPSで約50万円。同性能のCPUというとXeon HaswellのデュアルCPU構成にすると1.3TFLOPSで約110万円。やっぱりGPGPUの方が価格性能比が・・・と思うかもしれないが、拡張スロットに刺してよいなら Xeon Phiという選択肢もある。Xeon Phiなら1TFLOPSで約20万円くらいで手に入る。やっぱり価格性能比ならCPUの方が安いってことになる。

こうなるとGPGPUのメリットは何?って感じになるが、消費電力対性能比だとGPGUの方が勝っている。TESLA K20の消費電力は225W程度だが、Xeon Phiは300Wも消費する。

本質的には汎用性の有無と消費電力で説明した方が良い。汎用性が高い代わりに消費電力の大きなCPUと、汎用性が低い代わりに消費電力の小さいGPGPU。ちなみにFPGAの性能を単純にFLOPSで表現するのは難しいけど、 Virtex UltraScaleは最大で1.7TFLOPSにたいして、消費電力は最大で100Wに届かないので、消費電力対性能比はGPGPUよりさらに勝ることになる。

もちろんCPUに加えてGPUも使える環境なら、GPGPUを使って演算をオフロードしたほうが早くなるし良い。既存のPCに後付けでGPGPUを追加する選択もありだろう。たが演算を高速にするために専用にサーバーを用立てるなら、最初からGPGPUを選択すべきかは微妙なところだよね。

開発体制を保持する(Cloud向け開発の覚書き )

クラウド向けにシステムを構築した場合、必ず自社内に開発できる体制を保持しておく。IaaSはともかく、PaaSやSaaSは仕様変更やサービス終了と無縁では居られない。仕様変更やサービス終了が告知された場合は、システムを維持するために速やかに改修する必要がある。この時に開発体制を外部に依存しているとシステムの維持に大きなリスクを負うことになる。

クラウド外にバックアップする(Cloud向け開発の覚書き )

クラウドの外にデータをバックアップする方法を検討しておく。クラウド上のデータをローカルにダウンロードしてバックアップする場合、インターネット帯域の制約を受ける。オンプレミスなら数Gbpsの帯域を使えていた物が、インターネット経由で行う場合には数十Mbps程度になってしまう。例えローカルの環境が1Gpbsでインターネットに接続していたとしても、仮想マシン側のインターネット通信帯域は数十~数百Mbps程度でしかないため、何も考えずにフルバックアップ等していては時間がかかってしかたがない。またデータ転送量も従量課金の対象となるので無駄に代金を払うことになる。
・・・ではバックアップ無しで良いかというと、そうはいかない。パブリッククラウドを使用している場合、ベンダー側の都合でサービスの使用が変更になったり、終了したり、あるいはベンダーが事業から撤退したりと言うことが常に起こる。既にHP Helion Public Cloudも撤退しているし、VMware vCloud Airは日本市場から撤退を決めている。IaaSでサービスを終了した事業者はまだそれほど多くないが、SaaSやPaaSも含めると市場から消えたサービスはさらに増える。サービスが終了したとき、他のサービスへの移行手段としてバックアップが必ず必要になる。

「小学生の頃、習っていないことを勉強していたら『実力差がついちゃうからしないでね』と先生に言われた」のを無理矢理弁護してみる

小学生の頃、習っていないことを勉強していたら『実力差がついちゃうからしないでね』と先生に言われた→多くの人が同じ経験をしていた – Togetterまとめ

無理矢理弁護してみる。

日本の教育システムが到達度別クラスとか、少人数クラスになっているのであれば何も問題はない。だが残念なことに40人者大人数で、到達度など関係なく同じ地域に住む同じ年齢の子供を集めて教えるようになっている。

到達度の全く異なる人たちを対象に、全員が満足する授業を行うというのは難し・・というより不可能に近い。これが大人相手なら、全く異なる勉強をしたりしながら、時間を有意義に、到達度の低い生徒の邪魔する異なく過ごせるだろう。だが残念な事に小学生相手だとそうはならない。退屈した生徒は騒ぎ初め、到達度の低い生徒の邪魔を始めてしまうのだ。

本来問題なのはこのような発言をする先生ではなく、到達度に関係なく同じ年齢の子供を沢山集めて教えるというシステムの方だろう。実際に到達度別クラス分けとか、少人数クラスにしたりとか、補助教員を置いて到達度の高い生徒はより高度なことを出来るようにしているとか、そういった事例は海外に沢山ある。

算盤とかピアノとか、学校の授業と全く関係の無い事を学ぶのなら問題は無いのだろうけど・・・。

仮想マシンをバックアップする(Cloud向け開発の覚書き )

最低でも三重にレプリケーションされており物理障害でデータが失われる可能性は非常に少ない。とはいえ、必ずクラウドの機能を使って仮想マシンのバックアップを取得するようにしておく。
クラウドではオペレーションミスによってデータを失う可能性はむしろ高いので注意が必要になる。管理コンソールの操作ミスによって仮想マシンやストレージを削除してしまうのは勿論、仮想OSの操作ミスでSSH接続などリモートセッションの設定を破壊してしまった場合、バックアップした仮想OSを戻す事が出来なければデータ復旧は絶望的になる。
例えば私はLinuxでapt-get upgradeを実施したときに、仮想マシンのエージェントの更新がかかり、操作ミスで設定ファイルを上書きしてしまったことがある。もちろんSSHによる接続は出来ない。クラウドの管理コンソールから新しいSSHキーを設定するも動かず、バックアップされていた仮想マシンをロールバックすることで対応した。