コンピューティング において、アルゴリズム スケルトン、または並列処理パターンは、並列および分散コンピューティングのための高レベルの並列プログラミング モデルです。
アルゴリズム スケルトンは、一般的なプログラミング パターンを利用して、並列アプリケーションや分散アプリケーションの複雑さを隠します。基本的なパターン セット (スケルトン) から始めて、基本的なパターンを組み合わせることで、より複雑なパターンを構築できます。
概要
アルゴリズム スケルトンの最も優れた特徴は、他の高レベル並列プログラミング モデルとの違いとして、並列アクティビティのオーケストレーションと同期がスケルトン パターンによって暗黙的に定義されることです。プログラマーは、アプリケーションの連続部分間の同期を指定する必要がありません。これにより、2 つの影響が生じます。まず、通信/データ アクセス パターンが事前にわかっているため、コスト モデルを適用してスケルトン プログラムをスケジュールできます。[1]次に、アルゴリズム スケルトン プログラミングでは、従来の低レベル並列プログラミング モデル (スレッド、MPI) と比較してエラーの数が少なくなります。
サンプルプログラム
次の例は、並列プログラミング用の Java Skandium ライブラリに基づいています。
目的は、分割統治パターンを使用して、 アルゴリズム スケルトン ベースのQuickSortアルゴリズムの並列バージョンを実装することです。高レベルのアプローチにより、スレッド管理がプログラマーから隠されることに注意してください。
// 1. スケルトン プログラムを定義します。
Skeleton < Range , Range > sort = new DaC < Range , Range > ( new ShouldSplit ( threshold , maxTimes ), new SplitList (), new Sort (), new MergeList ()); // 2. 入力パラメーターFuture < Range > future = sort . input ( new Range ( generate (...))); // 3. ここで別の操作を行います。// ... // 4. 結果をブロックします。 Range result = future . get ();
- まず最初に、パターン (ShouldSplit、SplitList、Sort、MergeList) を満たす関数コードを使用してスケルトンの新しいインスタンスを定義します。関数コードは、並列処理を考慮せずにプログラマーによって記述されます。
- 2 番目のステップは、計算をトリガーするデータの入力です。この場合、Range は、配列と、サブ配列の表現を可能にする 2 つのインデックスを保持するクラスです。フレームワークに入力されたデータごとに、新しい Future オブジェクトが作成されます。複数の Future を同時にスケルトンに入力できます。
- Future では、結果の計算中に他のタスクを実行できるため、非同期計算が可能になります。
- 必要に応じてブロックして(つまり、結果がまだ利用できない場合)、計算の結果を取得できます。
この例の機能コードは、条件、分割、実行、およびマージの 4 つのタイプに対応しています。
パブリッククラスShouldSplit はCondition < Range >を実装します{
int threshold , maxTimes , times ; public ShouldSplit ( int threshold , int maxTimes ) { this.threshold = threshold ; this.maxTimes = maxTimes ; this.times = 0 ; } @Override public synchronized boolean condition ( Range r ) { return r.right - r.left > threshold && times ++ < this.maxTimes ; } }
ShouldSplit クラスは Condition インターフェイスを実装します。この関数は入力 (この場合は Range r) を受け取り、true または false を返します。この関数が使用される Divide and Conquer のコンテキストでは、サブ配列を再度分割するかどうかを決定します。
SplitList クラスは、分割インターフェースを実装します。この場合、(サブ)配列を小さなサブ配列に分割します。このクラスは、partition(...)よく知られている QuickSort ピボットおよびスワップ スキームを実装するヘルパー関数を使用します。
パブリッククラスSplitList はSplit < Range 、Range >を実装します。
@Override
public Range [] split ( Range r ){ int i = partition ( r . array , r . left , r . right ); Range [] intervals = { new Range ( r . array , r . left , i - 1 ), new Range ( r . array , i + 1 , r . right )}; return intervals ; } }
Sort クラスは Execute インターフェースを実装し、 で指定されたサブ配列のソートを担当しますRange r。この場合、指定されたサブ配列に対して Java のデフォルトの (Arrays.sort) メソッドを呼び出すだけです。
パブリッククラスSortはExecute < Range , Range > {を実装します。
@Override
public Range execute ( Range r ){ if ( r . right <= r . left ) return r ; Arrays . sort ( r . array , r . left , r . right + 1 ); return r ; } }
最後に、サブ配列のセットがソートされたら、Merge インターフェイスを実装する MergeList クラスを使用して、サブ配列の各部分をより大きな配列にマージします。
パブリッククラスMergeList はMerge < Range 、Range > {を実装します。
@Override
public Range merge ( Range [] r ){ Range result = new Range ( r [ 0 ] . array , r [ 0 ] . left , r [ 1 ] . right ); return result ; } }
フレームワークとライブラリ
アシスト
ASSIST [2] [3]は、構造化されたコーディネーション言語をプログラマに提供するプログラミング環境です。コーディネーション言語は、並列プログラムをソフトウェアモジュールの任意のグラフとして表現できます。モジュールグラフは、型付きデータストリームのセットを使用して、一連のモジュールが互いにどのように相互作用するかを記述します。モジュールは順次または並列にすることができます。順次モジュールは、C、C++、またはFortranで記述でき、並列モジュールは特別なASSIST並列モジュール(parmod)を使用してプログラムされます。
AdHoc [4] [5]は階層的でフォールトトレラントな分散共有メモリ(DSM)システムであり、リポジトリにget/put/remove/execute操作を提供することで、処理要素間のデータストリームを相互接続するために使用されます。AdHocに関する研究は、データリポジトリの透明性、スケーラビリティ、フォールトトレランスに重点を置いています。
スケルトンが提供されないという意味では古典的なスケルトン フレームワークではありませんが、ASSIST の汎用parmod は、 farm、mapなどの古典的なスケルトンに特化できます。ASSISTはparmodの自律制御もサポートしており、使用されるリソースの数を動的に調整することでパフォーマンス コントラクトの対象にすることができます。
二酸化炭素
CO2P3S (Correct Object-Oriented Pattern-based Parallel Programming System)は、 Javaでスレッドを使用して並列処理を実現する パターン指向開発環境[6]です。
CO2P3S は、並列アプリケーションの完全な開発プロセスに関係しています。プログラマーはプログラミング GUI を介して対話し、パターンとその構成オプションを選択します。次に、プログラマーがパターンに必要なフックを埋めると、アプリケーションの並列実行のためのフレームワークとして Java の新しいコードが生成されます。生成されたフレームワークは、抽象度の降順で、パターン レイヤー、中間コード レイヤー、ネイティブ コード レイヤーの 3 つのレベルを使用します。したがって、上級プログラマーは、生成されたコードに複数のレベルで介入して、アプリケーションのパフォーマンスを調整できます。生成されたコードは、スーパークラスの拡張を必要としないプログラマーによって提供される型を使用して、ほとんどが型安全ですが、メッシュ パターンの Reduce(..., Object Reducer) メソッドのように、完全に型安全ではありません。
CO2P3S でサポートされているパターンのセットは、メソッド シーケンス、ディストリビューター、メッシュ、ウェーブフロントに対応しています。オブジェクト参照を使用してフレームワークを構成することで、複雑なアプリケーションを構築できます。ただし、適切なパターンがない場合、MetaCO2P3S グラフィカル ツールは、プログラマがパターン デザインを変更して CO2P3S に新しいパターンを導入できるようにすることで、拡張性に対応します。
CO2P3Sにおける分散メモリアーキテクチャのサポートは、後に導入されました。[7]分散メモリパターンを使用するには、プログラマーはパターンのメモリオプションを共有から分散に変更し、新しいコードを生成する必要があります。使用の観点から、コードの分散メモリバージョンでは、リモート例外の管理が必要です。
カルシウムとスカンジウム
Calcium はLithium と Muskel から多大な影響を受けています。そのため、アルゴリズム スケルトン プログラミングを Java ライブラリとして提供します。タスクとデータの並列スケルトンは両方とも完全にネスト可能であり、継承ではなくパラメトリック スケルトン オブジェクトを介してインスタンス化されます。
Calcium は、分散クラスターのようなインフラストラクチャのProActive環境上でスケルトン アプリケーションの実行をサポートします。さらに、Calcium にはアルゴリズム スケルトン プログラミングのための 3 つの特徴的な機能があります。1 つ目は、パフォーマンス バグの原因となるコードをプログラマーが特定するのに役立つパフォーマンス チューニング モデルです。 [8] 2 つ目は、サブジェクト削減プロパティを保証することが証明されており、Java Generics を使用して実装されているネスト可能なスケルトンの型システムです。[9] 3 つ目は、データ集約型アプリケーション用のスケルトンを可能にする透過的なアルゴリズム スケルトン ファイル アクセス モデルです。[10]
Skandiumは、マルチコアコンピューティング向けにCalciumを完全に再実装したものです。Skandiumで書かれたプログラムは、共有メモリを利用して並列プログラミングを簡素化することができます。[11]
エデン
Eden [12]はHaskellを拡張した分散メモリ環境向けの並列プログラミング言語です。プロセスは並列プログラミングを実現するために明示的に定義されますが、通信は暗黙のままです。プロセスは1つのライターを1つのリーダーに接続する単方向チャネルを介して通信します。プログラマーはプロセスがどのデータに依存するかを指定するだけで済みます。Edenのプロセスモデルは、プロセスの粒度、データ分散、通信トポロジを直接制御します。
Eden は、スケルトンが言語構成要素として提供されないという意味でスケルトン言語ではありません。代わりに、スケルトンは Eden の低レベルプロセス抽象化の上に定義され、タスクとデータの両方の並列性をサポートします。したがって、他のほとんどのアプローチとは対照的に、Eden ではスケルトンを同じ言語で定義でき、スケルトンのインスタンス化が記述されるのと同じレベル、つまり Eden 自体になります。Eden は関数型言語の拡張であるため、Eden スケルトンは高階関数です。Eden では、アルゴリズム スケルトンの並列実装を記述するアーキテクチャに依存しないスキームである実装スケルトンの概念が導入されています。
エスケル
エディンバラスケルトンライブラリ(eSkel)はC言語で提供され、MPI上で動作します。eSkelの最初のバージョンは[13]で説明されており、その後のバージョンは[14]で発表されています。
[15]では、スケルトンのネストモードとインタラクションモードが定義されています。ネストモードは一時的または永続的のいずれかであり、インタラクションモードは暗黙的または明示的のいずれかです。一時的なネストとは、ネストされたスケルトンが各呼び出しに対してインスタンス化され、その後破棄されることを意味します。一方、永続的とは、スケルトンが一度インスタンス化され、同じスケルトンインスタンスがアプリケーション全体で呼び出されることを意味します。暗黙的なインタラクションとは、スケルトン間のデータフローがスケルトン構成によって完全に定義されることを意味します。一方、明示的とは、スケルトン構成で指定されていない方法でデータを生成したり、フローから削除したりできることを意味します。たとえば、入力をまったく受け取らずに出力を生成するスケルトンには、明示的なインタラクションがあります。
主にパイプラインのスケジューリングとリソースマッピングのパフォーマンス予測は、Benoitら[16] [17] [18] [19]によって研究されてきました。彼らはプロセス代数に基づいて各マッピングのパフォーマンスモデルを提供し、モデルの結果に基づいて最適なスケジューリング戦略を決定します。
最近の研究では、構造化並列プログラミングにおける適応の問題、特にパイプスケルトン[20]について取り上げられている。 [21] [22]
ファストフロー
FastFlow は、ストリーミングおよびデータ並列アプリケーションの開発に特化したスケルトン並列プログラミング フレームワークです。当初はマルチコアプラットフォームを対象に開発されましたが、共有メモリ プラットフォームのクラスターで構成される異種プラットフォームを対象にするように順次拡張され、[23] [24] NVidia GPGPU、Xeon Phi、Tilera TILE64などのコンピューティング アクセラレータが搭載されている場合もあります。FastFlow の主な設計理念は、適切な並列プログラミング抽象化と慎重に設計されたランタイム サポートを通じて、アプリケーション設計者に並列プログラミングの主要機能 (市場投入までの時間、移植性、効率性、パフォーマンスの移植性など) を提供することです。[25] FastFlowは、異種並列プラットフォーム向けの汎用 C++ プログラミング フレームワークです。Intel TBBや OpenMPなどの他の高レベル プログラミング フレームワークと同様に、ポータブル並列アプリケーションの設計とエンジニアリングを簡素化します。しかし、キャッシュコヒーレントな共有メモリプラットフォームでの細粒度並列処理、ストリーミングアプリケーション、マルチコアとアクセラレータの結合使用など、特定のアプリケーションシナリオでは、他の並列プログラミングフレームワークと比較して表現力とパフォーマンスの点で明らかに優位性があります。他のケースでは、FastFlowは通常、Intel TBB、OpenMP、Cilkなどの最先端の並列プログラミングフレームワークに匹敵し、場合によってはわずかに高速です。[26]
HDC
高階分割統治法(HDC)[27]は、関数型言語Haskellのサブセットです。関数型プログラムは、C / MPIにコンパイルでき、スケルトン実装とリンクできる多態的な高階関数として表現されます。この言語は分割統治パラダイムに焦点を当てており、一般的な分割統治スケルトンから始めて、効率的な実装を持つより具体的なケースを導き出します。具体的なケースは、固定再帰深度、定数再帰次数、複数ブロック再帰、要素ごとの操作、および通信相手との通信に対応しています[28]
HDC は、サブ問題の粒度と、その粒度と利用可能なプロセッサの数との関係に特に注意を払います。HDC はプログラムの各部分に適切なプロセッサの割り当てを推定しようとするため、プロセッサの合計数はスケルトン プログラムのパフォーマンスにとって重要なパラメータです。したがって、アプリケーションのパフォーマンスは、推定されるプロセッサ数と密接に関係しており、サブ問題の数が過剰になったり、利用可能なプロセッサを活用するための並列性が不十分になったりします。
HOC-SA
HOC-SA は Globus Incubator プロジェクトです。HOC
-SA は Higher-Order Components-Service Architecture の略です。Higher-Order Components (HOC) の目的は、グリッド アプリケーション開発を簡素化することです。HOC
-SA の目的は、Globus ミドルウェア (GRAM RSL ドキュメント、Web サービス、リソース構成など) の詳細をすべて知りたくない Globus ユーザーに、コア Globus Toolkit よりも高レベルのグリッド インターフェイスを提供する HOC を提供することです。HOC は
グリッド対応のスケルトンであり、Globus Toolkit 上にコンポーネントとして実装され、Web サービス経由でリモートからアクセスできます。[29]
ジャスケル
JaSkel [30]は、ファーム、パイプ、ハートビートなどのスケルトンを提供する Java ベースのスケルトン フレームワークです。スケルトンは継承を使用して特殊化されます。プログラマーは、各スケルトンの抽象メソッドを実装して、アプリケーション固有のコードを提供します。JaSkel のスケルトンは、シーケンシャル、コンカレント、および動的バージョンの両方で提供されます。たとえば、コンカレント ファームは共有メモリ環境 (スレッド) で使用できますが、分散ファームを使用する必要がある分散環境 (クラスター) では使用できません。あるバージョンから別のバージョンに変更するには、プログラマーはクラスのシグネチャを変更して、別のスケルトンから継承する必要があります。スケルトンのネストには基本的な Java Object クラスが使用されるため、スケルトンの構成中に型システムは強制されません。
JaSkelでは、計算の分散の側面はAOP、より具体的にはAspectJ実装を使用して処理されます。したがって、JaSkelはクラスターとグリッドの両方のインフラストラクチャにデプロイできます。[31]ただし、JaSkelアプローチの欠点は、スケルトンのネストがデプロイメントインフラストラクチャに厳密に関連していることです。したがって、階層型インフラストラクチャでは、ファームの二重ネストの方が単一のファームよりもパフォーマンスが向上します。これでは、スケルトンプログラムの分散と機能上の懸念を分離するためにAOPを使用する目的が達成されません。
リチウムとマスケル
Lithium [32] [33] [34]とその後継であるMuskelは、イタリアのピサ大学で開発されたスケルトンフレームワークです。どちらも、Java ライブラリとしてネスト可能なスケルトンをプログラマに提供します。スケルトンアプリケーションの評価は、Aldinucci と Danelutto [35] [36]によって導入された操作意味論の正式な定義に従っており、タスクとデータの両方の並列処理を処理できます。この意味論は、ラベル付き遷移システムを使用して、スケルトン言語の機能的動作と並列動作の両方を記述します。さらに、スケルトン書き換え技術 [18, 10]、タスクの先読み、サーバー間の遅延バインディングなど、いくつかのパフォーマンス最適化が適用されます。[37]
実装レベルでは、Lithiumは並列処理を実現するためにマクロデータフロー[38] [39]を活用しています。入力ストリームが新しいパラメータを受け取ると、スケルトンプログラムが処理されてマクロデータフローグラフが得られます。グラフのノードはマクロデータフロー命令(MDFi)であり、プログラマーが提供するコードの連続部分を表します。タスクは複数のMDFiをグループ化するために使用され、タスクプールのアイドル処理要素によって消費されます。グラフの計算が完了すると、結果が出力ストリームに配置され、ユーザーに返されます。
Muskelは、サービス品質(QoS)[40]、タスクプールとインタープリタ間のセキュリティ[41] [42] 、分散実行フレームワークであるJava / Jini Parallel Framework(JJPF) [43]とのインターフェース時のリソース検出、負荷分散、フォールトトレランスなどの非機能的な機能も提供しています。Muskelは、構造化プログラミングと非構造化プログラミングを組み合わせるためのサポートも提供しており[44]、最近の研究では拡張性に取り組んでいます。[45]
マルバ
Mallba [46]は、厳密な探索、ヒューリスティックな探索、ハイブリッドな探索戦略をサポートする組み合わせ最適化のライブラリです。[47]各戦略は、必要なコードを提供することで使用できる汎用スケルトンとして Mallba に実装されています。厳密な探索アルゴリズムでは、Mallba は分岐限定法と動的最適化スケルトンを提供します。ローカル探索ヒューリスティックでは、Mallba は、ヒルクライミング、メトロポリス、シミュレーテッドアニーリング、タブーサーチをサポートしています。また、遺伝的アルゴリズム、進化戦略、その他 (CHC)などの進化アルゴリズムから派生した集団ベースのヒューリスティックもサポートしています。ハイブリッドスケルトンは、遺伝的アルゴリズムとシミュレーテッドアニーリングを組み合わせた GASA や、CHC と ES を組み合わせた CHCCES などの戦略を組み合わせています。
スケルトンは C++ ライブラリとして提供され、ネスト可能ではありませんが、型安全です。カスタム MPI 抽象化レイヤーである NetStream が使用され、プリミティブ データ型のマーシャリング、同期などを処理します。スケルトンには、ターゲット アーキテクチャ (シーケンシャル、LAN、WAN) に応じて、複数の低レベルの並列実装が含まれる場合があります。たとえば、集中型マスター スレーブ、分散型マスター スレーブなどです。
Mallbaは、探索スケルトンの状態を保持する状態変数も提供します。状態は探索と環境をリンクし、探索の進化を調べて将来のアクションを決定するためにアクセスできます。たとえば、状態は、これまでに見つかった最良の解決策や、分岐と境界の剪定のためのα、β値を保存するために使用できます。[48]
他のフレームワークと比較すると、Mallba のスケルトンの概念の使用方法は独特です。スケルトンは、パラメトリック並列化パターンではなく、パラメトリック検索戦略として提供されます。
骨髄
Marrow [49] [50]は、おそらく異種のマルチGPU環境でOpenCL計算をオーケストレーションするための C++ アルゴリズム スケルトン フレームワークです。タスクとデータ並列の両方のスケルトンのセットが提供され、ネストによって合成して複合計算を構築できます。結果として得られる合成ツリーのリーフ ノードは GPU 計算カーネルを表し、残りのノードはネストされたサブツリーに適用されたスケルトンを示します。このフレームワークは、異種のマルチ GPU 環境でこれらのツリーを正しく実行するために必要なホスト側のオーケストレーション全体を引き受けます。これには、データ転送と実行要求の適切な順序付け、およびツリーのノード間で必要な通信が含まれます。
Marrow の最も際立った機能には、パイプラインやループなど、これまで GPU コンテキストでは利用できなかった一連のスケルトンと、スケルトンのネスト機能 (これもこのコンテキストでは新しい機能) があります。さらに、このフレームワークは通信と計算をオーバーラップする最適化を導入し、PCIeバスによって課せられる遅延を隠します。
複数の GPU による Marrow 構成ツリーの並列実行は、データ並列分解戦略に従って行われます。この戦略では、計算ツリー全体を入力データセットの異なるパーティションに同時に適用します。どのカーネル パラメータを分解できるかを表現し、必要に応じて部分的な結果をどのようにマージするかを定義する以外は、プログラマーは基盤となるマルチ GPU アーキテクチャから完全に抽象化されます。
詳細情報とソースコードはMarrowのウェブサイトでご覧いただけます。
ミューズリー
ミュンスター スケルトン ライブラリMuesli [51] [52]は、高階関数、カリー化、多態型 [1] など、Skil で導入された多くのアイデアや概念を再実装した C++ テンプレート ライブラリです。これはMPI 1.2 とOpenMP 2.5 上に構築されており、他の多くのスケルトン ライブラリとは異なり、タスク並列スケルトンとデータ並列スケルトンの両方をサポートしています。スケルトンのネスト (構成) は P3L の 2 層アプローチに似ています。つまり、タスク並列スケルトンは任意にネストできますが、データ並列スケルトンはネストできませんが、タスク並列ネスト ツリーのリーフで使用できます。[53] C++ テンプレートはスケルトンを多態的にするために使用されますが、型システムは強制されません。ただし、ライブラリは[54]に触発された自動シリアル化メカニズムを実装しており、標準 MPI データ型に加えて、任意のユーザー定義データ型をスケルトン内で使用できます。サポートされているタスク並列スケルトン[55]は、Branch & Bound、[56] Divide & Conquer、[57] [58] Farm、[59] [60] Pipeで、補助スケルトンはFilter、Final、Initialです。fold (reduce)、map、permute、zipなどのデータ並列スケルトンとそのバリエーションは、分散データ構造の高次メンバー関数として実装されています。現在、Muesliは配列、行列、疎行列の分散データ構造をサポートしています。[61]
ユニークな機能として、Muesli のデータ並列スケルトンは、シングルコア、マルチノードのクラスターアーキテクチャの両方で自動的にスケーリングします。[62] [63]ここでは、ノードとコア間のスケーラビリティは、それぞれ MPI と OpenMP を同時に使用することで確保されています。ただし、この機能はオプションであり、Muesli で作成されたプログラムは、ソースコードを変更することなく、シングルコアのマルチノードクラスターコンピューターでコンパイルおよび実行されます。つまり、下位互換性が保証されます。これは、非常に薄い OpenMP 抽象化レイヤーを提供することで確保され、プログラムをコンパイルするときに OpenMP コンパイラフラグを指定/省略するだけで、マルチコアアーキテクチャのサポートをオン/オフに切り替えることができます。これにより、実行時にオーバーヘッドがほとんど発生しません。
P3L、SkIE、SKElib
P3L [64] (Pisa 並列プログラミング言語) はスケルトンベースの調整言語です。P3LはC コードの並列または順次実行を調整するために使用されるスケルトン構造を提供します。この言語には Anacleto [65]というコンパイラが用意されています。Anacleto は実装テンプレートを使用して P3L コードをターゲット アーキテクチャにコンパイルします。したがって、スケルトンは、それぞれ異なるアーキテクチャに最適化された複数のテンプレートを持つことができます。テンプレートは特定のアーキテクチャでスケルトンを実装し、パフォーマンス モデルを含むパラメトリック プロセス グラフを提供します。パフォーマンス モデルは、パフォーマンスの最適化につながるプログラム変換を決定するために使用できます。[66]
P3Lモジュールは、入力ストリームと出力ストリーム、および他のサブモジュールまたはシーケンシャルCコードを含む適切に定義されたスケルトン構造に対応します。モジュールは2層モデルを使用してネストすることができ、外側のレベルはタスク並列スケルトンで構成され、内側のレベルではデータ並列スケルトンを使用できます[64]。プログラマが入力ストリームと出力ストリームの型を明示的に指定し、サブモジュール間のデータフローを指定することによって、データフローレベルで型検証が実行されます。
SkIE [67] (スケルトンベースの統合環境)はP3Lと非常によく似ており、コーディネーション言語に基づいていますが、デバッグツール、パフォーマンス分析、視覚化、グラフィカルユーザーインターフェイスなどの高度な機能を提供します。コーディネーション言語を直接使用する代わりに、プログラマーはグラフィカルツールを操作して、スケルトンに基づく並列モジュールを構成できます。
SKELib [68]は、テンプレートシステムなどを継承することで、P3LとSkIEの貢献を基に構築されています。調整言語が使用されなくなり、代わりにP3Lで達成されたものと同様のパフォーマンスを備えたスケルトンがCのライブラリとして提供される点で、これら2つと異なります。別のCのようなスケルトンフレームワークであるSkilとは異なり、 SKELibでは型の安全性は考慮されていません。
PASとEPAS
PAS(Parallel Architectural Skeletons)は、C++とMPIで開発されたスケルトンプログラミングのフレームワークです。[69] [70]プログラマーはC++の拡張機能を使用してスケルトンアプリケーションを記述します1。その後、コードはPerlスクリプトに渡され、純粋なC++に拡張され、継承によってスケルトンが特殊化されます。
PASでは、すべてのスケルトンに、プログラマーが提供する必要があり、スケルトンの実行を調整する役割を担う代表 (Rep) オブジェクトがあります。スケルトンは、Rep オブジェクトを介して階層的にネストできます。スケルトンの実行に加えて、Rep は、上位レベルのスケルトンからのデータの受信と、サブスケルトンへのデータの送信も明示的に管理します。親スケルトンとサブスケルトン間のデータの送受信には、パラメーター化された通信/同期プロトコルが使用されます。
PASの拡張版であるSuperPas [71]、後にEPAS [72]として知られたものは、スケルトンの拡張性に関する懸念に対処しています。EPASツールを使用すると、 PASに新しいスケルトンを追加できます。スケルトン記述言語(SDL )は、仮想プロセッサグリッドに関するトポロジを指定することにより、スケルトンパターンを記述するために使用されます。その後、SDLはネイティブC++コードにコンパイルされ、他のスケルトンと同様に使用できます。
スバスコ
SBASCO ( Skeleton-BAsed Scientific COmponents ) は、並列および分散数値アプリケーションの効率的な開発を目的としたプログラミング環境です。[73] SBASCOは、スケルトンとコンポーネントという2つのプログラミングモデルをカスタム構成言語に統合することを目的としています。コンポーネントのアプリケーションビューは、そのインターフェイス (入力と出力のタイプ) の説明を提供します。一方、構成ビューは、さらにコンポーネントの内部構造とプロセッサレイアウトの説明を提供します。コンポーネントの内部構造は、ファーム、パイプ、マルチブロックの3つのスケルトンを使用して定義できます。
SBASCO は、マルチブロック スケルトンを通じてドメイン分解可能なアプリケーションに対応しています。ドメインは配列 (主に 2 次元) で指定され、重複する境界を持つサブ配列に分解されます。その後、計算は反復 BSP のような方法で行われます。最初のステージはローカル計算で構成され、2 番目のステージは境界交換を実行します。反応拡散問題の使用例が示されています。[74]
2種類のコンポーネントが紹介されています。[75]機能コードを提供する科学的コンポーネント (SC) と、通信、分散プロセッサレイアウト、レプリケーションなどの非機能的な動作をカプセル化する通信アスペクトコンポーネント (CAC) です。たとえば、SCコンポーネントはCACコンポーネントに接続され、CACコンポーネントは、SCに割り当てられたプロセッサを動的に再マッピングすることで、実行時にマネージャとして機能します。CACコンポーネントを使用するとパフォーマンスが向上することを示すユースケースが示されています。[76]
SCL
構造化コーディネーション言語( SCL ) [77]は、最も初期のスケルトンプログラミング言語の 1 つでした。ソフトウェアコンポーネントのスケルトンプログラミングにコーディネーション言語アプローチを提供します。 SCL は基本言語と見なされ、シーケンシャルソフトウェアコンポーネントの開発に使用される Fortran や C などのホスト言語と統合されるように設計されています。SCLでは、スケルトンは構成、基本、計算の3 つのタイプに分類されます。構成スケルトンは、分散配列 (ParArray) などの一般的に使用されるデータ構造のパターンを抽象化します。基本スケルトンは、map、scan、fold などのデータ並列スケルトンに対応します。計算スケルトンは制御フローを抽象化し、主に farm、SPMD、iterateUntil などのタスク並列スケルトンに対応します。コーディネーション言語アプローチは、従来の並列マシンだけでなく、各処理ノードに異なる複数のコアを持つ並列異種マシンをプログラミングするためのパフォーマンスモデルと組み合わせて使用されました。[78]
スケPU
SkePU [79] SkePUは、マルチコアCPUおよびマルチGPUシステム用のスケルトンプログラミングフレームワークです。これは、6つのデータ並列スケルトンと1つのタスク並列スケルトン、2つのコンテナタイプ、およびCUDAとOpenCLの両方を使用したマルチGPUシステムでの実行をサポートするC++テンプレートライブラリです。最近、StarPUランタイムシステムのバックエンドを実装することにより、SkePUでハイブリッド実行、パフォーマンスを考慮した動的スケジューリング、および負荷分散のサポートが開発されました。SkePUはGPUクラスター用に拡張されています。
スキッパー&クアフ
SKiPPERはビジョンアプリケーション用のドメイン固有のスケルトンライブラリ[80]であり、CAMLでスケルトンを提供するため、型の安全性はCAMLに依存しています。スケルトンは、宣言型と操作型の2つの方法で提供されます。宣言型スケルトンはプログラマが直接使用しますが、操作型バージョンはアーキテクチャ固有のターゲット実装を提供します。ランタイム環境、CAMLスケルトン仕様、およびアプリケーション固有の関数(プログラマがCで提供)から、新しいCコードが生成され、コンパイルされて、ターゲットアーキテクチャでアプリケーションが実行されます。SKiPPERの興味深い点の1つは、スケルトンプログラムをデバッグのために連続的に実行できることです。
SKiPPERでは、操作スケルトンを記述するためのさまざまなアプローチが検討されています。静的データフローグラフ、パラメトリックプロセスネットワーク、階層型タスクグラフ、タグ付きトークンデータフローグラフなどです。[81]
QUAFF [82]は、C++ と MPI で書かれた比較的新しいスケルトン ライブラリです。QUAFF は、テンプレート ベースのメタプログラミング手法を利用して、実行時のオーバーヘッドを削減し、コンパイル時にスケルトンの拡張と最適化を実行します。スケルトンはネストでき、シーケンシャル関数はステートフルです。型チェックに加えて、QUAFF は C++ テンプレートを利用して、コンパイル時に新しい C/MPI コードを生成します。QUAFF は CSP モデルに基づいており、スケルトン プログラムはプロセス ネットワークと生成ルール (single、serial、par、join) として記述されます。[83]
スケト
SkeTo [84]プロジェクトは、MPI を使用して並列化を実現する C++ ライブラリです。SkeTo は、ネスト可能な並列パターンを提供する代わりに、リスト、ツリー、[85] [86]、行列[ 87 ]などの並列データ構造の並列スケルトンを提供する点で、他のスケルトン ライブラリとは異なります。データ構造はテンプレートを使用して型指定され、いくつかの並列操作を呼び出すことができます。たとえば、リスト構造は、map、reduce、scan、zip、shift などの並列操作を提供します。
SkeToに関する追加の研究は、変換による最適化戦略、および最近ではドメイン固有の最適化にも焦点を当てています。[88]たとえば、SkeToは、2つの連続した関数呼び出しを1つにマージする融合変換[89]を提供し、関数呼び出しのオーバーヘッドを減らし、関数間で渡される中間データ構造の作成を回避します。
スキル
Skil [90]はスケルトンプログラミングのための命令型言語である。スケルトンは言語の直接的な一部ではないが、言語とともに実装される。Skilは、高階関数、カリング、多態型などの関数型言語のような機能を提供するC言語のサブセットを使用する。Skilをコンパイルすると、そのような機能は削除され、通常のCコードが生成されます。したがって、Skilは多態的な高階関数を単態的な一階C関数に変換します。Skilはスケルトンのネスト可能な構成をサポートしていません。データ並列性は、たとえば利用可能なプロセッサ間で配列を分散するなど、特定のデータ並列構造を使用して実現されます。フィルタースケルトンを使用できます。
STAPL スケルトン フレームワーク
STAPLスケルトンフレームワーク [91] [92]では、スケルトンはパラメトリックデータフローグラフとして定義されており、100,000コアを超えて拡張できます。さらに、このフレームワークは、ポートの概念を通じて、対応するデータフローグラフのポイントツーポイント構成としてスケルトンの構成に対処し、新しいスケルトンをフレームワークに簡単に追加できるようにします。その結果、このフレームワークでは、構成されたスケルトンの再実装とグローバル同期の必要性がなくなります。STAPLスケルトンフレームワークはネストされた構成をサポートし、ネストの各レベルで並列実行と順次実行を切り替えることができます。このフレームワークは、STAPL並列コンテナ[93]のスケーラブルな実装の恩恵を受けており、ベクター、多次元配列、リストなどのさまざまなコンテナでスケルトンを実行できます。
T4P
T4Pはスケルトンプログラミングのために最初に導入されたシステムの1つでした。[94]このシステムは関数型プログラミングの特性に大きく依存しており、高階関数として5つのスケルトンが定義されていました。分割統治、ファーム、マップ、パイプ、RaMPです。プログラムは複数の実装を持つことができ、それぞれが異なるスケルトンの組み合わせを使用します。さらに、各スケルトンは異なる並列実装を持つことができます。スケルトンのパフォーマンスモデルによって導かれる関数型プログラム変換に基づく方法論は、プログラムに使用する最も適切なスケルトンとスケルトンの最も適切な実装を選択するために使用されました。[95]
フレームワークの比較
- 活動年数は、既知の活動年数です。この列に表示されている日付は、科学雑誌または会議議事録における関連記事の最初と最後の出版日に対応しています。プロジェクトは活動期間を超えてもまだアクティブである場合があり、指定された日付を超える出版物は見つからないことに注意してください。
- プログラミング言語は、プログラマーがスケルトン アプリケーションをコーディングするために使用するインターフェイスです。これらの言語は多様で、関数型言語、コーディネーション言語、マークアップ言語、命令型言語、オブジェクト指向言語、さらにはグラフィカル ユーザー インターフェイスなどのパラダイムを網羅しています。プログラミング言語内では、スケルトンは言語構成要素またはライブラリとして提供されています。スケルトンを言語構成要素として提供するには、カスタム ドメイン固有言語とそのコンパイラーの開発が必要です。これは、スケルトン研究の初期に明らかに強い傾向でした。最近の傾向は、特に C++ や Java などのオブジェクト指向言語で、スケルトンをライブラリとして提供することです。
- 実行言語は、スケルトン アプリケーションを実行またはコンパイルする言語です。プログラミング言語 (特に関数型の場合) はスケルトン プログラムを実行するには効率が不十分であることが、かなり早い段階で認識されました。そのため、スケルトン プログラミング言語は、スケルトン アプリケーションを他の言語で実行することで簡素化されました。スケルトン アプリケーション (プログラミング言語で定義) をターゲット実行言語の同等のアプリケーションに変換するための変換プロセスが導入されました。コード生成や、実行言語のライブラリと対話できる低レベル スケルトン (オペレーショナル スケルトンと呼ばれることもある) のインスタンス化など、さまざまな変換プロセスが導入されました。変換されたアプリケーションでは、パフォーマンスに合わせてカスタマイズされたターゲット アーキテクチャ コードを、変換されたアプリケーションに導入する機会も得られました。表 1 は、実行言語として好まれてきたのは C 言語であることを示しています。
- ディストリビューション ライブラリは、並列/分散コンピューティングを実現する機能を提供します。この意味では、MPI が大きな人気を博してきました。これは、C 言語とうまく統合され、おそらくクラスター コンピューティングにおける並列処理に最もよく使用されるツールであるため、驚くことではありません。ディストリビューション ライブラリを使用して直接プログラミングすることの危険性は、ディストリビューション ライブラリをまったく使用しないプログラマーからは安全に隠されています。最近の傾向は、複数のディストリビューション ライブラリと対話できるスケルトン フレームワークを開発することです。たとえば、CO2 P3 S はスレッド、RMI、またはソケットを使用できます。Mallba は Netstream または MPI を使用できます。また、JaSkel は AspectJ を使用して、異なるスケルトン フレームワークでスケルトン アプリケーションを実行します。
- 型安全性とは、スケルトン プログラムで型の非互換性エラーを検出する機能を指します。最初のスケルトン フレームワークは Haskell などの関数型言語上に構築されていたため、型安全性はホスト言語から単純に継承されていました。しかし、スケルトン プログラミング用にカスタム言語が開発されると、コンパイラは型チェックを考慮して記述する必要がありました。これは、スケルトンのネストが完全にサポートされていなかったため、それほど難しくありませんでした。しかし、最近、完全なネストを備えたオブジェクト指向言語でスケルトン フレームワークをホストし始めたため、型安全性の問題が再浮上しました。残念ながら、型チェックはほとんど見過ごされてきました (QUAFF を除く)。特に Java ベースのスケルトン フレームワークではそうです。
- スケルトン ネスティングは、スケルトン パターンを階層的に構成する機能です。スケルトン ネスティングは、より単純なパターンの基本セットから始めて、より複雑なパターンを構成できるため、当初からスケルトン プログラミングの重要な機能として認識されていました。しかし、主にスケジュールと型検証の難しさのため、コミュニティがスケルトンの任意のネスティングを完全にサポートするまでには長い時間がかかりました。最近のスケルトン フレームワークはスケルトンの完全なネスティングをサポートする傾向は明らかです。
- ファイル アクセスとは、アプリケーションからファイルにアクセスして操作する機能です。これまで、スケルトン プログラミングは、少量のデータに長い計算時間を要する計算集約型アプリケーションで主に役立ってきました。しかし、多くの分散アプリケーションでは、計算中に大量のデータが必要になったり、大量のデータが生成されたりします。これは、天体物理学、素粒子物理学、バイオインフォマティクスなどに当てはまります。したがって、スケルトン プログラミングと統合するファイル転送サポートを提供することは、これまでほとんど見過ごされてきた重要な問題です。
- スケルトン セットは、サポートされているスケルトン パターンのリストです。スケルトン セットはフレームワークごとに大きく異なります。さらに驚くべきことに、同じ名前のスケルトンでもフレームワークによってセマンティクスが異なる場合があります。文献で最も一般的なスケルトン パターンは、おそらくファーム、パイプ、マップです。
参照
参考文献
- ^ K. Hammond および G. Michelson 編、「並列関数型プログラミングの研究方向」 Springer-Verlag、ロンドン、英国、1999 年。
- ^ Vanneschi, M. (2002). 「並列および分散ポータブルアプリケーション環境である ASSIST のプログラミングモデル」. Parallel Computing . 28 (12): 1709–1732. CiteSeerX 10.1.1.59.5543 . doi :10.1016/S0167-8191(02)00188-6.
- ^ M. Aldinucci、M. Coppola、M. Danelutto、N. Tonellotto、M. Vanneschi、C. Zoccolo。「ASSIST を使用した高レベル グリッド プログラミング」科学技術計算方法、12(1):21–32、2006 年。
- ^ M. Aldinucci および M. Torquati。アドホック分散スケーラブル オブジェクト リポジトリによる Apache ファームの高速化。Proc. of 10th Intl. Euro-Par 2004 Parallel Processing、LNCS の第 3149 巻、596 ~ 605 ページ。Springer、2004 年。
- ^ Aldinucci, M.; Danelutto, M.; Antoniu, G.; Jan, M. (2008). 「高レベルグリッドのフォールトトレラントなデータ共有: 階層型ストレージアーキテクチャ」.ヨーロッパのグリッドシステム研究の成果. p. 67. doi :10.1007/978-0-387-72812-4_6. ISBN 978-0-387-72811-7。
- ^ 「S. MacDonald、J. Anvik、S. Bromling、J. Schaeffer、D. Szafron、K. Tan。パターンからフレームワーク、並列プログラムへ。」Parallel Comput.、28(12):1663–1683、2002年。
- ^ K. Tan、D. Szafron、J. Schaeffer、J. Anvik、および S. MacDonald。「ジェネレーティブ デザイン パターンを使用した分散メモリ環境用の並列コードの生成」。PPoPP '03: 並列プログラミングの原理と実践に関する第 9 回 ACM SIGPLAN シンポジウムの議事録、203 ~ 215 ページ、ニューヨーク、ニューヨーク、米国、2003 年。ACM。
- ^ D. Caromel および M. Leyton。「アルゴリズム スケルトンの微調整」。第 13 回国際 Euro-Par 会議: 並列処理、Lecture Notes in Computer Science の第 4641 巻、72 ~ 81 ページ。Springer-Verlag、2007 年。
- ^ D. Caromel、L. Henrio、および M. Leyton。「型安全なアルゴリズム スケルトン」。第 16 回 Euromicro 並列、分散、およびネットワーク ベース処理に関する会議の議事録、45 ~ 53 ページ、トゥールーズ、フランス、2008 年 2 月。IEEE CS プレス。
- ^ D. Caromel および M. Leyton。「アルゴリズム スケルトンの透過的で非侵入的なファイル データ モデル」。第 22 回国際並列分散処理シンポジウム (IPDPS)、1 ~ 8 ページ、米国マイアミ、2008 年 3 月。IEEE コンピューター協会。
- ^ Mario Leyton、Jose M. Piquer。「Skandium: アルゴリズム スケルトンを使用したマルチコア プログラミング」、IEEE Euro-micro PDP 2010。
- ^ リタ・ローゲン、ヨランダ・オルテガ=マレン、リカルド・ペーニャ=マリ。「エデンの並列関数プログラミング」、Journal of Functional Programming、No. 15(2005)、3、431 ~ 475 ページ
- ^ マレー・コール。「クローゼットからスケルトンを連れ出す:スケルトン並列プログラミングの実用的な宣言」並列コンピューティング、30(3):389–406、2004年。
- ^ A. Benoit、M. Cole、S. Gilmore、J. Hillston。「eskel を使用した柔軟なスケルタル プログラミング」。JC Cunha および PD Medeiros 編、Euro-Par、Lecture Notes in Computer Science の第 3648 巻、761 ~ 770 ページ。Springer、2005 年。
- ^ A. Benoit および M. Cole。「スケルトン並列プログラミングにおける 2 つの基本概念」。V. Sunderam、D. van Albada、P. Sloot、および J. Dongarra 編、『国際計算科学会議 (ICCS 2005)』第 2 部、LNCS 3515、764 ~ 771 ページ。Springer Verlag、2005 年。
- ^ A. Benoit、M. Cole、S. Gilmore、J. Hillston。スケルトンベースの高レベル並列プログラムのパフォーマンス評価。M. Bubak、D. van Albada、P. Sloot、J. Dongarra 編、国際計算科学会議 (ICCS 2004)、パート III、LNCS 3038、289 ~ 296 ページ。Springer Verlag、2004 年。
- ^ A. Benoit、M. Cole、S. Gilmore、J. Hillston。「スケルトンとプロセス代数によるパイプライン構造の並列プログラムのパフォーマンス評価」スケーラブルコンピューティング:実践と経験、6(4):1–16、2005年12月。
- ^ A. Benoit、M. Cole、S. Gilmore、J. Hillston。「pepa と nws を使用したスケルトンベースのグリッド アプリケーションのスケジュール設定」。The Computer Journal、グリッド パフォーマビリティのモデリングと測定に関する特別号、48(3):369–378、2005 年。
- ^ A. Benoit および Y. Robert。「パイプライン スケルトンの異種プラットフォームへのマッピング」ICCS 2007、第 7 回国際計算科学会議、LNCS 4487、591 ~ 598 ページ。Springer Verlag、2007 年。
- ^ G. Yaikhom、M. Cole、S. Gilmore、J. Hillston。「スケルトンを使用したシステムのパフォーマンスをモデル化する構造的アプローチ」Electr. Notes Theor. Comput. Sci.、190(3):167–183、2007年。
- ^ H. Gonzalez-Velez および M. Cole。「異機種分散環境向けの完全に適応可能なパイプライン並列処理に向けて」並列および分散処理とアプリケーション、第 4 回国際シンポジウム (ISPA)、コンピュータ サイエンスの講義ノート、916 ~ 926 ページ。Springer-Verlag、2006 年。
- ^ H. Gonzalez-Velez および M. Cole。「計算グリッド向けの適応型構造化並列処理」。PPoPP '07: 並列プログラミングの原理と実践に関する第 12 回 ACM SIGPLAN シンポジウムの議事録、140 ~ 141 ページ、ニューヨーク、ニューヨーク、米国、2007 年。ACM。
- ^ Aldinucci, M.; Campa, S.; Danelutto, M.; Kilpatrick, P.; Torquati, M. (2013). 「FastFlow での分散システムのターゲット設定」(PDF) . Euro-Par 2012: 並列処理ワークショップ. Euro-Par 2012: 並列処理ワークショップ. コンピュータサイエンスの講義ノート. Vol. 7640. pp. 47–56. doi : 10.1007/978-3-642-36949-0_7 . ISBN 978-3-642-36948-3。
- ^ Aldinucci, M.; Spampinato, C.; Drocco, M.; Torquati, M.; Palazzo, S. (2012). 「ソルトアンドペッパー画像ノイズ除去のための並列エッジ保存アルゴリズム」。2012 3rd International Conference on Image Processing Theory, Tools and Applications (IPTA) . 3rd International Conference on Image Processing Theory, Tools and Applications (IPTA) . pp. 97–104. doi :10.1109/IPTA.2012.6469567. hdl : 2318/154520 .
- ^ Aldinucci, M.; Danelutto, M.; Kilpatrick, P.; Meneghin, M.; Torquati, M. (2012). 「マルチコアシステム向けの効率的な無制限ロックフリーキュー」。Euro -Par 2012 Parallel Processing。Euro -Par 2012 Parallel Processing。コンピュータサイエンスの講義ノート。第 7484 巻。pp. 662–673。doi : 10.1007 / 978-3-642-32820-6_65。hdl : 2318 / 121343。ISBN 978-3-642-32819-0。
- ^ Aldinucci, M.; Meneghin, M.; Torquati, M. (2010). 「高速 フローを備えたマルチコアでの効率的な Smith-Waterman 」。2010第 18 回Euromicro並列、分散、およびネットワークベースの処理に関する会議。IEEE。p . 195。CiteSeerX 10.1.1.163.9092。doi :10.1109/ PDP.2010.93。ISBN 978-1-4244-5672-7. S2CID 1925361。
- ^ CA Herrmann および C. Lengauer。「HDC: 分割統治のための高階言語」Parallel Processing Letters、10(2–3):239–250、2000 年。
- ^ CA Herrmann。分割統治再帰のスケルトンベースの並列化。博士論文、2000 年。ISBN 3-89722-556-5。
- ^ J. Dünnweber、S. Gorlatch。「グリッドプログラミングのための高階コンポーネント。グリッドをより使いやすくする。」Springer-Verlag、2009年。ISBN 978-3-642-00840-5
- ^ JF Ferreira、JL Sobral、AJ Proenca。「Jaskel: 構造化クラスターおよびグリッド コンピューティング用の Java スケルトン ベースのフレームワーク」。CCGRID '06: Proceedings of the Sixth IEEE International Symposium on Cluster Computing and the Grid、301 ~ 304 ページ、ワシントン DC、米国、2006 年。IEEE Computer Society。
- ^ J. Sobral および A. Proenca。「クラスターおよび計算グリッド用の Jaskel スケルトンの有効化」IEEE Cluster。IEEE Press、2007 年 9 月。
- ^ M. Aldinucci および M. Danelutto。「ストリーム並列スケルトン最適化」。PDCS 会議録: 並列および分散コンピューティングおよびシステムに関する国際会議、955 ~ 962 ページ、マサチューセッツ州ケンブリッジ、米国、1999 年 11 月。IASTED、ACTA プレス。
- ^ Aldinucci, M.; Danelutto, M.; Teti, P. (2003). 「Java で構造化並列プログラミングをサポートする高度な環境」. Future Generation Computer Systems . 19 (5): 611. CiteSeerX 10.1.1.59.3748 . doi :10.1016/S0167-739X(02)00172-3.
- ^ M. Danelutto および P. Teti。「Lithium: Java での構造化並列プログラミング環境」。ICCS: 国際計算科学会議の議事録、LNCS の第 2330 巻、844 ~ 853 ページ。Springer Verlag、2002 年 4 月。
- ^ M. Aldinucci および M. Danelutto。「スケルトンの操作的セマンティクス」GR Joubert、WE Nagel、FJ Peters、および WV Walter 編、『Parallel Computing: Software Technology, Algorithms, Architectures and Applications』、PARCO 2003、Advances in Parallel Computing の第 13 巻、63 ~ 70 ページ、ドレスデン、ドイツ、2004 年。Elsevier。
- ^ Aldinucci, M.; Danelutto, M. (2007). 「スケルトンベースの並列プログラミング: 機能的かつ並列的なセマンティクスを一発で実現☆」.コンピュータ言語、システム、構造. 33 (3–4): 179. CiteSeerX 10.1.1.164.368 . doi :10.1016/j.cl.2006.07.004.
- ^ M. Aldinucci、M. Danelutto、および J. Dünnweber。「グリッド環境で並列スケルトンを実装するための最適化手法」。S. Gorlatch 編、CMPP 議事録: 並列プログラミングの構成的手法に関する国際ワークショップ、35 ~ 47 ページ、英国スコットランド スターリング、2004 年 7 月。ドイツ、ミュンスター大学。
- ^ M. Danelutto . ワークステーションクラスタ上のスケルトンの効率的なサポート。Parallel Processing Letters、11(1):41–56、2001。
- ^ M. Danelutto. 「スケルトンの動的ランタイム サポート」 技術レポート、1999 年。
- ^ M. Danelutto.「アプリケーション マネージャによる並列プログラミングの QoS」。PDP '05: Proceedings of the 13th Euromicro Conference on Parallel, Distributed and Network-Based Processing (PDP'05)、282 ~ 289 ページ、ワシントン DC、米国、2005 年。IEEE Computer Society。
- ^ M. Aldinucci および M. Danelutto。「スケルトン システムにおけるセキュリティのコスト」。P. D'Ambra および MR Guarracino 編、Proc. of Intl. Euromicro PDP 2007: Parallel Distributed and network-based Processing、213 ~ 220 ページ、ナポリ、イタリア、2007 年 2 月。IEEE。
- ^ M. Aldinucci および M. Danelutto。「パフォーマンスの低下を抑えたスケルトン システムのセキュリティ保護: Muskel の経験」Journal of Systems Architecture、2008 年。
- ^ M. ダネルットと P. ダッツィ。「ストリーム並列計算をサポートする Java/Jini フレームワーク。」 Proc.国際のPARCO 2005: パラレル コンピューティング、2005 年 9 月。
- ^ M. Danelutto および P. Dazzi。「データフローによる構造化/非構造化並列処理の共同活用」。V. Alexandrov、D. van Albada、P. Sloot、および J. Dongarra 編、Proc. of ICCS: International Conference on Computational Science、Workshop on Practical Aspects of High-level Parallel Programming、LNCS、Reading、UK、2006 年 5 月。Springer Verlag。
- ^ M. Aldinucci、M. Danelutto、P. Dazzi。「Muskel: 拡張可能なスケルトン環境」スケーラブルコンピューティング: 実践と経験、8(4):325–341、2007 年 12 月。
- ^ E. アルバ、F. アルメイダ、MJ ブレサ、J. カベサ、C. コッタ、M. ディアス、I. ドルタ、J. ガバロ、C. レオン、J. ルナ、LM モレノ、C. パブロス、J. プティ、A. ロハス、F. シャファ。「Mallba: 組み合わせ最適化のためのスケルトンのライブラリ (研究ノート)」 Euro-Par '02: Proceedings of the 8th International Euro-Par Conference on Parallel Processing、927 ~ 932 ページ、ロンドン、イギリス、2002 年。Springer-Verlag。
- ^ E. アルバ、F. アルメイダ、M. ブレサ、C. コッタ、M. ディアス、I. ドルタ、J. ガバロ、C. レオン、G. ルケ、J. プティ、C. ロドリゲス、A. ロハス、 F. ザファ。最適化のための効率的な並列 lan/wan アルゴリズム: mallba プロジェクト。並列コンピューティング、32(5):415–440、2006。
- ^ E. Alba、G. Luque、J. Garcia-Nieto、G. Ordonez、および G. Leguizamon。「Mallba 効率的な最適化アルゴリズムを設計するためのソフトウェア ライブラリ。」International Journal of Innovative Computing and Applications、1(1):74–85、2007 年。
- ^ 「Ricardo Marques、Hervé Paulino、Fernando Alexandre、Pedro D. Medeiros」 「GPU 計算のオーケストレーションのためのアルゴリズム スケルトン フレームワーク」 Euro-Par 2013: 874–885
- ^ 「Fernando Alexandre、Ricardo Marques、Hervé Paulino」 「マルチ GPU コンピューティングのためのタスク並列アルゴリズム スケルトンのサポートについて」 ACM SAC 2014: 880–885
- ^ H. Kuchen および J. Striegnitz。「C++ スケルトン ライブラリのための関数型プログラミングの機能」。並行性 - 実践と経験、17(7–8):739–756、2005 年。
- ^ Philipp Ciechanowicz、Michael Poldner、Herbert Kuchen。「ミュンスター スケルトン ライブラリ ミューズリー – 包括的な概要」ERCIS ワーキング ペーパー No. 7、2009 年
- ^ H. KuchenとM. Cole。「タスクとデータの並列スケルトンの統合。」Parallel Processing Letters、12(2):141–155、2002年。
- ^ A. Alexandrescu.「Modern C++ Design: Generic Programming and Design Patterns Applied」Addison-Wesley、2001 年。
- ^ Michael Poldner。「タスク並列アルゴリズム スケルトン」。博士論文、ミュンスター大学、2008 年。
- ^ Michael Poldner および Herbert Kuchen。「分岐限定法のアルゴリズム スケルトン」。第 1 回国際ソフトウェアおよびデータ技術会議 (ICSOFT) の議事録、1:291–300、2006 年。
- ^ Michael Poldner および Herbert Kuchen。「分割統治法のためのスケルタル ストリーム処理の最適化」第 3 回国際ソフトウェアおよびデータ技術会議 (ICSOFT) の議事録、181 ~ 189、2008 年。
- ^ Michael Poldner および Herbert Kuchen。「分割統治のためのスケルトン」。IASTED 国際並列分散コンピューティングおよびネットワーク会議 (PDCN) の議事録、181–188、2008 年。
- ^ Michael Poldner および Herbert Kuchen。「スケーラブル ファーム」。国際並列処理会議 (ParCo) の議事録 33:795–802、2006 年。
- ^ Michael Poldner と Herbert Kuchen。「ファームスケルトンの実装について」Parallel Processing Letters、18(1):117–131、2008 年。
- ^ Philipp Ciechanowicz.「一般的なスパース行列のアルゴリズム スケルトン」。第 20 回 IASTED 国際並列分散コンピューティングおよびシステム会議 (PDCS) の議事録、188–197、2008 年。
- ^ Philipp Ciechanowicz、Philipp Kegel、Maraike Schellmann、Sergei Gorlatch、Herbert Kuchen。「マルチコア クラスターでの LM OSEM 画像再構成の並列化」並列コンピューティング: マルチコアと GPU からペタスケールまで、19: 169–176、2010 年。
- ^ Philipp Ciechanowicz および Herbert Kuchen。「マルチコア コンピュータ アーキテクチャ向けの Muesli のデータ並列スケルトンの強化」。高性能コンピューティングおよび通信に関する国際会議 (HPCC)、108–113、2010 年。
- ^ Bacci, B.; Danelutto, M.; Orlando, S.; Pelagatti , S.; Vanneschi, M. (1995). 「P3L: 構造化された高水準並列言語とその構造化されたサポート」。同時実行性: 実践と経験。7 (3): 225。CiteSeerX 10.1.1.215.6425。doi :10.1002/cpe.4330070305 。
- ^ S. Ciarpaglini、M. Danelutto、L. Folchi、C. Manconi、および S. Pelagatti。「ANACLETO: テンプレートベースの p3l コンパイラ」。第 7 回並列コンピューティング ワークショップ (PCW '97) の議事録、オーストラリア国立大学、キャンベラ、1997 年 8 月。
- ^ M. Aldinucci、M. Coppola、および M. Danelutto。スケルトン プログラムの書き換え: データ並列とストリーム並列のトレードオフを評価する方法。S. Gorlatch 編、Proc of CMPP: Intl. Workshop on Constructive Methods for Parallel Programming、44 ~ 58 ページ。Uni. Passau、ドイツ、1998 年 5 月。
- ^ B. Bacci、M. Danelutto、S. Pelagatti、および M. Vanneschi。「Skie: HPC アプリケーション向けの異機種環境」Parallel Comput.、25(13–14):1827–1852、1999 年。
- ^ M. Danelutto および M. Stigliani。「Skelib: C 言語のスケルトンを使用した並列プログラミング」。Euro-Par '00: Proceedings from the 6th International Euro-Par Conference on Parallel Processing、1175 ~ 1184 ページ、ロンドン、英国、2000 年。Springer-Verlag。
- ^ D. Goswami、A. Singh、BR Preiss。「デザインパターンから並列アーキテクチャスケルトンへ。」J. Parallel Distrib. Comput.、62(4):669–695、2002年。doi:10.1006/jpdc.2001.1809
- ^ D. Goswami、A. Singh、および BR Preiss。「並列アーキテクチャ スケルトンを実現するためのオブジェクト指向技術の使用」。ISCOPE '99: オブジェクト指向並列環境でのコンピューティングに関する第 3 回国際シンポジウムの議事録、コンピュータ サイエンスの講義ノート、130 ~ 141 ページ、ロンドン、英国、1999 年。Springer-Verlag。
- ^ MM Akon、D. Goswami、HF Li。「Superpas: 拡張性とスケルトン構成をサポートする並列アーキテクチャ スケルトン モデル」。並列および分散処理とアプリケーション第 2 回国際シンポジウム、ISPA、コンピュータ サイエンスの講義ノート、985 ~ 996 ページ。Springer-Verlag、2004 年。
- ^ MM Akon、A. Singh、D. Goswami、HF Li。「拡張可能な並列アーキテクチャ スケルトン」。High Performance Computing HiPC 2005、第 12 回国際会議、Lecture Notes in Computer Science の第 3769 巻、290 ~ 301 ページ、インド ゴア、2005 年 12 月。Springer-Verlag。
- ^ M. Diaz、B. Rubio、E. Soler、JM Troya。「SBASCO: スケルトンベースの科学コンポーネント」。PDP、318~ページ。IEEE Computer Society、2004 年。
- ^ M. Diaz、S. Romero、B. Rubio、E. Soler、および JM Troya。「SBASCO を使用した 2 次元不規則領域での反応拡散方程式の解決」国際計算科学会議 (ICCS) 所属の高レベル並列プログラミング (PAPP) の実際的側面、コンピュータ サイエンスの講義ノート第 3992 巻、912 ~ 919 ページ。Springer、2006 年。
- ^ M. Diaz、S. Romero、B. Rubio、E. Soler、および JM Troya。「科学的コンポーネント開発のためのアスペクト指向フレームワーク」。PDP '05: Proceedings of the 13th Euromicro Conference on Parallel, Distributed and Network-Based Processing、ページ 290 ~ 296、ワシントン DC、米国、2005 年。IEEE Computer Society。
- ^ M. Diaz、S. Romero、B. Rubio、E. Soler、JM Troya。「アスペクト指向プログラミングを使用した科学的コンポーネントの動的再構成: ケース スタディ」。R. Meersman および Z. Tari 編著、『On the Move to Meaningful Internet Systems 2006: CoopIS、DOA、GADA、および ODBASE』、Lecture Notes in Computer Science の第 4276 巻、1351 ~ 1360 ページ。Springer-Verlag、2006 年。
- ^ J. Darlington、Y. ke Guo、HW To、および J. Yang。「構造化合成のための並列スケルトン」。PPOPP '95: 並列プログラミングの原理と実践に関する第 5 回 ACM SIGPLAN シンポジウムの議事録、19 ~ 28 ページ、ニューヨーク、ニューヨーク州、米国、1995 年。ACM。
- ^ John Darlinton、Moustafa Ghanem、Yike Guo、Hing Wing To (1996)、「異機種並列コンピューティングにおけるガイド付きリソース編成」、Journal of High Performance Computing、4 (1): 13–23、CiteSeerX 10.1.1.37.4309
- ^ 「SkePU」.
- ^ J. Serot、D. Ginhac、J. Derutin。「SKiPPER: リアルタイム画像処理アプリケーション向けのスケルトンベースの並列プログラミング環境」。V. Malyshkin 編、第 5 回国際並列コンピューティング技術会議 (PaCT-99)、LNCS 巻 1662、296 ~ 305 ページ。Springer、1999 年 9 月 6 ~ 10 日。
- ^ J. Serot および D. Ginhac.「並列画像処理のスケルトン: SKiPPER プロジェクトの概要」。Parallel Computing、28(12):1785–1808、2002 年 12 月。
- ^ J. Falcou、J. Serot、T. Chateau、JT Lapreste。「Quaff: 並列スケルトンの効率的な C++ 設計」Parallel Computing、32(7):604–615、2006 年。
- ^ J. Falcou および J. Serot。「スケルトンベースの並列プログラミング ライブラリの実装に適用される形式セマンティクス」GR Joubert、C. Bischof、FJ Peters、T. Lippert、M. Bcker、P. Gibbon、および B. Mohr 編、『Parallel Computing: Architectures, Algorithms and Applications』(Proc. of PARCO 2007、Julich、ドイツ)、NIC の第 38 巻、243 ~ 252 ページ、ドイツ、2007 年 9 月。John von Neumann Institute for Computing。
- ^ K. Matsuzaki、H. Iwasaki、K. Emoto、および Z. Hu。「並列プログラミングのシーケンシャル スタイル用の構成的スケルトンのライブラリ」。InfoScale '06: Proceedings of the 1st international conference on Scalable information systems、ページ 13、ニューヨーク、ニューヨーク、米国、2006。ACM。
- ^ K. Matsuzaki、Z. Hu、M. Takeichi。「ツリースケルトンによる並列化」。Euro-Par、Lecture Notes in Computer Science の第 2790 巻、789 ~ 798 ページ。Springer、2003 年。
- ^ K. Matsuzaki、Z. Hu、M. Takeichi。「一般的なツリーを操作するための並列スケルトン」並列計算、32(7):590–603、2006年。
- ^ K. Emoto、Z. Hu、K. Kakehi、M. Takeichi。「2次元配列上で並列プログラムを開発するための合成フレームワーク」技術レポート、東京大学数理情報学部、2005年。
- ^ K. Emoto、K. Matsuzaki、Z. Hu、および M. Takeichi。「スケルトン プログラムに対するドメイン固有の最適化戦略」。Euro-Par、Lecture Notes in Computer Science の第 4641 巻、705 ~ 714 ページ。Springer、2007 年。
- ^ 松崎和也、筧和也、岩崎弘、胡Z、明石裕。「フュージョン埋め込みスケルトンライブラリ」 M. Danelutto、M. Vanneschi、および D. Laforenza の編集者、Euro-Par、第 3149 巻、コンピュータ サイエンスの講義ノート、644 ~ 653 ページ。スプリンガー、2004 年。
- ^ GH Botorog および H. Kuchen。「効率的な高レベル並列プログラミング」Theor. Comput. Sci.、196(1–2):71–107、1998 年。
- ^ ザンディファー、マニ; アブドゥルジャバー、ムスタファ; マジディ、アリレザ; キーズ、デイビッド; アマト、ナンシー; ラウシュヴェルガー、ローレンス (2015)。「高性能科学アプリケーションを表現するアルゴリズム スケルトンの作成」。第29 回 ACM 国際スーパーコンピューティング会議の議事録。pp. 415–424。doi : 10.1145 /2751205.2751241。ISBN 9781450335591. S2CID 13764901。
- ^ ザンディファー、マニ; トーマス、ネイサン; アマト、ナンシー M.; ラウシュヴェルガー、ローレンス (2014 年 9 月 15 日)。ブロードマン、ジェームズ; トゥ、ペン (編)。並列コンピューティングのための言語とコンパイラ。コンピュータサイエンスの講義ノート。シュプリンガー インターナショナル パブリッシング。pp. 176–190。doi :10.1007/978-3-319-17473-0_12。ISBN 9783319174723。
- ^ 「G. Tanase 他著」 「STAPL 並列コンテナ フレームワーク」 Proceeding PPoPP '11 Proceedings of the 16th ACM symposium on Principles and practice of parallel programming ページ 235–246
- ^ J. Darlington、AJ Field、PG Harrison、PHJ Kelly、DWN Sharp、および Q. Wu。「スケルトン関数を使用した並列プログラミング」PARLE '93: Proceedings of the 5th International PARLE Conference on Parallel Architectures and Languages Europe、146 ~ 160 ページ、ロンドン、英国、1993 年。Springer-Verlag。
- ^ J. Darlinton、M. Ghanem、HW To (1993)、「構造化並列プログラミング」、超並列コンピュータのプログラミングモデル。IEEE Computer Society Press。1993 : 160–169、CiteSeerX 10.1.1.37.4610
