パタヘネ最終章です。この章ではマルチプロセッサ構成で並列処理を行う際のハードウェアの種類やベンチマークの種類、ベンチマーク結果の解釈などに関して述べられています。
6.1
普通のプロセッサを集めて高性能なコンピュータを作ることは昔から試みられてきた。性能が高いとは色々な意味があるが、独立した複数のタスクに対するスループットの高さを表すタスク・レベル並列性はその一つである。他には、近年はエネルギー効率も重視されている。1プロセッサの処理能力を膨大なエネルギーをかけて向上させるより複数のプロセッサで処理能力を向上させる方向性でプロセッサは近年進化しており、そのようなプロセッサをマルチコア・マイクロプロセッサという。マルチコアは基本的に共有記憶型マルチプロセッサになっており、単一アドレス空間を共有している。以下ではこれらマルチプロセッサの構成方法や課題に関して見ていく。
6.2
並列処理において最も困難なのは並列処理が効率的に機能するようソフトウェアを書くことである。まず、プロセッサの逐次処理性能が上がるとプログラマが何かしなくてもソフトウェアの実行速度が向上し、並列処理を頑張ろうとするモチベーションが出ない。また、並列処理特有のオーバーヘッドを補って余りあるような設計が必要となる。最後に、どうしても並列化できない部分が残るとそこでプログラムの性能が制限される(Amdahlの法則)ので、細部に至るまで並列化をうまく行う必要がある。また、プロセッサごとの負荷に偏りがあるとそこが性能のボトルネックとなり全体の実行速度が低下する。
行列の和計算など、プロセッサ数に合わせて問題の規模を拡大することで並列化の恩恵を受けやすくなる問題がある。そのような速度向上を弱いスケーリングという。問題の規模によらない部分が全体として無視可能になってくるためである。
6.3
並列ハードウェアの分類に関して述べる。
SISDはsingle instruction stream, single data streamの略である。これは単一命令流・単一データ龍と訳される。MIMDはmultiple instruction stream, multiple data streamの略である。複数命令流・複数データ流の略である。MIMD型コンピュータ上でプログラムを作成するときは一つのプログラムをそれぞれのプロセッサ上で実行し、プログラム内の分岐で違う処理をそれぞれのプロセッサで行わせる事が多い。これをSPMD(single program multiple data)という。MISD型プロセッサは実例が内。SIMD型コンピュータはデータのベクトルを操作する単一の命令が用意されている。部分語並列性はSIMDの例である。SIMDの狙いは何十もの実行ユニットを1つの制御ユニットの元で並列に動かし制御ユニットのコストを下げることである。SIMDが最も高い性能を発揮するのはforループで配列を処理する場合である。すなわち、同一の構造を有する大量のデータ、すなわちデータ・レベル並列性が必要である。caseやswitchはデータの内容にもとづいてそれぞれ違う操作が必要となるため、SIMDが苦手とする。
SIMDより古い類似物はベクトルアーキテクチャである。このアーキテクチャではアレイアーキテクチャがALUをたくさん置いたのとは対象的にALUをパイプライン化した。そのために大きなベクトル・レジスタ群が用意されているのが特徴となっている。ベクトル化された命令を使うので、ベクトル演算できない命令でループを使ってデータを処理するより命令バンド幅が大きく削減されている1。これによりフェッチされる命令の数が減るため消費エネルギーが減る。また、パイプラインハザードの回数もループを使うより減る。要素ごとにデータハザードが生じたり、ループの先頭に戻る分岐によって制御ハザードが生じるといったことがないためである。
ベクトルアーキテクチャとx86のマルチメディア機能拡張は似ているが差異が存在する。まず、ベクトルアーキテクチャで指定する操作は何十にも及ぶが、マルチメディア機能拡張は数個にとどまる。また、ベクトルアーキテクチャはメモリ上で転送するデータが隣接している必要がない。
ベクトル算術命令ではベクトルレジスタ内のインデックスNの要素は別のベクトルレジスタ内の同じインデックスの要素にのみ使用可能である。これによりベクトル・レーンとして並列ベクトルユニットを構成するのが容易となる。
6.4
コンピュータ上で複数プロセスやスレッドを動作させることは多い。この時、あるプロセスの命令がストールしている間別のプロセスを実行できればストールの影響を隠し、スループット向上が見込める。この目的のためハードウェアマルチスレッディングが存在する。ハードウェアマルチスレッディングはMIMDに関連している。
細粒度マルチスレッディングは命令ごとにスレッドを切り替えて実行する。その際にストールしているスレッドは飛ばされる。スレッドの実行順序は通常ラウンドロビンで決まる。この方式では実行可能なスレッドがあっても毎回待たされることになることが欠点である。
粗粒度マルチスレッディングは最終レベルのキャッシュミス等長時間のストールが発生した時にのみスレッドを切り替える。この方式では小さなストールには対応できない。この限界はパイプラインの起動に時間がかかることに由来する。
同時マルチスレッディング(SMT)は命令レベル並列性とスレッドレベル並列性を両方使う。動的スケジューリングとレジスタリネーミングを使うことで、独立した別々のスレッドから命令を複数発行でき、命令間の依存関係を考えなくて良くなる。
6.5
共有記憶型マルチプロセッサについて述べる。共有記憶型マルチプロセッサのタイプには2つある。一つは均等メモリ・アクセス(UMA)型、もう一つは非均等メモリ・アクセス(NUMA)型である。前者はどのプロセッサがどの語にアクセスする場合でもアクセス速度が変わらず、後者はその逆となる。NUMAの場合のほうがプログラミングの難易度が高い。共有記憶型マルチプロセッサではデータ操作の競合が問題となるため、ロックを使って同期させることが必要となる。
6.6
GPUに関して述べる。GPUはCPUを補完するアクセラレータであり、全てのリソースをグラフィックスに注ぎ込む事ができる。問題のサイズは数百MBから数GBである。CPUとの違いとして、メモリへのレイテンシを隠すため、CPUはマルチレベルキャッシュを使用するがGPUはハードウェア・マルチスレッディングを使用する。その結果、GPUのメモリはレイテンシではなくバンド幅に重点が置かれている。マルチスレッディングを多用することでメモリ・バンド幅を高めるので、GPUはCPUより多数のスレッドに対応でき、またプロセッサもCPUより多数存在する。
6.7
Mooreの法則の鈍化、Dennardのスケーリング則の終了、Amdahlの法則に基づくマルチコア性能の実際的な限界により、性能・エネルギー効率のさらなる改善はドメイン固有アーキテクチャしか無いという考えが主流となりつつある。DSAの原理としては、
- データを移送する距離を最小化するため専用のメモリを用いる
- 高度なマイクロアーキテクチャ的な最適化をやめたことから節減された資源を算術装置やメモリの増強に注ぎ込む
- ドメインに適合する最も容易な形の並列性を利用する
- データのサイズとタイプをドメインに必要最低限な単純なものに削減する
- DSAにプログラムを移植するために、ドメイン固有のプログラミング言語を用いる
が挙げられる。ドメインの例としては深層学習が挙げられる。
6.8
アドレスを共有しないプロセッサを複数集めて、明示的なメッセージ交換を使ってコンピュータを構成する手法に関して述べる。このような手法の代表例がクラスタである。クラスタは標準的なネットワークスイッチを使って上記を実現する。主記憶が分割されていることで、個々が障害を起こしてもそこを切り離せば全体の障害を防ぐ事ができ、信頼性を高めることができる。大手IT企業はデータセンターで数万台規模のクラスタを構築・運用しており、それ全体を一つのコンピュータとみなし、ウェアハウス・スケール・コンピュータ(WSC)と呼ぶ。
WSCと単なるサーバは以下の点で異なる。まず、要求レベル並列性が高い用途で用いられることが多い。要求レベル並列性とは電子メールで読み出す情報と書き込む情報が独立しているので、読み込みと書き込みを並列でできるといった意味である。また、WSCは耐用年数が長く、償却期間が10~20年となるため、運用コストが設備コスつを上回る。最後に、5万台等の大規模で構成されるので、サーバ故障頻度が高い。例えば、平均故障寿命25年のサーバを使っていても毎日5台は故障する計算となる。
6.9
WSCのノードをどのようにつなぎ合わせるかは設計自由度がある。例えば、リング型トポロジなどが考えられる。トポロジの良し悪しを評価する指標としてはネットワーク・バンド幅が挙げられる。これは各リンクのバンド幅をリンク数で乗算したものとなる。もう一つが2分割バンド幅である。全ノードを2つのグループに分け、仮想的な分割線を引く。この分割線を横切るリンクのバンド幅の和が2分割バンド幅である。2分割バンド幅が一意に求まるように、仮想的な分割線の引き方は、バンド幅の和が最小となるように引くこととする。これは最も悲観的なネットワーク性能を計算していることに相当する。
ネットワーク中の全ノードにプロセッサを配置する代わりにスイッチだけを置く方式をマルチステージ・ネットワークという。この方式では、スイッチがプロセッサより小さく、ノードを高密度で集積できるというメリットが有る。マルチステージ・ネットワークの種類としてはクロスバ・ネットワークやオメガ・ネットワークがある。
6.10, 6.11, 6.12, 6.13
インターネット限定の節、ベンチマークの節、実例の節なので省略
6.14
Amdahlの法則は並列コンピュータにも適用される。弱いスケーリングを適用して問題の規模を上げるにつれプロセッサ数を増やすことで、線形な速度向上を得られ、Amdahlの法則を破ったとする研究があるが、逐次処理の処理に占める割合を減らしているだけなので破ったことにはならない。
プロセッサあたりのピーク性能は現実の性能を反映していない。そのためピーク性能をプロセッサ数で乗じてもその性能が得られることは決してない。
斬新なアーキテクチャが出てきてもそれに特化したソフトウェアを開発しないと性能向上は得られない。ユニプロセッサ用に開発されたソフトウェアをマルチプロセッサに適合させようとするとそういうことが起こる。例えば、Silicon GraphicsのOSはページテーブルを単一のロックで管理していたため、マルチプロセッサで複数のプロセスが同時にページテーブルを初期化しようとし、直列化が起きて性能のボトルネックとなった事例がある。
メモリのバンド幅を増やさないと良いベクトル性能は得られない。
命令セットアーキテクチャが物理的な実装上の特性を全て隠しきることはできない。Spectreはその代表例である。Spectreは投機的実行による予測が外れることを知りつつあえてプロセッサに投機的実行させたり、キャッシュ中のどのブロックが最も長く使われていないかを復元しない事がある脆弱性を利用したり、ハードウェアマルチスレッディングによってタイミングが変化したりするといったことを利用する。
コメント