パラレルジャングルへようこそ!

同カテゴリーの次の記事

オンプレミスとクラウドでの HPC パフォーマンス ― 準備はできていますか?

この記事は、Dr.Dobb’s Go Parallel に掲載されている「Welcome to the Parallel Jungle!」の日本語参考訳です。


編集注記:
本記事は、2012 年 6 月 29 日に公開されたものを、加筆・修正したものです。
この一連の記事の著者である Herb Sutter 氏は、早い時期からプロセッサーのマルチコア化がソフトウェア開発に及ぼす影響と、ソフトウェア開発者が考えるべき移行における課題を示していました。Sutter 氏による 「フリーランチは終わった」は、IT 業界での名語録にもなっています。この記事は、Sutter 氏が 2012 年の時点で「ムーアの法則」の終焉とそれを取り巻くソフトウェア開発の変化をまとめているものです。2020 年時点で読み返しても興味深い内容です。

このシリーズでは、モバイルデバイスからデスクトップ、クラスター、最高粒度のクラウドまで、並列化がもたらす影響について解説します。さまざまな並列化の実装が存在することによる混乱は、プログラミングにおける大きな挑戦をもたらしました。シリアル・プログラミングでフリーランチの恩恵を受ける時代はすでに終わりを迎えています。

ムーアの法則の終焉が語られる中、マルチコア・プロセッサー、GPU コンピューティング、HaaS (Hardware as a Service) クラウド・コンピューティングへの移行は、それぞれが別々のトレンドではなく、デスクトップからスマートフォンまで、メインストリームのコンピューターがヘテロジニアスなスーパーコンピューター・クラスターに変遷を遂げる大きなトレンドに沿ったものと考えられます。この先、単一の計算集約型アプリケーションは、膨大な数の異なる種類のコアを利用して処理することが必須条件となるでしょう。
フリーランチは終わったのです。そしてハードウェアのジャングルへようこそ!

Part 1 | Part 2 | Part 3 | Part 4 | Part 5 | Part 6

1975 年から 2005 年までの 30 年で、コンピューター業界は驚異的な進歩を遂げました。この 30 年で、あらゆる職場、あらゆる家庭、そして人々のポケットにまでパーソナル・コンピューターが広く行き渡るようになりました。

しかし、2005 年に、コンピューター業界は大きな壁にぶつかりました。私は以前、『The Free Lunch Is Over (A Fundamental Turn Toward Concurrency in Software) (フリーランチは終わった (ソフトウェアにおける並列化への根本的な転換))』で、メインストリームのマシンがシングルコアからマルチコア・プロセッサーに移行している理由と、オペレーティング・システムからツールや言語に至るまでソフトウェア・スタック全体の変更が必要になること、ソフトウェア開発者がアプリケーションにおいてムーアの (トランジスター数増加に伴う性能向上の) 法則の恩恵を引き続き得ようとする場合、コードの記述方法を根本的に見直す必要があることについて述べました。

2005 年に、コンピューター業界は、あらゆる職場、家庭、そしてポケットにまでパーソナル並列スーパーコンピューターを広く行き渡らせるという新しい挑戦に取り組み始めました。2011 年は、マルチコアタブレット (iPad* 2、Playbook*、Kindle Fire*、Nook Tablet* など) とスマートフォン (Galaxy* S II、Droid* X2、iPhone* 4S など) の登場により、すべてのメインストリーム・フォーム・ファクターで並列コンピューティングへの移行が完了した記念すべき年でした。2012 年には、引き続きメインストリームのクアッドコアやオクタコア (8 コア) のタブレットを含むマルチコア製品が登場し (Windows* 8 は、x86 に加えて ARM* ベースのタブレットに対応予定)、唯一シングルコアであったゲームコンソールもマルチコアに移行しています (任天堂は Wii* の後継製品 Wii* U (http://is.gd/sBuPtr) 2012 年 11 月に発売)。

すべての代表的なフォームファクターにおいてメインストリームの並列コンピューティングが提供されるまで、ちょうど 6 年かかったことになります。マルチコアではシングルコアで不可能であった計算パフォーマンスを達成でき、今後もマルチコア環境でより良く動作するメインストリームのアプリケーションが提供されるため、マルチコアへの移行は永続的なものであり、シングルコアに再び戻ることがないことは容易に理解できます。

メインストリームのハードウェアに単一プロセッサーのノイマン型計算機がなくなることは、コンピューターの歴史上初めてのことです。今後も元に戻ることはないでしょう。

これが最初の動きでした。

はじめに: 3 つの段階

図 1 のタイムラインから、マルチコアは、互いに拡張し合う 3 つのテクノロジーが関連する永続的な移行の最初の段階であることが分かります。


図 1.

  1. マルチコア (2005-)。
    前述のとおり。
  2. ヘテロジニアス・コア (2009-)。メインストリームのラップトップ、コンソール、タブレットに CPU と計算処理が可能な GPU の両方が搭載されているように、一台のコンピューターに 2 種類以上のプロセッサー・コアが搭載されていることはあたりまえになっています。 当初業界では、単一アプリケーションを異なる種類のコアでどのように処理するかではなく、「どのように異なる」コアにすべきかという結論に達していませんでした。つまり、同様の命令セットで処理が可能な、シリアルコードの実行に適した少数の大きなコアと並列コードの実行に適した多数の小さなコアを組み合わせたもの (インテル® MIC モデル – プログラミングが容易なモデル、2012 年にリリース) であるべきなのか、C や C++ のような汎用言語のサブセットのみをサポートする異なる機能を持つコア (現在の Cell および GPGPU モデル – 言語拡張とサブセットを含むより複雑なモデル) であるべきなのかということです。

    ヘテロジニアス・コアは最初のトレンド (マルチコア) をさらに進めたもので、より小さな複数のコアを同一チップ上に配置しています。たしかに、GPU を利用可能なプログラムでは、多くのメインストリームのマシンで 100 ~ 1,000 個程度の並列処理を行うことが可能でした。

    ヘテロジニアス・コアでは、異なる種類の計算を、異なる種類のコアでより高速に、より少ない消費電力で実行できる (同じアプリケーションの異なる部分を、複数の異なる種類のコアでより高速かつ効率良く実行できる) ため、この移行も永続的なものであるといえます。

    編集部加筆:
    2019 年、インテル社は単一ソースコードで CPU、GPU、GPGPU、FPGA、AI アクセラレーターなど、異なるアーキテクチャーにワークロードを容易に分散することを可能にする oneAPI というコンセプトを発表しました。これによりヘテロジニアス・プログラミングが容易になり、さまざまなアーキテクチャーを組み合わせたコンピューティング・システムがさらに広がっていくことでしょう。

  3. Elastic 計算クラウドコア (2010-)。ここでいう「クラウド」とは、HaaS を指しています。HaaS は、メインストリームのマシン拡張として、より多くの計算ハードウェアにアクセスします。このトレンドは、Amazon Web Services* (AWS)、Microsoft Azure*、Google App Engine* (GAE)、その他の商用計算クラウドの提供により、メインストリームとなりました。

    クラウド HaaS は最初の 2 つのトレンドをさらに進化させたもので、各ノードにはマルチコアとヘテロジニアス・コアを含む大量のノードが配備されています。クラウドでは、単一アプリケーションで利用可能なコアの数は高速にスケーリングされます。2011 年の時点で、30,000 コアのクラウドが 1 時間あたり $1,300 以下 (AWS を使用) で提供されており、同じヘテロジニアス・コアを計算ノードで利用できます (例えば、AWS では、2 つの nVIDIA* Tegra* M2050 GPU カードを搭載した「クラスター GPU」ノードをすでに提供しており、大規模な並列型/分散型 CUDA* アプリケーションを利用できます)。

要するに、この種の並列処理はすでに一般的となっており、その種類はさらに増え続けています。

この記事では、重要な 4 つのポイントについて説明します。

  1. ムーアの法則の終わり。あらゆる種類の資源の開発が終わる前に現れる兆候が見られることから、ムーアの法則が終焉を迎えていることは明らかです。
    しかし、パニックに陥ることはありません。ムーアの法則はたった 1 種類のスケーリングを制限しているだけであり、我々は別の種類のスケーリングをすでに始めています。
  2. 3 つのトレンドではなく 1 つのトレンド。マルチコア、ヘテロジニアス・コア、HaaS クラウド・コンピューティングは 3 つの別々のトレンドではなく、あらゆる職場、あらゆる家庭、そしてあらゆるポケットにヘテロジニアスなパーソナル・スーパーコンピューター・クラスターを広く行き渡らせるという 1 つのトレンドと考えるべきです。
  3. ソフトウェア開発に与える影響。ソフトウェア開発者の視点から、単一アプリケーションで異なる種類 (異なるタスク向けに特化した) の異なる場所 (オンダイ、インボックス、オンプレミス、インクラウドなど、ローカルからリモートまで) にある膨大な数のコアが利用可能になると予想されます。このヘテロジニアスなジャングルは、メインストリームのソフトウェア開発における深くて速い進化に拍車をかけ続けるでしょう。ただし、いくつかの変化は予言できます。
  4. ムーアの法則が終焉に向かう 3 つの段階。そして、なぜ「スマートフォン」は正しくないのか。

まず、ムーアの法則の終わりから始めましょう。

ムーアの法則の採掘

この数年間、「ムーアの法則が終わる」という話を絶えず耳にしてきました。ムーアの法則が終わることは特に目新しいニュースではなく、そのとおりになるでしょう。当初予期されていた時期に終了することはありませんでしたが、その終了は予測できます。そのためには何を見るべきか知っておく必要があります。それは収益逓減です。

重要なポイントは、ムーアの法則の開発は金鉱やほかの種類の資源の開発に似ているということです。金の鉱床の開発がいきなり終了することはありません。より正確にいえば、最終的にその土地に残っている金が営利上利用できなくなり、鉱山を運営しても利益が出なくなるまで、費用逓増と収益逓減のフェーズを経て、鉱山の運営は続けられます。

ムーアの法則の採鉱も同じパターンに従っています。3 つの大きなフェーズについて考えることにしましょう。2012 年 の時点で、フェーズ II からフェーズ III に移行しているところです。この説明にあたって、ムーアの法則が興味深い唯一の理由は、資源 (トランジスター数の増加) を有効な形 (計算処理能力の増加またはコストの低下) に変化できるからであることを忘れないでください。

フェーズ I、ムーアの主鉱脈 = 単一コア「フリーランチ」 (1975-2005)

鉱床を発見して鉱山を開くと、まず最初に、金の含有量が多く製錬コストが低い、主鉱脈に労力を集中させます。

30 年の間、メインストリームのプロセッサーは、1 つのスレッドがより高速に実行できるように、トランジスター数の増加分を使用して 1 つのコアをより複雑にし、ムーアの主鉱脈を採掘しました。採掘は順調に進み、パフォーマンスを 容易に向上できた ため、計算を多用するソフトウェアは比較的小さな労力でより高速になりました。メインストリームのマイクロプロセッサーにおけるこの主鉱脈の採掘は、単純なコアから複雑なコアまでを振り子のように揺れる、2 つの大きなサブフェーズを経てきました。

  • 1970 年代から 1980 年代は、各チップ世代で、シングルスレッド・コードをより高速に実行する 1 つの主要な機能 (例えば、オンダイ浮動小数点ユニット、パイプライン、アウトオブオーダー実行) を実装するために、トランジスター数の増加分のほとんどが使用されました。
  • 1990 年代から 2000 年代は、各チップ世代で、シングルスレッド・コードをより高速に実行する 2 つから 3 つの (世代が進むとさらに多くのより小さな) 機能の追加や向上のために、トランジスター数の増加分が使用されました。

図 2 は、インテル® 80286、インテル® 80486、インテル® Pentium® Extreme Edition 840 の 3 つのチップで、振り子がより複雑なシングルコア方向にどのように揺れたかを示しています。チップを表す四角形はトランジスター数でスケールしていることに注意してください。

図 2.

2005 年に、振り子は複雑なシングルコア・モデル方向の上限まで到達しました。主鉱脈がほぼ枯渇したのです。その後も、シングルスレッド・コードのパフォーマンスを引き続き向上させるべく鉱石を掘り出していましたが、これまでのような成果は期待できなくなってしまいました。

フェーズ II、第 2 の鉱脈 = ホモジニアス・マルチコア (2005-)

主鉱脈が枯渇すると、主鉱脈よりも金の含有量が少なく製錬コストが高いものの、まだ利益を上げることが可能な第 2 の鉱脈に移動します。ムーアの単一コア主鉱脈が枯渇すると、我々はムーアの第 2 の鉱脈を採掘するように (つまり、チップ当たりのコアを増やすためにトランジスターの増加分を使用するように) なりました。マルチコアになることで、メインストリームのコンピューターは引き続き計算処理能力を増大できるようになりましたが、ハードウェアを効率良く利用できる並列プログラムを記述しなければならないため、ソフトウェア開発者の負担が大きくなり、開発は容易ではなくなりました

フェーズ II への移動では、ソフトウェアで多くの作業が必要になりました。新しい世代のハードウェアで同じ実行バイナリーをより高速に実行できるという波に再び乗るには、多くの潜在的な並列処理を含む「新しいフリーランチ」アプリケーションの書き方を学ばなければなりませんでした。ハードウェアの性能は、主にコアが増える形で向上を続けたためです。インテル® スレッディング・ビルディング・ブロック (インテル® TBB) や Microsoft* 並列パターンライブラリ (PPL) のような並列ランタイムとライブラリー、並列デバッガーと並列プロファイラー、そして最新のオペレーティング・システムを使用して開発が行われました。

しかし、このフェーズが 30 年続くことはありません。フェーズ III はすでに開始しているため、残された時間はそれほど多くありません。

フェーズ III、第 3 の鉱脈 = ヘテロジニアス・コア (2011-)

第 2 の鉱脈が枯渇すると、含有量が減りコストが増加する、より小さな第 3 の鉱脈への移動を強いられます。我々は、ムーアの第 3 の鉱脈に移動しています。
第 3 の鉱脈では、コア数を単に増やすだけではなく、異なる種類のコアを増やすためにトランジスターの増加分を費やしています。異なるコアは多くの場合より小さく、振り子は左方向に戻るように揺れているため、その数は非常に多くなります。

このヘテロジニアス化は 2 つのカテゴリーに分けられます (図 3 を参照)。

図 3.

  1. 大きく高速なコア vs 小さく低速なコア。ヘテロジニアス化が最も小さくなるのはすべてのコアが同じ命令セットの汎用コアの場合ですが、一部のコアには実行を加速する (例えば、さまざまな形式の内部並列性を使用してメモリー・レイテンシーを隠蔽する) ハードウェアが含まれるため、これらのコアはほかのコアよりも大きくなります。 このモデルでは、一部のコアはプログラムのシリアル部分を高速に実行するために最適化された大きく複雑なコアになり、ほかのコアはプログラムの並列部分のスケーラビリティーのために全体的なスループットが向上するよう最適化された小さなコアになります。これらのコアが同じ命令セットを使用した場合でも、コンパイラーは異なるコードを生成しようとします。コード生成を制御する方法をプログラミング言語が明確に示す必要がある場合、この違いはプログラマーが認識できるようになります。これはインテル社がインテル® Xeon® プロセッサー (大きく高速) とインテル® MIC アーキテクチャー (小さく低速) に採用したアプローチで、どちらも多くの x86 命令セットを実行します。
  2. 汎用コア vs 専用コア。このほかに、例えば、一部のコアが C や C++ のようなメインストリーム言語をサポートしないような、異なる機能を持つ複数のコアを搭載したシステムがあります。PlayStation* 3 に搭載された IBM* Cell プロセッサーは、同じチップ上に異なる種類のコアを統合することにより (合計 9 コア。1 つの汎用コアで 8 つの専用 SPU コアを制御)、この種の実装に先駆けました。2009 年以降、GPU がグラフィックスの代わりに計算に使用されていることを目にする機会が多くなっています。ある種のコードをより効率的に、より高速に、より低いコストで実行できるのであれば、SPU や GPU のような専用コアは魅力的です。処理がこれらのコアに適している場合はなおさらです。

GPGPU は 十分に利用されていない ハードウェアを活用するという点で興味深いものです。既存のメインストリームのマシンの多くには、計算に利用可能な GPU がすでに搭載されています。2011 年 6 月には AMD Fusion* が、2011 年 11 月には NVIDIA* Tegra* 3 が、同一チップ上に CPU と GPU コアを搭載したシステムとして登場しています。このようなシステムは大きな可能性を秘めており、利用されていないハードウェアを活用して計算を多用するメインストリーム・アプリケーションを作成する試みが行われています。これまで、GPU を計算に利用する方法として、CUDA*、OpenCL*、C++ AMP* などのテクノロジーが使用されてきました。パフォーマンスが重要なメインストリームのアプリケーション開発者も、同様のテクノロジーを理解する必要があります。表 1 を参照してください。

表 1.

この残り少ないムーア鉱山の鉱脈を開発する新しい画期的な方法は、2012 年時点ではまだ発見されていません。これまでの鉱脈が枯渇すると、鉱山の大部分を採掘し終わったことになります。

現在はまだ採掘が続けられていますが、危機が迫っているのは明らかです。我々はすでに最後の段階に入っているのですから。

Part 1 | Part 2 | Part 3 | Part 4 | Part 5 | Part 6

関連記事

  • パラレルジャングルへようこそ! Part 2パラレルジャングルへようこそ! Part 2 このシリーズでは、モバイルデバイスからデスクトップ、クラスター、最高粒度のクラウドまで、並列化がもたらす影響について解説します。さまざまな並列化の実装があることによる混乱は、プログラミングにおける大きな挑戦をもたらしま […]
  • パラレルジャングルへようこそ! Part 6パラレルジャングルへようこそ! Part 6 このシリーズでは、モバイルデバイスからデスクトップ、クラスター、最高粒度のクラウドまで、並列化がもたらす影響について解説します。さまざまな並列化の実装があることによる混乱は、プログラミングにおける大きな挑戦をもたらしま […]
  • 並列プログラミング並列プログラミング このページではインテル® ソフトウェア開発ツールがサポートする並列プログラミング・モデルを中心に関連する記事や参考資料へのリンクをまとめています。 [tab […]
  • 効率良い並列化効率良い並列化 この記事は、インテル® ソフトウェア・サイトに掲載されている「Efficient […]
  • ガイド付き自動並列化 (GAP)ガイド付き自動並列化 (GAP) この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Guided Auto-Parallel (GAP)」の日本語参考訳です。 ガイド付き自動並列化の概要 インテル® […]