【B4】Delphi/C++テクニカル/テクノロジートレンド

Delphi／C++Builderで実践する並列プログラミング──マルチコアからクラスタへ
株式会社イマジオム 代表取締役
高木太郎

アジェンダ

• 第１部：並列処理の基礎• 並列処理とは何か• マルチＣＰＵ、マルチコア、クラスタ、グリッド• 要素技術• 通信、マルチスレッド、ノード管理、データ管理、スケジューリング

• 性能• フォーク・ジョインモデル、粒度、アムダールの法則、最速ノード数• 既存のテクノロジ• 第２部：実践、クラスタプログラミング• ＰＣクラスタミドルウェア「HarmonyCalc」• 例題「マンデルブロ集合」

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2

1

はじめに

• このセッションを準備するにあたって悩んだこと──
当社製品「HarmonyCalc」の使用を前提にお話しするべきか？
• 特定の製品に依存しない一般的な内容にするか？
• 具体的・実践的で、応用しやすい内容にするか？

• 第２部では、HarmonyCalcの使用を前提にお話しすることにしました。
その代わり……

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

3

第１部：並列処理の基礎

2

並列処理とは何か

開始

開始

処理１
処理１

処理２

…

処理ｎ

処理２
：
処理ｎ
終了

終了
並列処理＝処理を分割し、複数の並列処理＝処理を分割し、複数のプロセッサで同時に実行することプロセッサで同時に実行すること

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

5

並列処理の必要性「ムーアの法則」の限界に達したら、並列化しか道はない「ムーアの法則」の限界に達したら、並列化しか道はない
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

63

並列化（１）：マルチＣＰＵ・マルチコアシングルコアからシングルコアからメニーコアへ
メニーコアへ
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

7

並列化（２）：クラスタ・グリッド

親ノード
子ノード

子ノード

子ノード

子ノードネットワークラックからラックから一体型へ一体型へ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

84

混同されやすいクラスタとグリッド• 「集中管理」と「分散管理」の違いで、まったく異なる方向に
クラスタ
クラスタ

グリッド
グリッド

ハードウェアハードウェア
管理者
管理者

少数
少数

多数
多数

ＯＳ
ＯＳ

Linux・Windowsなど
Linux・Windowsなど

Windowsに限られる
Windowsに限られる

通信
通信
ハードウェアハードウェアEthernetの他にEthernetの他にInfinibandやMyrinetもInfinibandやMyrinetもEthernetに限られる
Ethernetに限られる

通信
通信
プロトコル
プロトコル

伝送速度優先伝送速度優先信頼性・守秘性・信頼性・守秘性・汎用性優先
汎用性優先

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

9

並列処理技術の使い分け• 「現在の処理時間」と「必要な処理速度」で技術が決まる

現在の現在の処理時間
処理時間

必要な処理速度
必要な処理速度
２～２０倍
２～２０倍２０～１０００倍
２０～１０００倍

１分
１分
１時間
１時間
１週間
１週間

１０００倍以上
１０００倍以上（実現不可能）（実現不可能）マルチＣＰＵ
マルチＣＰＵ
マルチコア
マルチコア

クラスタ
クラスタ

１年
１年

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

クラスタ
クラスタ
グリッド
グリッド

105

フォーク・ジョインモデル• 分岐（fork）と統合（join）の組み合わせが並列処理の基本• 「タスク」（task）：forkとjoinの間で並列実行される処理• 「粒度」（granularity）：タスクの（平均的な）処理量

開始

タスク１

タスク２…

タスクｎ

終了
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

11

性能（１）──アムダールの法則• アムダールの法則（Amdahl’s law）：
アルゴリズムが「並列化に適しているか」を判定する法則

a=1p+ (1 − p )na 処理速度倍率n プロセッサの数
p 逐次処理部分の割合• タスク分割のできない「逐次処理部分」の割合が、最大処理性能を決める

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

126

性能（２）──最速ノード数• ノードの数を増やすほど、処理時間が短くなるとは限らない本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

13

並列処理を実現する要素技術• 並列処理は、いろいろな要素技術の組み合わせ
•
•
•
•
•

通信（communication）
マルチスレッド（multi-threading）
ノード管理（node management）
データ管理（data management）
スケジューリング（scheduling）

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

147

要素技術（１）──通信• クラスタ・グリッドでは、コンピュータ間でのデータ交換が必要• プロトコルをどのように設計するか？
• クラスタ：伝送速度を重視• グリッド：信頼性・守秘性・汎用性を重視• どのような通信ハードウェアを使うか？
• トレンド＝特殊なハードウェアから、一般的なハードウェアへ• 通常はギガビットEthernetとＩＰプロトコルで充分

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

15

要素技術（２）──マルチスレッド• マルチＣＰＵ・マルチコアの性能を引き出すには、マルチスレッドプログラミングが必要• マルチスレッドの問題をどのように避けるか？
• 同期、排他制御• デッドロック・スタベーション• ソースコードの可読性をどのように保つか？
• 多くの開発言語では、別スレッドでの実行をインラインに記述することができない本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

168

要素技術（３）──ノード管理• クラスタ・グリッドでは、システム構成の定義と、システム全体のリアルタイム監視が必要• システム構成をどのように記述するか？
• 単純な記述• ノードを収容するコンピュータ• ノードへのアクセス方法• 高度な記述• 故障ノードをどのように検出するか？
• ＴＣＰの送信タイムアウトによる検出• ＵＤＰ／ＩＣＭＰパケットの不着による検出本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

17

要素技術（４）──データ管理• データへの同時アクセスによる障害や、データの消し忘れによるリソースリークを避ける仕組みが必要• 同時アクセスをどのように回避するか？
• アクセスを時間的にずらす：排他制御• アクセス対象を分離する：一時データの作成• リソースリークをどのように避けるか？
• データのコピー・消去を追跡していれば、処理中断時やエラー発生時のリソースリークが避けられる本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

18

9

要素技術（５）──スケジューリング

• 個々のコンピュータやノードを協調させて一つの有用な処理を行わせるため、リアルタイムな動作計画が必要• ノードとのコミュニケーションをどのように設計するか？
• 指示：スケジューラからノードへ• 通知：ノードからスケジューラへ• どのようなスケジューリング戦略が優れているか？
• 手の空いたノードに、どんどん処理を割り振っていくのが基本• ＯＳの性能を高めるために何ができるか？

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

19

並列プログラミングの性格• ハードウェアの個性を活用した方が高性能• オブジェクト指向との相性が必ずしもよくない• 大きい処理単位（粒度）で並列化した方が高性能• アプリケーション開発者自身の努力が必要• 「性能」と「使い勝手」を折り合わせる考え方によって、いろいろなテクノロジが乱立し、なかなか統一されない。
••••

スレッドＡＰＩ（thread application program interface）
ＭＰＩ（message passing interface）
OpenMP（Open Multi-processing）
並列化ライブラリ（parallelized libraries）

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2010

既存のテクノロジ（１）－スレッドＡＰＩ• マルチスレッドプログラミングのため、ＯＳが用意している機能• ＯＳに付属しているので、ＯＳを持っていれば誰でも使える

長所
長所

ＯＳ以外のものが不要
ＯＳ以外のものが不要
開発に必要な情報が入手しやすい開発に必要な情報が入手しやすい

短所
短所

スケジューラをプログラムに実装する必要がある
スケジューラをプログラムに実装する必要がある
ノード・データをプログラムで管理する必要がある
ノード・データをプログラムで管理する必要がある
クラスタに対応していない
クラスタに対応していない
マルチスレッドに固有の問題が起こりやすい
マルチスレッドに固有の問題が起こりやすい
ソースコードの可読性が失われやすい
ソースコードの可読性が失われやすい

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

21

既存のテクノロジ（２）－ＭＰＩ• ＯＳの扱うメッセージを、他のコンピュータに伝送するためのインタフェース• オープンソースとして標準化が進み、各種のハードウェアに対応
長所
長所

性能向上のためのチューニング自由度が高い
性能向上のためのチューニング自由度が高い

短所
短所

スケジューラをプログラムに実装する必要がある
スケジューラをプログラムに実装する必要がある
ノード・データをプログラムで管理する必要がある
ノード・データをプログラムで管理する必要がある
プログラミングが非常に複雑
プログラミングが非常に複雑プログラムのテスト・デバッグが難しい
プログラムのテスト・デバッグが難しい
マルチスレッドに固有の問題が起こりやすい
マルチスレッドに固有の問題が起こりやすい
ソースコードの可読性が失われやすい
ソースコードの可読性が失われやすい

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

22

11

既存のテクノロジ（３）－OpenMP• 並列コンパイラのための拡張言語仕様• C／C++、Fortranに対応• オープンソースとして標準化が進められている
長所
長所

プログラムのテスト・デバッグが簡単
プログラムのテスト・デバッグが簡単
ソースコードの可読性がほとんど失われない
ソースコードの可読性がほとんど失われない

短所
短所

限られた言語・コンパイラしか対応していない
限られた言語・コンパイラしか対応していない
クラスタへの対応が不充分
クラスタへの対応が不充分
データをプログラムで管理する必要がある
データをプログラムで管理する必要がある
ファイル形式のデータに対応していない
ファイル形式のデータに対応していない

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

23

既存のテクノロジ（４）－並列化ライブラリ• 長い時間のかかる汎用的な処理を、マルチＣＰＵ・マルチコアのために並列化したライブラリ• いくつかのベンダが製品として販売
長所
長所

並列プログラムを自分で開発する手間が省ける
並列プログラムを自分で開発する手間が省ける

短所
短所

必要な機能が手に入るとは限らない
必要な機能が手に入るとは限らない
大きい粒度での並列化が難しく、高性能が得にくい
大きい粒度での並列化が難しく、高性能が得にくい
クラスタへの対応が不充分
クラスタへの対応が不充分
市販の製品は一般にかなり高価
市販の製品は一般にかなり高価

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2412

第２部：実践、クラスタプログラミング

ＰＣクラスタミドルウェア「HarmonyCalc」• ＰＣクラスタミドルウェア• アプリケーションをＰＣクラスタで動作させるための組み込みソフトウェア• 自社製品の画像処理・図形処理プログラムを高速化するために開発した要素技術を製品化• ユーザの視点・論理で設計• オリジナリティ＝「使い勝手」を最も重視• 開発しやすさ• 保守しやすさ• 配布しやすさ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2613

「並列処理を、すべての人に」

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

27

HarmonyCalcの構成• 五つの要素技術をＤＬＬに実装
エクスポート
エクスポート

プログラム
プログラム（アプリケーション・ＤＬＬ）（アプリケーション・ＤＬＬ）

スケジューラスケジューラ（セッションモデル）（セッションモデル）

HarmonyCalc
HarmonyCalc
ＯＳ（Windows）
ＯＳ（Windows）
ハードウェアハードウェアコールバックコールバック

データ管理
データ管理

ノード管理
ノード管理

ファイル
メモリ
ファイル
メモリ
アクセス
アクセス
アクセス アクセス

通信制御
通信制御

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

28

14

セッションモデルとセッション• 「セッションモデル」＝HarmonyCalcの並列プログラミングモデル••••

セッション階層：並列処理手順を「セッション」の階層として一般化
イベントドリブン：処理をブロックし、スケジューリングを独占的に実行
仮想ノード：実際のハードウェア構成に関係せずにノードを定義
独占的なデータ操作：データのコピー・消去をプログラムに行わせない• 「セッション」＝並列処理の構成要素• 包含関係と前後関係、関与するノードを規定• 開始時と終了時にイベントを発生させる

ハードウェア構成を
ハードウェア構成をプログラムから隠蔽プログラムから隠蔽
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

29

並列処理手順の一般化• １１種類のセッションの組み合わせで並列処理手順を記述
•
••
•
•
••
••
•
•

コピー（copy）セッション
消去（delete）セッション
個別配布（send）セッション
タスク実行（execute）セッション
個別収集（receive）セッション
個別消去（waste）セッション
連続実行（batch）セッション
一括配布（deliver）セッション
並行処理（race）セッション
一括消去（clean）セッション
処理全体（operate）セッション

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

30

15

シーケンシャル実装とイベントドリブン実装

開始

開始

処理１

イベント１
処理をブロック

処理２
：
処理ｎ

イベント２
：
イベントｎ

終了

終了

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

31

セッションイベントとノードイベント

親ノード
親ノード

子ノード
子ノード

セッション開始
セッション
開始イベント

処理条件の設定

ノード
イベント

処理の本体

セッション
終了イベント

処理結果の把握ノード
イベント

セッション終了
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

32

16

仮想ノードコンピュータコンピュータＣＰＵＣＰＵ

コア
コア
HarmonyCalc
HarmonyCalc
仮想ノード
仮想ノード
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

33

セッションモデルのメリット• 主なメリット••••••

並列化に伴うプログラムの変更が少ない並列化のために高度なプログラミング知識を必要としない
コンピュータの台数や、ＣＰＵ・コアの個数に関係なく動作
並列処理手順を変えても、ソースコードの可読性が失われない
割り込み処理（処理完了率の取得、処理の中断）の実装が簡単
並列プログラムの開発に「クラスタシミュレータ」が利用可能• このような用途に最適••••パッケージソフトウェアへのＯＥＭ組み込み
対話型（コマンド型）アプリケーションの並列化
ライブラリの並列化
CやFortran以外で作られたプログラムの並列化

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

3417

例題：マンデルブロ集合（１）２複素変換Ｚ←Ｚ
複素変換Ｚ←Ｚ２＋Ｃを繰り返し、発散を判定＋Ｃを繰り返し、発散を判定
発散速度を色に変換し、複素平面にマッピング
発散速度を色に変換し、複素平面にマッピング

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

35

例題：マンデルブロ集合（２）

拡大していくと、興味深い形が現れる
拡大していくと、興味深い形が現れる

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

3618

「マンデルブロ集合」プログラムの性質• 処理量が非常に多い• １６０，０００個のピクセルごとに、４０，０００回の複素計算が必要• １枚の画像を得るのに、普及型パソコンで１０分以上かかる• 処理の順序は問わない• 画像をいくつかの小領域に分割して作ることができる• ピクセルを処理する順番を入れ替えても、結果は変わらない

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

37

並列化してみよう• シミュレータへ• ＤＬＬのリンク• イベントドリブン化

もとのプログラム• マルチコアへ• ＤＬＬの交換• クラスタへ• ＤＬＬの交換• イベントハンドラの切り分け

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

シミュレータ
プログラム

マルチコア
プログラム

クラスタ
プログラム

38

19

おわりに

並列処理の二つの市場

科学・研究分野
科学・研究分野

産業・医療・民生分野
産業・医療・民生分野

エンド
エンド
ユーザ
ユーザ

科学者・研究者、科学者・研究者、コンピュータ技術者
コンピュータ技術者

コンピュータや技術にコンピュータや技術に詳しい人とは限らない
詳しい人とは限らない

方向性・
方向性・
目的
目的

高い処理性能を追求
高い処理性能を追求

限られた予算・人員で限られた予算・人員で要求を充足
要求を充足

技術への技術への要求
要求

使い勝手よりも使い勝手よりも性能・自由度
性能・自由度

性能・自由度よりも性能・自由度よりも使い勝手
使い勝手

従来技術
従来技術

パブリックドメインをパブリックドメインをベースに発展
ベースに発展

未踏
未踏

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

40

20

始まりつつある「パラレルディバイド」

ハードウェアの並列化が進んでいくと、何が起こるか？
ハードウェアの並列化が進んでいくと、何が起こるか？

並列処理は面倒だから、並列処理は面倒だから、取りあえず後回しにしよう
取りあえず後回しにしよう

使えるものを使いながら、使えるものを使いながら、早く並列処理に慣れよう
早く並列処理に慣れよう

ハードウェアをハードウェアを使いこなせない
使いこなせないハードウェアをハードウェアを使いこなせる使いこなせる

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

41

並列処理は怖くない• 多くの人が、既存のテクノロジを使いこなすために膨大な努力を払い、多くの人が頓挫している• しかし本当に重要なのは、対象のアルゴリズムを大きい粒度で分割するテクニック。テクノロジは後からゆっくり選べばよい• 日ごろから並列処理を、「自分の技術」として意識していることが非常に大事。アルゴリズムの設計から変わってくる本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

4221

ご清聴ありがとうございました

株式会社イマジオム
株式会社イマジオム
茨城県日立市水木町１－１１－１０
茨城県日立市水木町１－１１－１０
０２９４－２８－０１４７
０２９４－２８－０１４７
http://www.imageom.co.jp/
http://www.imageom.co.jp/
office@imageom.co.jp
office@imageom.co.jp
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

4322