プロセッサはこの先どう進化するのか?

  多少の鈍りはあるものの、半導体業界でのムーアの法則は未だに健在である。
  しかしながらプロセッサの進化速度はポラックの法則その他に縛られいろいろとあらぬ方向に舵を切っている。

  近年目立つ変化といえば、プロセッサ単体での性能進化が急激に鈍り、マルチコア化に突っ走っていることであろう。

  シングルコアあたりの性能はあまり増えなくなった。

  さてここで、科学技術計算について考えてみよう。いわゆるHPC分野などである。
  科学技術計算などの分野で見ると、とにかくほしいのは FLOPS性能 である。

  FLOPS演算性能を手っ取り早く低コストで上げるのに効果的なのはいわゆるSIMDである。
  しかしながら、1プロセッサあたりのSIMDの並列性がムーアの法則で増えているかといえばNOである。
  64並列とか1024並列とかのぶっ飛んだサイズのSIMDがあれば面白そうだが、コストパフォーマンスのよい x86 レンジだとSSE命令で、単精度4並列、倍精度2並列の命令を有しているに過ぎない。

  「何で?」って疑問になるわけだが、想像するに1つはOSの問題が大きいと思う。
  簡単にレジスタが増やせないのである。レジスタを増やすということはタスクスイッチ時の退避復帰にコストがかかる上に、OSが対応する必要がある。
  他にも場合によっては割り込みハンドラなどデバイスドライバの範疇にも影響するかもしれない。
  また、勝手に新命令をつけてもOSの許可なくENABLEにできないはずだ。OSの知らない
レジスタがあるということは、それを使ってプロセス間通信をされてしまうと、セキュリティーホールでしかない。

  そして、将来SIMDの並列度に対して汎用的なコードを書くのは難しいという問題もある。  反面マルチスレッドは粒度が荒い分まだ汎用的に対応しやすい。
画像処理のような鬼サイズのループを
#pragma omp parallel for
で済ませてしまうようなケースは当面並列度の増加での分割粒度不足は起こるまい。

国家プロジェクト級のスパコンならともかく、ミドルレンジでコストパフォーマンスのよい演算を追及する層にとっては、まっとうなソフトウェアの生産性を保つ必要もあって、やっぱり売れ筋のプロセッサは今後もコア数が増える方向に進むと思う。

  コア数を増やすことに特化しているGPGPUも同じことで、単スレッドで使えるSIMD幅の増え方はそうは変わるまいと思う。

  一方でコアを増やし続けると発生するのが、通信と同期の問題である。たとえワンチップであってもだんだんとこれらが占めるコストは比率が増していくと考える。
  プログラマにとって、for文の分解は10個だろうと1万個だろうと同じことなのだが、ハードウェアリソースの消費比率が変わってきてしまうわけだ。コストパフォーマンスが悪化してしまう。もっともそれが問題にある分岐点はもうちょっと先ではないかとは思うが。

  で、最後にお約束のようにFPGAも考察しておく。
  FPGAは恐らく今後もずっと、どう逆立ちしてもこれら汎用プロセッサに単精度や倍精度のFLOPSで勝つことはできないと思う。

  一方で、単精度や倍精度と極端に精度の違う問題や、極端に粒度な並列度を持った問題では高い効果を出すかもしれない(というかすでに出ている)。
  プロセッサがやれない 1024並列SIMDとかのレンジの演算も、ハードウェア記述言語であれば並列度に対して汎用性を持った生産性のよい記述ができる可能性はある。
  プロセッサの苦手レンジを狙って、ソフトや向けのツールとして台頭してくるのをもう少し期待しながら眺めてみたいと思う。

コメント

タイトルとURLをコピーしました