サイト内の現在位置

ベクトル、GPUそしてスカラプロセッサ

no.0012020.07.30

SX-Aurora TSUBASAの心臓であるベクトルプロセッサについてその特徴を見ていきたいと思います。

 ベクトル型計算機といえば何といってもSeymore Cray が創立した Cray 社の名前が頭に浮かびます。その初代マシンである Cray-I は、当時としては画期的な100MFLOPSオーダの計算能力を持ちましたが、それ以上に外観の独特さの方がインパクトとして残っています。NECをはじめとした日本各社もベクトル型のスーパーコンピューターを製品化していくことになります。NECの最初のベクトル型コンピュータは1983年にSXの名前で登場。SX-Aurora TSUBASAのルーツは40年近く前にさかのぼることができるのです。

一方、幅広く一般的用途で使われるIntel中心としたサーバー向けプロセッサではクロック周波数を高めることで処理速度を上げることがおし進められました。データを小さく分割して逐次的に処理していくスカラ型プロセッサと呼ばれるタイプのものです。しかし、2000年前後からプロセッサ単体の処理速度は頭打ちになり、クロック周波数に頼るだけではムーアの法則のトレンドを維持することが難しくなっていきます。そのため、複数のコアに処理を並列的に分散させるという手法へ移行するとともに、SIMDと呼ばれるベクトル演算の仕組みを登場させます。SIMDとはsingle instruction multiple dataの頭文字をとったものです。複数のデータに対して命令一つを同時に処理するという考え方です。サーバー向けプロセッサはスカラ型と書きましたが、現在では多くのスカラ型プロセッサといえども、意識されることはあまりないと思いますが一種ベクトル的に処理する仕組みも併用されていて、複数コアでの並列化とデータ集まりの一括計算というベクトル処理の2つの仕組みを使いながら高速化しています。というわけで、ベクトル型とスカラ型プロセッサという切り分けは言葉の定義として存在しますが、その境界はなんとなくあいまいなグラデーションなものになりつつあります。
 
 ベクトル型の代表ともいえるSX-Aurora TSUBASAは最大10のコアを使った並列化とデータ256個という大きな塊を一括計算することで処理を高速化しています。ですので、考え方そのものは今日のサーバー向けプロセッサが行っていることと大きな違いはないとも言えます。しかし両者の違いはSX-Aurora TSUBASAが扱うベクトル処理が256要素ととても大きなものであるところです。それからもう一つ、これは重要なことですが、この大量のベクトル処理をささえるためには途切れなくメモリにあるデータをプロセッサに送り続ける太いパイプが用意されていることです。後で少し詳しくふれますが、SX-Aurora TSUBASAはこの太いパイプを通してプロセッサを待たせることなく絶え間なくベクトル処理をつづけることができます。それから、一度の処理量では、IntelプロセッサのAVX-512というSIMDでは倍精度浮動小数点データ8つです。その長さだけで例えるならばSX-Aurora TSUBASAのベクトルが長槍、AVX-512は爪楊枝のような感じです。
 
 さて、現在HPCやAI向けに存在するプロセッサといえばベクトルプロセッサの他にGPUが有名です。最新のA100というGPUでは8000程度のコアを搭載し、これらに処理を分散させて並列的に実行します。しかしCPUのような汎用的な処理、例えばテキスト入力、そのテキスト編集や検索したり印刷のようなことはGPUの役割ではありません。数値計算にだけに集中します。例えるならCPUが乗用車とすればGPUは直線のコースを速く走るためのレースカーみたいです。多数のコアで数値計算し、結果をCPUに返します。ベクトルプロセッサもGPUと同じように数値計算の処理に特化したプロセッサーです。ひと固まりの数値データ同士を一気に四則演算して結果を出します。ただGPUと違うところは、GPUがデータをCPUから受け取って結果をその都度CPUに返すといった繰り返しが一般的に行われるのに対し、SX-Aurora TSUBASAはCPUの指示でデータ受け取った後は結果の表示まで含めてすべての処理をSX-Aurora TSUBASA上で完結することができるところです。
 
 これはいろいろなところでいわれていることですが、GPUは動的な分岐処理を扱うことがあまり得意ではありません。条件がどちらになっても高速化できるように複数ケースでの処理を並列的にコアに振り分け、条件に合ったほうの処理結果だけを採用するというオーバーヘッドをともなうからです。Divergentな分岐がはいった処理を減らしたほうが力を発揮できるタイプです。ディープラーニングでは行列の内積を求める計算が多くなりますが、大きな行列をブロックに分割して多数のコアに分散して並列演算するといった用途でGPUは力を発揮します。
 
 HPC・AI用途で活躍するベクトルプロセッサ代表のSX-Aurora TSUBASAですが、その特徴を活かすためのプログラミングは汎用プロセッサであるCPUに対するものとは少し異なったスタイルをとることになります。ベクトル向きなプログラミングについてはこの連載のなかでおいおい扱っていこうと思いますが、分岐の有無にかかわらずある処理の繰り返しをできるだけ長くさせることがベクトルプログラミングの極意だといえます。このために各ループ長をできるだけ大きくすることを何より重んじるのがベクトル道の第一の教義です。長く続くループによってデータの処理速度を飛躍的に上げることができるわけです。そして外周側のループはコアあるいは複数のSX-Aurora TSUBASAで並列に処理します。単純化して例をあげると2次元の配列データを順番に読みだして更新するようなことはSX-Aurora TSUBASAが得意な処理になります。