図1は、リモートホスト26で動作する並列アプリケーション28を処理する従来技術の並列処理クラスター10を示すブロック図を示す。当業者が理解するように、クラスター10は例えばベーオウルフクラスターであり、これは、通信チャネル14及びスイッチ16を通して複数のプロセッサ12同士を相互に接続させて並列アプリケーション28を処理する。プロセッサ12の数Nは、クラスターのタイプに慎重に合わされ、例えばベーオウルフクラスターについては16個のプロセッサである。リモートホスト26は、並列アプリケーション28の実行時間を短縮することを目標として、データ経路18を介してクラスター10内のプロセッサ12の集団的計算力にアクセスして並列アプリケーション28を動作させる。
図2は、クラスター10を使用する並列処理アプリケーション28をいっそう詳しく示している。ノード15(1)、15(2)、15(3)・・・15(N)は、ノード15を通してのコンピュータプログラム、データ、及びプロセス間メッセージの移動を容易にする通信チャネル14を介して相互に接続する図1のプロセッサ12を表わす。当業者が理解するように、通信チャネル14は、例えば、コンピュータバス、ネットワークリンケージ、光ファイバーチャネル、イーサネット(登録商標)結線、スイッチメッシュ(例えば図1のスイッチ16)及び/又はトークンリングから成って良い。クラスター10は、クラスター10にインターフェースを提供するゲートウェイ24を更に有する。ゲートウェイ24は、クラスター境界36を通してリモートホスト26と通信するために、通常、ネットワークインターフェース30、インターネットインターフェース34、及び同列間インターフェース35などの1つ以上のインターフェースを提供する。
リモートホスト26は、例えば、並列アプリケーション28を動作させるコンピュータシステムである。実例として、図2は、ネットワークインターフェース30を通してゲートウェイノード24に接続されたアプリケーション28及びリモートホスト26を示している。動作時には、ゲートウェイ24は、ホスト26で動作する並列アプリケーション28とクラスター10内の個々の処理ノード15との間での通信を可能にする。アプリケーション28は、アルゴリズムコード及びデータの並列処理の前に該アルゴリズムコード及びデータを個々の処理ノード15にロードする。
アプリケーション28がアルゴリズムコード及びデータをノード15にロードする主な従来技術方法が2つある。もしクラスター10がカプセル化されたクラスターであれば、ゲートウェイ24のネットワークアドレスだけがアプリケーション28に知られ、アプリケーション28はゲートウェイ24と通信し、ゲートウェイ24は該アルゴリズムコード及びデータをノード15へ発送する。このアプローチでは内部のノード15はホスト26から隠されているが、アプリケーション28は、利用するノードの数とゲートウェイ24を通してのノード通信の取り扱いとを明示するために、依然としてノード15についての情報を持たなければならない。
カプセル化されていないクラスター10では、アプリケーション28は、クラスター10の組織及び構造に関する情報と、個々のノード15に直にアクセスするための知識とを有する。一例では、アプリケーション28は、各ノード15に別々に話し掛け、アルゴリズム及びデータを特定のノード15にロードするために遠隔手順呼び出し(RPC)を使用し、ノード15はそれぞれ別々にアプリケーション28に応答する。
遺憾ながら、これら従来技術手法のいずれも、クラスター10をアプリケーション28に対して単一のマシーンのようには動作させない。従って、アプリケーション28は、アルゴリズムコード及びデータを並列に適宜処理できるように、クラスター10の具体的な内部アーキテクチャー及びトポロジーに適合するように推測的に設計されなければならない。
図3はアルゴリズムコード及びデータがリモートホスト26及びクラスター10を通してどのように分割され処理されるかを概略的に示している。その様なアルゴリズムコード及びデータがアルゴリズムデザイン40として図3に論理的に示されている。初期化セクション42は、始めに、アルゴリズム実行の前に入力データを準備し、このことは通常はデータ構造を準備して該データ構造に入力データをロードすることを含む。処理結果セクション44は、アルゴリズム実行中に作られたデータを取り扱い、それは通常は情報の格納及び出力を含む。指定された並列セクション56は、並列特定データ項目48,50,及び52を含む。具体的には、並列データ項目48,50及び52は、クラスター10でいろいろなノード15で実行されることになるアルゴリズムコードの部分を表わす。図4は、1つの並列データ項目48を更に詳しく示しており、図3の並列データ項目50及び52も同様に構成される。処理結果セクション44は、並列データ項目48,50及び52の実行から出力されたデータを結合させて完全なデータセットを形成する。
各並列データ項目48,50及び52は、アルゴリズムコード及びデータとしてクラスター10に転送されて処理される。アルゴリズム実行との同期化は、並列アプリケーション28とクラスター10の個々のノード15との間でのプロセス間通信により達成される。並列処理ライブラリーは、このプロセス間通信を容易にするが、アルゴリズムデザイン40がアルゴリズムノード15のトポロジーに適合するように推測的にフォーマットされることを依然として必要とする。即ち、アプリケーション28がコンパイルされるときにクラスター10のトポロジーが知られていて且つ固定されなければならない。
矢58は、アルゴリズムデザイン40を、リモートホスト26での実行のために、並列アプリケーション28にコンパイルするステップを表わす。要素42,44,46,48,50,52及び56は、並列アプリケーション28においてコンパイルされた要素42’,44’,46’,48’,50’,52’及び56’として図解的に示されている。
並列アプリケーション28は、リモートホスト26により、次の順序で、即ち初期化セクション42’、並列データ初期化46’、コンパイルされた並列データ項目48’、コンパイルされた並列データ項目50’、コンパイルされた並列データ項目52’、及び処理結果セクション44’の順に、実行される。図3に示されている例では、コンパイルされた並列データ項目48’は、アルゴリズムコード及び入力データを、図4のアルゴリズム転送セクション70及びデータ入力セクション72をそれぞれ介してクラスター10内のノード15(2)に転送する。コンパイルされた並列データ項目48’は、データ処理が完了したときを判定するためにプロセス同期化74(図4)を用いて、そのアルゴリズムのノード15(2)での実行を制御する。ノード15(2)が並列データ項目48’の実行が完了したことを示したとき、データ出力転送セクション76(図4)は結果をノード15(2)から並列アプリケーション28へ転送し返す。
同様に、並列アプリケーション28の全てのアルゴリズムがクラスター10のノード15(2)、15(4)、15(5)によって同時に処理されるように、コンパイルされた並列データ項目50’及びコンパイルされた並列データ項目52’はノード15(4)及び15(5)をそれぞれ利用する。
並列アプリケーション28の処理結果セクション44’は、コンパイルされた並列データ項目48’、50’、及び52’がクラスター10によって処理されてそれぞれのデータ出力転送セクション76によって返されるときに動作する。この例では、クラスター10のノード15(2)、15(4)、15(5)によって返されるデータは、完成したデータセットの処理を続けるために処理結果セクション44’により結合される。
従来技術についての以上の記述から、高性能計算におけるアーキテクチャー設計の焦点が種々のハードウェア中心の解決策に集中していることは明らかであろう。このことは、並列処理の始めから、特に1970年代から、現実のことであった。更に、新しい並列処理システムについての現在の趨勢は、より低いコストでより高い性能を達成するために協力して動作する複数のプロセッサを使用する。従って、歴史的に、プロセッサ性能の改善、より高速のネットワーク、メモリー及びカーシング(chaching)技術の改善などのハードウェアの進歩はソフトウェアの進歩より遥かに先を行っている。
アムダールの法則(複数のプロセッサでの与えられたアプリケーションについての並列性能を予測する)が特別にハードウェアパラメータを扱わないにもかかわらず、これが従来技術の並列処理デザインの現実であった。アムダールの法則は次の方程式: スピードアップ=1/((1−f)+f/p)により表わされ、ここでfはアルゴリズムの中での並列活動のパーセントであり、pはプロセッサの個数に等しい。“スピードアップ”は、並列処理デザインにおける個々のリンクされているプロセッサの現在のプロセッサ速度のプロセッサ速度乗数、例えば1x、2xなど、を決定する。
アムダールの法則は、アルゴリズムレベルでの並列活動の程度と、計算に使われるプロセッサの数とだけを考慮する。(プロセッサの数に関して)アムダールの法則の限界を発見することは、並列処理効果が使用できなくなる前にどれほど僅かの連続的活動が存在しなければならないかというがっかりするような理解をもたらす標準的作業である。即ち、アムダールの法則のもとで“最大スピードアップ”は次の関係: limp⇒∞[1/((1−f)+f/p]=1/(1−f)により与えられ、ここで“最大スピードアップ”は、もし無限の数のプロセッサpがあれば個々のリンクされているプロセッサの現在のプロセッサ速度のプロセッサ速度乗数、例えば1x、2xなど、に等しく、fはアルゴリズム内での並列活動のパーセントである。下の表1は、fの与えられた値についての最大スピードアップを示す。
以下で更に詳しく記載するように、アムダールの法則の主要パラメータは“f”であるので、複数のプロセッサで高性能計算動作を生じさせる問題は、或る程度は(a)アルゴリズム中心の考え方から並列処理に接近することにより、且つ/又は交差通信の並列活動を増大させるハワードカスケード(HC)を利用することによって、克服され、その各々について以下で詳しく述べる。
(ハワードカスケードアーキテクチャーシステム)
ハワードカスケードアーキテクチャーシステム(“HCAS”)は、(1つ以上のプロセッサを各々包含する)ノードのクラスターがクラスター間ネットワークの外にある1つ以上のリモートホストコンピュータに対して単一のマシーンとして動作することを可能にするトポロジーを提供する。従来技術とは異なって、これは、(a)個々のクラスターノードとの直接通信無しで且つ/又は(b)クラスタートポロジーについての詳細な情報無しで各々のリモートホストがアルゴリズムコード及びデータを該クラスター内で伝達して並列処理することを可能にする。より具体的には、一実施形態では、HCASは次の特徴を用いてリモートホストのために単一マシーン経験をもたらす。
・リモートホストによりアクセスされる前にクラスターの各ノードに完全な数学的及び論理的アルゴリズムが格納される。
・数学的及び論理的アルゴリズムにより処理されるデータセットを変更することにより数学的及び論理的アルゴリズムが並列化されるが、該アルゴリズム自体には追加、変更又は削除は発生しない
・リモートホストは、ネットワークに取り付けられているゲートウェイプロセッサにだけアルゴリズム処理要求及びデータを送る。リモートホストは数学的及び論理的アルゴリズムをホームノードに伝えない。
・リモートホストは、該HCASのゲートウェイのIPアドレス及び単一のポートアイデンティティーのみを知っている。クラスター内の複数の処理ノードを使用するために複数のポート及び/又は複数のIPアドレスは不要である。
・リモートホストは、クラスターにより使用されるプロセッサの数と該クラスターにより使用される接続性モデルを含む該クラスターの内部パラメータについての情報を必要としない。
・ゲートウェイはカスケード内のホームノードと通信し、ホームノードは、接続されている処理ノードへの通信を容易にする。
図5は、アルゴリズム中心の並列処理を提供する1つのHCAS80を示す。HCAS80は、ゲートウェイ107と、ホームノード110と、図示のように3つの処理ノード88,90及び92とを有する。当業者は、3つのノード88,90,92が例示の目的で示されていて、もっと多数のノードをHCAS80に含ませても良いことを理解するはずである。処理ノード88,90,92(及びHCAS80の他の任意のノード)は、以下で詳しく説明するHCに編成されている。ゲートウェイ107は、リモートホスト82及びホームノード110と通信し、ホームノード110は、ノード88,90,92への通信及びこれらの処理ノード間での通信を容易にする。
各処理ノード88,90,92は、計算集中的なアルゴリズムを包含するアルゴリズムライブラリー99を有し、アルゴリズムライブラリー99は、好ましくは、グラフィックユーザインターフェース、アプリケーションソフトウェア、及び/又は計算非集中的な機能を含まない。リモートホスト82は、計算集中的アルゴリズムライブラリーAPI86を用いて作られているリモートアプリケーション84と共に示されている。計算集中的アルゴリズムライブラリーAPI86は、処理ノード88,90及び92のアルゴリズムライブラリー99の計算集中機能のためのインターフェースを定める。
動作時には、リモートホスト82は、計算集中的アルゴリズムライブラリー86により作られたアルゴリズム処理要求83をゲートウェイ107に送る。ゲートウェイ107は、要求83をデータ経路109を介してホームノード110のコントローラ108に伝える。ライブラリー99の計算集中的アルゴリズムは、処理ノードにおいて改変されずに同じままであるので、HCAS80内での“並列化”は、アルゴリズムがそのデータセットをどのように通過するかということの関数として行われる。該アルゴリズムの各々は、処理ノード88,90及び92に置かれたとき、データテンプレート102と統合される。コントローラ108は、付加的な情報をアルゴリズム処理要求83に付け加え、その要求及び付加的情報をそれぞれデータ経路104,106,108を介して処理ノード88,90,92に分配するが、その付加的情報は(a)処理ノードの数(例えば、この例ではN=3)及び(b)データ分配情報を詳しく示す。各処理ノード88,90,94は、アルゴリズム処理要求83をデータテンプレートソフトウェア102へ発送する同一の制御ソフトウェア94を有する。データテンプレートソフトウェア102は、アルゴリズムライブラリー99内のアルゴリズム処理要求83により特定された特定のアルゴリズムと通信するためにデータインデックス及び入力パラメータを計算する。
データテンプレートソフトウェア102は、特定の計算集中的アルゴリズムがデータを必要とするか否か判定する。該アルゴリズムがデータを必要とするならば、データテンプレート102はそのデータをホームノード110から要求する。その後、ライブラリー99内の該アルゴリズムは、該データが何処にあるか、どれほどの量のデータがあるか、結果を何処に置くかということを含む適切なパラメータで呼び出される。データセットが操作されるだけなので、リモートホスト82がHCAS80に関する情報を持つ必要はない。具体的には、リモートホスト82は、どの処理ノード88,90,92にも情報、データ、或いはプログラムを直接には送らない。HCAS80は、リモートホスト82にはゲートウェイ107を介して単一のマシーンとして見える。HCAS80が処理を完了すると、各ノード88,90,92からの結果は集塊化され(以下で詳しく説明する)、結果85としてリモートホスト82に伝えられる。
一実施形態では、HCASは、与えられた時間単位数で通信できるノードの数を最大にする。HCASは、例えばデータセット全体を全ての処理ノードに同時に放送することによって、従来技術における非能率(例えば、共有メモリー環境での衝突、中央データソースのネック、及びNノードクラスターについてのN個のメッセージの必要性)を避ける。通信チャネルを介して同じ量のデータが転送されるとしても、放送は、N個の別々のメッセージを使用するオーバーヘッドを無くする。放送の一つの重要な利点は、データを送ることについてのオーバーヘッドがHCAS内のノードの数と無関係であることである。これは、大きなクラスターの効率を維持するときに特に重要である。
各HCASは、図6のHC100などの、少なくとも1つのHCを有する。HC100は、7個の処理ノード112,114,116,118,120,122及び124の中に例示されている。アルゴリズム処理要求140,142,144,146,148,150及び152は、HC100のノード間で渡されるメッセージである。図示されているように、HC100を7個のノードの全部に拡張するために3つの時間単位(時間1、時間2、時間3)が使われる。時間単位は、例えば、伝達媒体に関わらず、HCASにおける1メッセージについての伝達時間である。例えば、メッセージは、次の媒体即ちLAN、WAN、共有されるバス、光ファイバーインターフェースなどのいずれかを横断して伝達可能である。
HC100は、アルゴリズム処理要求をノードの任意のグループに送る。最大限の拡張は、全てのアルゴリズム処理要求140,142,144,146,148,150及び152のの問題セットが全ての要求された処理ノード(この例ではノード112,114,116,118,120,122及び124)に伝達されたときに生じる。ホームノード110は、並列処理に必ずしも参加しない。
HC100が最大限に拡張されると、全てのノードがアルゴリズム処理要求を受け取っていて、関連するデータを受け取る準備ができている。各処理ノードは、そのアルゴリズム処理要求メッセージで受け取った情報に基づいて、どれほどの量のデータが来ると予想するべきか分かっている。各処理ノードは、ホームノード110により管理されるマルチキャストメッセージグループに加入して放送通信チャネルを聞こうとすることによって、該データを受け取る準備をする。該マルチキャストメッセージグループを通して、ホームノード110は単一のメッセージを放送し、このメッセージは、放送通信チャネルを聞こうとしている全てのノードにより受信される。ホームノード110は、全てのノードが該マルチキャストメッセージグループに加入するのを待ち、その後、データセットを全てのノードに同時に放送する。HC100の放送通信チャネル121でのデータ放送の例が図7に示されている。
HC100により使用されるデータ分解方式は、ノード数に基づいてデータセットを分割する。例えば、処理ノード112はデータの第1部分を受け取り、処理ノード114はデータの第2部分を受け取り、そしてHC100の最後の必要とされる処理ノードがデータの最後の部分を受け取るまで、同様に処理ノードがデータ部分を受け取る。この様にして、各処理ノードのためのデータが下流側の処理ノードにより受け取られるデータに隣接するようにデータセットが分配される。
HC100の各ノードは、データを受け取るとき、データセット全体を格納するかそれとも自分が必要とするデータだけを格納するかを選ぶことができる。必要なデータだけが格納されるのであれば、残りのデータは受信時に捨てられても良い。このノード間選択は、以下で述べるように、改善された並列処理性能を促進する柔軟性を維持しながらデータを格納するために使われるメモリーの量を減少させる。
処理ノードは、自分のデータを受け取ると、マルチキャストメッセージグループから去る。ホームノード110は、どのノードがマルチキャストメッセージグループから去ったか監視し、このことにより、各ノードが自分のデータを受け取ったという明確な承認を提供する。ホームノード110は、処理ノードが指定されたタイムアウト後にマルチキャストメッセージグループに残っているか注意することによって、失敗した処理ノードを検出することができ、その時には、回復を試みる処理ノードとの個別通信チャネルを開くことができる。
処理ノードが自分達の結果を作り終わると、集塊化プロセスが始まる。集塊化とは、(a)各処理ノードからそれぞれの結果を集めて(b)それらの結果を完全な解答の形にフォーマットすることを指す。各処理ノードは、自分の結果を直ぐ上流の処理ノードに送る。これにより、HC100内での初期拡張の逆のシーケンス順序で結果の流れが生じる。HC100による集塊化プロセスの例が図8に示されている。
集塊化の直接的結果は、各ノードからの結果が初期データセットの分解と同じ排列関係を保つことである。各処理ノードは、下流側の処理ノードを何個持っているか知っており、下流側ノードからの、後の下流側結果はデータの連続的ブロックを形成する。各処理ノードは、自分の結果データと、上流側処理ノードが受け取った結果を適切な位置に置くことを可能にする場所及びサイズの情報とを有する。HC100を通して結果が上流へ送られるとき、該結果情報のサイズは、結果ブロック全体がホームノード110で組み立てられるまで連続的に膨らんで行く。
例えば、図8は、HC100のノードを通して集塊化がどのように行われるか示している。第1時間単位(“Time 1”)において、ノード116,118,122,124はそれぞれの結果を(それぞれ“processor 3 data”、“processor 4 data”、“processor 6 data”、及び“processor 7 data”として特定されている)上流側ノードに(即ち、ノード114、ノード112、ノード120、及びホームノード110(ノード124について)に伝える。第2時間単位(“Time 2”)においてノード114及び120がそれぞれの結果(その下流側ノードの結果を含む)を上流側ノード112及び110にそれぞれ伝えるようにして、これら上流側ノードでデータが塊になる。第3時間単位(“Time 3”)においては、図示されているように各下流側ノードからの結果がホームノード110で集塊化するので、集塊化は完了する。
従って、集塊化プロセスはHC100を通るデータの“逆流”と見なされても良い。この逆流の1つの重要な利点は、もし全ての処理ノードが結果をホームノード110に同時に差し出そうとした場合には、ノードを接続する通信ネットワークが飽和するであろうが、この逆流の場合には該通信ネットワークが飽和しないことである。従来技術の多くのクラスターアーキテクチャーは、結果が単一のノードに返されるときにネットワークボトルネックを経験する。このボトルネックは計算負荷が処理ノード間に均一に分配されていれば悪化する可能性があるが、これは最大の計算効率を得るために望ましいことである。
(並列処理アーキテクチャーのためのコンテキストベースのアルゴリズム)
一定のコンテキストベースのアルゴリズムは、アルゴリズムの作業定義要素と考えることのできるものである。例えば、カーネルは、畳み込みアルゴリズムを必要とするデータセットに対して実行される作業定義要素である。以下でいっそう詳しく述べるように、その様なコンテキストベースのアルゴリズムは(a)内部又は外部コンテキストで、及び/又は(b)アルゴリズム的データ動作で、又はアルゴリズム的動作無しで、更に区別することができる。アルゴリズム的データ動作は、アルゴリズム内で自然なプロセスとして動くデータである。データを動かす内部要件を有するアルゴリズムの例はマトリクス反転アルゴリズムであるが、その理由は、マトリクス反転アルゴリズムにデータ運動が本来備わっているからである。
従って、アルゴリズムデータ動作により区別される一定のコンテキストベースのアルゴリズムは5つの並列化カテゴリーを定める:即ち、トランザクショナル(Transactional)、アルゴリズム的データ動作の無い内部コンテキスト(Internal
Context No Algorithmic Data Movement (“ICNADM”))、アルゴリズム的データ動作のある内部コンテキスト(Internal Context with Algorithmic Data Movement(“ICADM”))、アルゴリズム的データ動作の無い外部コンテキスト(External Context No Algorithmic Data Movement(“ECNADM”))、及びアルゴリズム的データ動作のある外部コンテキスト(External Context with Algorithmic Data Movement(“ECADM”)。これらのカテゴリーと該カテゴリーの重要性とは、以下でいっそう詳しく説明されるが、HC100を含むあらゆるタイプの並列処理クラスターに関連する。
(トランザクショナルカテゴリー)
本技術分野で知られているベーオウルフクラスター及びSETI@Home並列処理アーキテクチャーは、両方とも、処理される問題が本質的にトランザクショナルであるときに最も良く働く。トランザクショナル問題は、問題スペースが多数の独立した問題からなっている問題である。従ってそれぞれの問題が別々に解決され、それらの問題間には交差通信や同期化は存在しない。この種の問題については殆どどの部類のコンピュータでも使用可能であり、唯一の課題は、データをコンピュータのグループに或いはコンピュータのグループから動かすことである。
例えば、次のアプリケーション即ち星スペクトル分析、一定のバンキングアプリケーション、及び遺伝子工学は、概して、トランザクショナル問題セットを有する。この様なアプリケーションは、交差通信が無い、高度の並列処理がある、高い規模設定性があるなど、幾つかの共通の特徴を有する。
HC100は、トランザクショナルカテゴリーの問題セットを処理するのに役立つ。
(アルゴリズム的データ動作の無い内部コンテキスト(ICNADM)カテゴリー)
多くの論理的問題及び数学的問題がICNADMカテゴリーに属する。定義により、ICNADMカテゴリーは、具体的な論理的/数学的アルゴリズムについて達成されるべき最終作業が該アルゴリズムに内在していて、変換されるデータを該アルゴリズムの一部分として動かす必要の無いカテゴリーである。次の例、即ち級数展開、ソベルエッジ検出(Sobel edge detection)、畳み込み、マトリクス乗算、相関、交差相関、1次元高速フーリエ変換(1D−FET)、1Dウェーブレットなどは、ICNADM問題セットを有する。
並列化に関して、級数展開を必要とする数値計算は、級数の始めの低次項と終わりの高次項の計算の複雑さに固有の不均衡を有する。級数展開に基づくアルゴリズムが並列処理により実行されるように並列インプリメンテーションに変換されるとき、この不均衡は並列効率を達成する上での障害となる。より具体的には、級数展開の項が並列処理アーキテクチャーのノードに連続する間隔で(例えば、1−10,11−20,21−30,・・・)分配されるとき、始めの方の間隔が割り当てられたノードは終わりの方の間隔が割り当てられたノードより少ない計算を有する。計算負荷の不釣り合いは並列計算では非能率につながる。
一実施形態では、計算負荷は、並列計算の最大効率を達成するために全てのノードに均しく分配される。この分布は、HC100内での、或いは従来技術の現存する並列処理アーキテクチャーの中での並列処理を更に向上させる。
級数展開の多様性が与えられたとしても、各項目についての計算の複雑さの増大を予測することは困難である。一実施形態では、計算負荷を均等にするためにn番目毎の項が各ノードに割り当てられる。nを並列処理アーキテクチャーのノードの数に等しくすることによって、各ノードの計算負荷は同数の低次項及び高次項を有することになる。級数の項の総数がノードの数で均等に割りきれる場合には、各ノードが等しい数の項を有することになる。7ノードのアレイ(例えば、図6のHC100)についての42項の級数展開の例が表2に示されている。
級数の項の総数がノードの数で均等に割りきれない場合には、一実施形態ではその級数項はなるべく均等に分割される。7ノードアレイ(例えば、図6のHC100)での39項級数展開の例が表3に示されている。
表4に見られるように、各ノードは、級数の長さを超えるときに自分の項を切り落とす。これは、多ノードアレイ(例えば、図2のクラスター10の中、及び図6のHC100の中)での任意の長さの級数の相似分配の効率的手段を提供する。
均等に割りきれる場合(表2)、第1項と最終項との間に依然として僅かな不均衡がある。これは、各々のn番目間隔に存在する不均衡から生じる。アレイ内の第1ノードは全てのn番目間隔内の第1項を計算し、最後のノードは最後の項を計算する。しかし、連続する項間で複雑さが急速に増大しなくて、級数が長すぎない場合、殆どの級数展開のために、このレベルのバランシングで充分である。
それでもなお、連続する間隔における各ノードについて出発項を1だけ進め、最後の間隔における最後の項を計算したノードを第1項へ回転させて各n番目間隔における計算上の不均衡を無くすることによって追加レベルのバランシングを達成することができる。この再バランシングの例が表4に示されており、7ノードアレイに分配された42項級数展開を例示している。
表4の分配は、級数項の計算上の複雑さがどのくらい早く増大するか、或いは何個の項が計算されるかということに関わらず、完璧に近いバランシングを達成する。
これらの手法の有効性の例が図9及び図10に示されている。図9及び図10の各例において、並列アルゴリズムを用いて円周率の1000桁が計算された。その並列アルゴリズムはarctan(x)を使用するマチンの公式に基づいており、これは、arctan(x)が冪級数展開を用いて計算され、その級数中の連続する項の計算が高度に不均衡であるので選択された。計算は、アレイ内の1,3,7,15,31、及び63個のノードを用いて実行された。具体的には、級数展開の項が連続する間隔(例えば、1−10,11−20,21−30、・・・)でノードに分配される不均衡の場合を示している。計算上の不均衡は個々のノードの計算時間の極端な不均衡から明らかである。一方、図10は、級数展開の項が表2に示されているようにノードに分配される均衡している場合を示す。個々のノードの計算時間がほぼ等しいことから、均衡度の劇的改善が明らかである。
マチンの公式を用いる円周率の計算の例はICNADMカテゴリーに適合する。その理由は、実行されることになる最後の作業がマチンの公式であり、そのアルゴリズムが本質的にデータを移動させないことにある。
コンピュータの接続されているグループ(例えば、図6のHC100のノード)を使って、表2−4及び図9、図10で配慮されているような計算のスケールアップ及び計算のバランスの両方を生じさせることができる。
一定の実施形態では、ICNADMカテゴリー内の多数の関数をつなぎ合わせていっそう複雑な関数を作ることができる。例えば、Imageoutput=2D−CONVOLUTION(Kernel,2D−SOBEL(imageinput))を考察する。ここでimageinputは畳み込みプロセスへの基本入力イメージであり、2−DSOBELはソベルエッジ検出アルゴリズムであり、Kernelは畳み込みカーネル(例えば、イメージ中に見出される物体)であり、2D−CONVOLUTIONは畳み込みアルゴリズムであり、Imageoutputは出力イメージである。2D−SOBELエッジ検出アルゴリズムの出力は2D−CONVOLUTIONアルゴリズムの入力要件と矛盾しない出力イメージアレイを作るので、データ変換が行われる必要は無い。
しかし、データ変換が必要ならば、上記方程式は次の形を取ることができ: Imageoutput=2D−CONVOLUTION(Kernel,TRANSLATE(2D−SOBEL(imageinput)))、ここでimageinputは基本入力イメージであり、2−DSOBELはソベルエッジ検出アルゴリズムであり、Kernelは畳み込みカーネル(例えば、見出される物体)であり、2D−CONVOLUTIONは畳み込みアルゴリズムであり、Imageoutputは出力イメージであり、TRANSLATEは2D−SOBEL出力を2D−CONVOLUTION関数の入力要件と矛盾しないようにするために必要な仮想の関数である。この形において、次の規則が適用される:
規則1: 現在のTRANSLATE関数についてデータ動作が不要ならば、それはICNADMカテゴリーの関数として取り扱われて良くて、更なる努力は不要である。
規則2: 現在のTRANSLATE関数についてデータ動作が必要ならば、方程式全体をICADM又はECADMカテゴリーのアルゴリズムとして取り扱って良く、以下でいっそう詳しく論じる。
一実施形態では、並列処理を容易にするために数個の関数がこの様に結合される。特にICNADMクラスのアルゴリズムは、該アルゴリズムに入力された最大のデータセットのサイズの関数として更にスケーリングすることができる。その様なものとして、プロセッサの集合の速度は、充分なデータがあるならば、プロセッサの速度の合計の90%以上となることができる。総合エンドツーエンド並列処理性能を保証するために、並列処理アーキテクチャーのI/Oは、ノードへ、またノードから、データを動かすために要する時間がそのデータを処理するのに要する時間の小さなパーセンテージであるように、セットされるべきである。
ICNADMカテゴリーアルゴリズムは、コンパイラー又は実行時変換プロセスを用いて並列化することができる。実行時変換プロセスは改善された柔軟性を与えるので、実行時変換プロセスが使われるのが好ましい(即ち、コンパイルされた解は、与えられた問題に必要な仕事に最大限に適合する計算資源を動的に割り当てない)。
(アルゴリズム的データ動作のある内部コンテキスト(Internal Context with Algorithmic Data Movement(“ICADM”)))
一定の論理的及び数学的問題がこのカテゴリーに属する。定義により、特定の論理的又は数学的問題について達成される最終の仕事がアルゴリズムに本来備わっていて、変換されるデータがアルゴリズムの一部としてデータを動かすことを必要とするカテゴリーである。ICADMカテゴリーに属するアルゴリズムの例は、マトリクス転置アルゴリズム及びガウス消去法アルゴリズムを含む。
ICADMカテゴリーのアルゴリズムは、この様にデータの動作を必要とする。このことは、データ動作が速く行われるほど、アルゴリズムは複数のノード又はプロセッサに適用されたときに良好にスケーリングするということを意味する。このジレンマを解決する1つの方法は、より速いポイントツーポイント接続速度に焦点を合わせることであり、これは本質的に高価ではあるがICADMカテゴリーのアルゴリズムのためには良く働く。
それでもなお、一実施形態では、データ動作並列化がICADMカテゴリーのアルゴリズムのために使用される。接続されたノードのアレイ内の多プロセッサ通信のための最短時間最大ノード展開モデルを定義するために次のモデルを使用することができる。このモデルは、例えば、標準的スイッチメッシュの上の論理的オーバーレイとして、或いは固定接続モデルとして実現され、前者(論理的オーバーレイ)の方が好ましい:
ここで、H()はHCを表わし、Pはマザーボードあたりのプロセッサの数であり、Cはマザーボードあたりの通信チャネルの数であり、tは拡張時間単位であり、xは該HCのストリップ数(下で定義する)である。同様にマザーボードあたりにP個のプロセッサとマザーボードあたりにC個のチャネルとを有する与えられた数のノードについて拡張時間tは:
t=φlog((N+P)/P)/log(C+1)k
である。絵画的には、P=1,C=1,t=2であれば、拡張は図11の様に示される。
論理的オーバーレイとしてのデータ通信は次の3つの方法のうちの1つで行われて良い:(1)問題セット分配及び集塊化のための直接カスケード通信;(2)全ノードへの初期データの1対多数(各ノードによる必須データの選択を考慮に入れるカスケード位置を用いる);及び(3)データを共有する必要とされる全ての関連ノードへの中間データの補助的な1対多数。P=2,C=2,t=2であれば、展開は図12に示されている。システム160,162,164,166,168,170,172,174、及び176は、2つのプロセッサと2つの通信チャネルとを含む単位を表わし(P=2,C=2)、これにより各システムはHCASにおける2つのノードを表わす。この例において、システム160は、2つのホームノードH1及びH2を表わす。システム162は2つの処理ノードP1及びP2を表わす。システム164は2つの処理ノードP3及びP4を表わし、以降同様である。表5は、バイナリーツリー拡張とHC(ノードあたりのプロセッサの選択数はP、通信チャネルの選択数はC)の拡張速度との比較を示し、控えめに構成されたノードでも(例えば、1つのプロセッサと1つのネットワークインターフェースカード(NIC)とを有するマザーボード、即ちP=1,C=1)バイナリー拡張のほとんど2倍の拡張速度を作り出すことを示している。
前述したように、ICADMカテゴリーのアルゴリズムは、コンパイラー又は実行時変換プロセスを用いて並列化することができる。好ましくは、実行時変換プロセスが使用されるが、その理由は、その柔軟性にある(コンパイルされた解は、任意の与えられた問題のために必要とされる仕事に最大限に適合する計算資源を動的に割り当てることができない)。一方、スケーリングは、ノードのグループを(例えば、ポイントツーポイント通信を介してまたは並列データ動作速度を介して)結合させる実効帯域幅の関数である。
(アルゴリズム的データ動作の無い外部コンテキスト(ECNADA)カテゴリー)
一定の論理的及び数学的問題がこのカテゴリーに属する。定義により、ECNADAカテゴリーは、与えられた論理的又は数学的問題について達成されるべき最終作業が他のアルゴリズムに内在していて、変換されるデータが集団的アルゴリズムの一部分としてデータを動かすことを必要としないカテゴリーである。ECNADAカテゴリーのアルゴリズムの例はアダマール変換である。一実施形態では、ECNADAカテゴリーのアルゴリズムはICNADMカテゴリーのアルゴリズムのように扱われる。
(アルゴリズム的データ動作のある外部コンテキスト(ECADM)カテゴリー)
多くの論理的及び数学的問題がこのカテゴリーに属する。定義により、ECADMカテゴリーは、与えられた論理的又は数学的問題について達成されるべき最終作業が他のアルゴリズムに内在していて基本アルゴリズムがデータ動作を必要とするカテゴリーである。ECADMカテゴリーのアルゴリズムについての任意の2Dデータセットがm個のロー及びn個のコラムのアレイとして図66に例示されている。図66の2Dデータセットは、例えば、デジタルカメラにより作られるようなmロー及びnコラムのピクセルから成るビットマップイメージである。この様なアレイで二次元FFTを計算するとき、それは2段階で行われる。始めに、入力データアレイの第1次元(m個のロー又はn個のコラム)について1次元(1D)FFTが計算されて中間アレイを作る。第2に、その中間アレイの第2次元について1DのFFTが計算されて最終結果を作る。ロー演算及びコラム演算は分離可能であるので、ロー或いはコラムのどちらが先に処理されるかということは重要ではない。
次に、m個のローはP個の並列処理ノードに分配される。ノードに割り当てられるローは、ローインデックスと称される開始ローと、ローカウントとにより定められる。ローはノード間で分割されないので、ローカウントは整数に限定される。分配は、同量のローがノード1からP−1までに割り当てられ、残りのローがノードPに割り当てられるように実行される。残りは、ローの数がP個のノードに均等に分けられない場合を処理するために設けられる。ローカウントとノードの数との積と該残りとの和がローの総数に等しくなるように、ローカウントよりは小さい最大の整数として該残りを計算することができる。この調整は、均等なロー分配を達成する。
m個のローをP個のノードに分配するこのステップが図67に示されている。プロセッサノード1からP−1までにはMr個のローが割り当てられ、プロセッサノードPには残りのRr個のローが割り当てられる。各プロセッサノードiには、(i−1)とローカウントMrとの積に等しいローインデックスIRiが割り当てられる。このローインデックスへのノード番号のマッピングは、データ分割を単純且つ効率的にする。
次のステップは、n個のコラムをP個の並列処理ノードに均等に分配する。再び、コラムはノード間で分割されないので、分配は整数に限定される。コラム割り当てはローについての割り当てと同様に行われる。n個のコラムをP個のノードに分配するこのステップが図68に示されている。プロセッサノード1からP−1までにMc個のコラムが割り当てられ、プロセッサノードPには残りのRc個のコラムが割り当てられる。各プロセッサノードiには、コラムカウントMcの(i−1)倍に等しいローインデックスIRiが割り当てられる。
ローインデックス及びコラムインデックス、ローカウント及びコラムカウント、及びノード番号の間の関係が図69の7ノードHC100Aの文脈で更に例示され、これは1024個のロー及び700個のコラムから成るイメージビットマップアレイをHC100Aに分配する。この場合、ローカウントMrは147であり、ロー残りRrは142である。処理ノード1にはロー1から147までが割り当てられ、処理ノード2にはロー148から294までが割り当てられ、以降は処理ノード7まで同様であり、処理ノード7には残りのロー883から1024までが割り当てられる。チェックとして、6の147倍プラス142は総ローカウント1024に等しい。コラムカウントMcは100であり、コラム残りRcは0であり、その理由は、コラムの数が処理ノードの数で割り切れることにある。処理ノード1にはコラム1から100までが割り当てられ、処理ノード2にはコラム101から200までが割り当てられ、以降は処理ノード7まで同様であり、この処理ノード7にはコラム601から700までが割り当てられる。
ホームノード110Aは、図6との関係で前述したデータ分割を実行する。コマンド及びデータ分割(この場合には2D FFT)を記述するメッセージは処理ノード112,114,116,118,120,122,124(即ち、それぞれ、処理ノード1−7)に送られる。これらのメッセージは、図69に矢で示されているように送られる。処理ノード1−7が自分達のコマンドメッセージを受け取ると、各処理ノードはホームノード110Aがデータを送るのを待つ。データは、HC100A内の全ての処理ノードがデータを同時に受け取るように放送される。どのノードもデータセット全体を受け取るが、このことは、特にアレイ内に多数の並列処理ノードがある場合、各々のノードに別々のメッセージとデータセットの一部分とだけを送るより遥かに効率的である。
ノードは、自分のデータを受け取ると、他のノードとは無関係にコラムについて1D FFTを続行する。コラムFFTの結果が準備できると、それらは上流のホームノード110Aに蓄積され、集塊化される。その後、ホームノード110Aは、ローについて1D
FFTを計算するために中間結果を処理ノードに放送する。次に個々のコラム結果は上流のホームノード110Aに蓄積され、集塊化されて最終結果にされ、プロセスを終了する。従って、HC100Aを通してのデータ分配は任意のサイズの2Dデータセットに単純に且つ効率良く対処することができる。同様に、2D FFTが任意のグループのプロセッサのために並列化される。
従って、これらの手法は、このカテゴリーのアルゴリズムで通常見られる交差通信の難点を軽減する。例えば次のアルゴリズム: Imageoutput=2D−CONVOLUTION(Kernel,(1D−FFTcolumns(TRANSLATEfft−Transpose(1D−FFTrow(imageinput)))))を考察する。ここでimageinputは基本入力イメージであり、1D−FFTcolumnはコラム形1D FFTであり、1D−FFTrowはロー形1D FFTであり、Kernelは畳み込みカーネル(例えば、入力イメージに見出される物体)であり、2D−CONVOLUTIONは畳み込みアルゴリズムであり、Imageoutputは出力イメージであり、TRANSLATEfft−TransposeはFFTのためのマトリクス転置である。達成されるべき作業は2D−FFTの一部分ではないので(即ち、該アルゴリズムはデータを周波数領域に変換する)、関連する関数の作業単位を使って交差通信を制限することができる。この例では作業単位は2D−CONVOLUTIONのカーネルパラメータによって定められる。2D−FFTのノード毎の最低周波数がカーネルパラメータの最低周波数の少なくとも2倍であれば、それは、プロセッサ間の交差通信無しでimageinputをそのサイズに分割できるところの最小サイズを定める。このことは、TRANSLATEfft−Transpose関数が自分のマトリクス転置を実行するときに低周波数データ(交差通信の目的)を維持する必要が無いので発生することである。2D−FFTのこの解釈では、FFTは3つの部分:即ち1D−FFTrow、TRANSLATEfft−Transpose、及び1D−FFTcolumn、に分解される。この関数分解は、所要の転置の挿入に配慮するが、その関数がデータをプロセッサ間で動かすべきか否か決定することを可能にする。従って、下記のALG(A)からALG(B)などのアルゴリズム間での変換が自動的に行われて良い。
ALG(A)=Imageoutput=2D−CONVOLUTION(Kernel,(2D−FFTcolumns(imageinput)))であり、ここでimageinputは基本入力イメージであり、1D−FFTcolumnsはコラム形1D
FFTであり、1D−FFTrowはロー形1D FFTであり、Kernelは畳み込みカーネル(例えば、その位置を突き止めるべき物体)であり、2D−CONVOLUTIONは畳み込みアルゴリズムであり、Imageoutput(ALG(A))は出力イメージである。ALG(B)=Imageoutput=2D−CONVOLUTION(Kernel,(1D−FFTcolumns(TRANSLATEfft−Transpose(1D−FFTrow(imageinput)))))であり、ここでimageinputは基本入力イメージであり、1D−FFTcolumnsはコラム形1D FFTであり、1D−FFTroはロー形1D FFTであり、Kernelは畳み込みカーネル(例えばその位置を突き止めるべき物体)であり、2D−CONVOLUTIONは畳み込みアルゴリズムであり、Imageoutput(ALG(B))は出力イメージであり、TRANSLATEfft−TransposeはFFTのためのマトリクス転置である。
ECADMカテゴリーのアルゴリズムは、コンパイラー又は実行時変換プロセスを用いて並列化することができる。スケーリングは、主として、交差通信を拘束する仕事の関数である。好ましくは、実行時変換プロセスが使用されるが、その理由は、その柔軟性にある(コンパイルされた解は、任意の与えられた問題のために必要とされる仕事に最大限に適合する計算資源を動的に割り当てることができない)。
ICNADM、ICADM、ECNADM及びECADMカテゴリー処理についての以上の記述は、HCを含む並列処理アーキテクチャーを通してのアルゴリズムの並列処理を高めるために用いることのできる記述である。
(HCを用いる大規模クラスターコンピュータネットワークスイッチ)
HCは、従来技術に比べて一定の利点を提供する。例を挙げると、HCは共有メモリークラスターのスイッチングネットワークのバックプレーンにより課されるクラスターサイズに関する制約を減少させる。二次元、レベル3のHC100Bの論理形が図14に示されている。HC100Bは例証的に“ストリップ”という符号が付されているセクションに分割されている。各ストリップは接続に関しては他のストリップから独立している。この独立性は、集塊化まで、処理全体を通じて保たれる。集塊化時には図15に示されているように、ストリップ間で通信が行われる可能性がある。より具体的には、問題のデータセットを分配するとき、ホームノード110Bはトップレベルのノード112,120,124とだけ通信し、これらは各々のストリップの他の処理ノードと通信する。しかし、集塊化時には、図15に示されているように、ストリップ間及びトップレベルのノード112,120,124間でノード間通信が単一方向に発生する可能性がある。従って、HC100Bのストリップは、図16に更に示されているように、スイッチトポロジーに関して分離可能である。
図16において、ホームノード110Bとトップのノード112,120,124との間の通信のためにルータ200が使用され、このストリップ間通信は問題分配及び/又は集塊化のときに行われて良い。ストリップ内でのノード接続性は、該ストリップ内のノードの数を考慮するスイッチを使用することによって達成される。図16において、スイッチ202はストリップ1内のノード112,114,116,118間の物理的接続(即ち、ストリップ間通信)を提供し、スイッチ204はストリップ2内のノード120,122間の物理的接続(即ち、ストリップ間通信)を提供する。ストリップ3は、ルータ200に接続されたノード124を1つだけ有するので、付加的なスイッチは不要である。ルータ200のレベルでは相互作用は非常に僅かしか発生しないので、それは性能に無視できる程度の影響しか及ぼさない。この様にHC100Bのトポロジーは僅かなコストで極めて大きなクラスターに配慮する。
スイッチ202又は204等のスイッチは、相互に連結できるノードの数に制限を有する。例えば、ヒューレットパッカードHP2524スイッチは24個のポートを有し、相互に連結された16に及ぶスイッチを持つことができる。従って、このスイッチングアレイで利用できるスイッチングポートの総数は384である。従って、スイッチングアレイ内の自分のスイッチとしてHP2524を利用するストリップは、例えば384個に及ぶノードを接続することができる。ルータ200に適するルータの例はヒューレットパッカードHD9308mであり、これは合計168個のポートを有する。HD9308mをルータ200として用いれば(168x384)64,512個のノードを相互に接続させることができる。
HC100Bのトポロジーは、前記の384ノード境界などの境界条件で動作し得るように非常に大きなストリップを分解するように改造可能である。具体的には、一実施形態では、ストリップ内のノード(プロセッサ)の数は次のこと、即ち(a)ストリップは少なくとも1つのHCを有し、且つ(b)HCはHCの総数プラス残りの関数から成る、に従って制限されて良い。即ち、H=H(x)+H(y)+・・・+R(z)であり、ここでH()はHより大きくないサイズを有するHCであり、R()は0個、1個、または2個のノードである。従って、図17に示されているように、大きなカスケードストリップを1つのスイッチを各々有する小さな複数のグループに分解することができる。ハワードカスケードをその成分カスケードに分解し、スイッチングネットワークを適切に関連付けることによって、私たちはスイッチの数を最小限にしながら高スイッチング速度を維持する。
(カスケージングコンピュータにおける複数の拡張チャネルの使用)
例えば図6のHC100などの、HCとして接続されたコンピュータは、問題セット拡張の速度を高めるために複数の並列インターフェースを利用することができる。HCについての一般的拡張速度は次の:
N1=2t−1 (方程式1)
により表現することができ、ここでNは拡張に用いられるノードの数であり、tは拡張に用いられる時間単位の数である。見て分かるように、この拡張速度は次の数のノード即ち{0,1,3,7,15,31,63,127,255,511,1023、・・・}を提供し、これはベース2の幾何学的拡張である。方程式1を:
N2=p*(p+1)t−p (方程式2)
に一般化することができ、ここでNは拡張に用いられるノードの数であり、tは拡張に用いられる時間単位の数であり、pは拡張の並列チャネルの数である。
拡張の並列チャネルは、ノードあたりの、同時に動作することのできるバス接続(ネットワークカード、プロセッサ等)の数と一致する。ネットワークされたコンピュータの場合、これはネットワークインターフェースカード(NIC)とパラレルバスとの両方を意味する。単一プロセッサコンピュータ(これは内部バスを1つだけ有する)については、拡張のチャネルの数は1であって方程式1が適用される。ノードあたりに2つのプロセッサがある場合、下記が適用される(方程式2に従って)。
N3=2(2+1)t−2 (方程式3)
ここでNは拡張に用いられるノードの数であり、tは拡張に用いられる時間単位の数である。下の表6は2つの並列拡張チャネルについての拡張速度をノード数で明らかにしている。
方程式2の計算を方程式3と比べると方程式4が生じる:
R=N
1/N
3 (方程式4)
ここでRは拡張のノードの数の比であり、N
1は方程式1を用いる拡張のノードの数であり、N
3は方程式3を用いる拡張のノードの数である。表7は、この様な拡張の比を明らかにする。
表7は、第2拡張と比べて、第1拡張が四分の一の拡張効率を提供することを例証している。前述のことは、HCを用いて拡張の次元数を高めればクラスター効率が更に向上することも例証している。
図32及び図33は、並列チャネル通信のための代表的ハードウェア構成を例証しており、拡張の各並列チャネルはコンピュータプロセッサと通信チャネルとから成っている。図32は、単一の通信チャネル424を介して第2プロセッサ422に接続された第1プロセッサ420を示している。一方、図33に示されているように、拡張の複数の並列チャネルは複数のコンピュータプロセッサと複数の通信チャネルとから成っている。処理ノード112のプロセッサ430及びプロセッサ432は、2つの通信チャネル438及び440により処理ノード114のプロセッサ434及びプロセッサ436にそれぞれ接続されている。他の並列チャネル構成が後に続き、HCがデータを希望どおりに効率よく移動させるように実現可能である。
(HC及びノード数)
n次元HCは各拡張レベルについて固定された数の処理ノードを消費することができる。例えば、2次元HCは、表8により明らかにされる数のノードを消費することができる。
2次元HCで例えば4,5、または6個のノードを消費できるためには、以下で述べるように、HCについての上記のノード拡張アルゴリズムへの拡張を使用することができる。
より具体的には、時間に関しての拡張を、以下で定義する集合で示すことができる。HCの自然なカスケード周波数は集合1:{1,3,7,15,31、・・・、2t−1}の拡張速度であり、ここでtは時間単位の数である。より一般的な場合には、集合1は集合2:{d1−1、d2−1、d3−1、dt−1}の形を取り、ここでdは拡張の次元の数(=(p+1))であり、pは拡張の並列チャネルの数であり、tは時間単位の数である。集合2の要素の間にある拡張数を得るのが有益である。例えば集合3:{d1−1+1、d1−1+2、d1−1+3、・・・、d2−2}を考察する。ここでdは拡張の次元の数(=p+1)であり、pは拡張の並列チャネルの数である。集合3は、第1及び第2の自然拡張項の間に存する値の集合をより具体的に示す。集合1の場合、これは集合4:{2}に変換する。中間数のノードについての一般的集合は集合5:{dt−1+1、dt−1+2、dt−1+3、・・・、dt−1+t、d(t+1)−2}に与えられ、ここでdは拡張の次元の数(=p+1)であり、pは拡張の並列チャネルの数であり、tは時間単位の数である。一般的HC構成級数は以下に与えられる:
見て分かるように、展開の各項は全ての手続き項の和に等しい。各項がカスケードストリップに対応するので、2番目に高い項から開始して付加的なノードを追加して全ての空の潜在的スロットが満たされるまで続けることにより、或いは余分のノードをストリップに均等に分配することによって、HCの釣り合いが取られる。カスケードストリップにノードを均等に分配することによってHCの釣り合いを保つことは、表9及び表10において例証されているように、ノードにレベル分配することによって達成される:
各々のストリップ境界とレベルとは時間単位を表わし、ストリップ内の1つのレベルにおけるノードの位置はそのタイムスロットで行われる可能性のある分配を表わすので、表10に追加のノード8を付け加えると、追加の時間単位のために(表9に比べて)総処理時間が増大する。追加のノード8が一番上のレベルに付け加えられている表10とは異なって、表11は、追加の時間コスト無しで追加のノードをどのように付け加えられるかを示している。
HCを均衡させる一つの方法は、ノードが時間に関して整列することを保証するためにノードスペースをレベルにより充填することである。表12は、表11のHCと関連してノードを付け加える1つの手法を例示している:
表12において同じタイプ(それぞれA,B,C,又はD)で示されているいずれのノードも同じタイプの他のいずれのノードにも配置順序に関して取って代わることができる。ノードが時間効率よく付け加えられることを保証することにより、HCシステムオーバーヘッドが低減される。
(集塊化通信経路を前もって作ること)
通常、従来技術では、複数のネットワークインターフェースカード(“NIC”)を使用する実施形態は、NICがデバイスドライバーレベルで接着されることを必要とする。このことは、既製のデバイスドライバーのアップグレードを利用できなくし、NICを相互に無関係に使用して複数の通信チャネルを作り出す能力を除去する。ソフトウェアアプリケーションレベルがNICを個別に制御することを可能にすることによって、複数の通信チャネルを作り出していろいろに使用することができ、大きな通信柔軟性を与えることができる。例えば、通信帯域幅を広げるために2つのノード間に複数の通信チャネルを作ることができ、或いは1つのノードが他の多数のノードと同時に通信できるように通信チャネルを個別に使用することができる。各並列通信チャネルのために物理的に別々のスイッチネットワークを持つ必要があることの結果として、他の利点が得られる。この要件は、実現される並列通信チャネルの数と同等のチャネル冗長性を提供する。図70は、それぞれ2つのNIC244a,244b,244c及び244dを各々有する2つの処理ノード112及び114の接続性の例を示している。各並列通信チャネルは、独立しているネットワークスイッチ260及び262を有する。処理ノード112は、処理ノード114との2つの可能な通信チャネル、即ちa)ネットワークスイッチ260と接続し、従って処理ノード114内のNIC244cと接続するNIC244aを使用すること、及びb)ネットワークスイッチ262と接続し、従って処理ノード114内のNIC244dと接続するNIC244bを使用すること、を有する。クラスター内の各ノードが同数のNICを有し、従って同数の並列通信チャネルを有し、これにより最上の通信スループットを得るために全てのスイッチネットワークとの接続を有することが好ましいが、必ずしもそうでなくても良い。
図71は、この例において複数の通信チャネル448及び448’を処理ノード112でどのように具体化できるかを示している。ソフトウェアアプリケーション(例えば、図5の制御ソフトウェア94)は、複数のスレッドから成ることができる。各スレッドは、他のノードとの通信を容易にするために多チャネルソフトウェアAPI446を使用する。API446は、チャネル資源プール447内の通信チャネル448及び448’の使用を調整するスレッド保全サブルーチンのライブラリーから成る。この例では、各チャネル448,448’は、特定のネットワークインターフェースデバイスドライバー452及び452’と通信するためにコマンド/制御スレッド450,450’をそれぞれ利用する。コマンド/制御スレッド450,450’は、特定の通信プロトコルを扱うためにネットワークインターフェースデバイスドライバー452,452’をそれぞれ使用する。API446は、アプリケーションスレッド442及び444を特定のネットワークハードウェア及びプロトコル情報から切り離す。API446は、アプリケーションスレッドが通信のために1つ以上のチャネルを使用することを可能にし、必要に応じて選択されたチャネルでのデータ分配及び復元を管理する。API446は、チャネルプロトコルを扱い、チャネル故障を検出して回復することもできる。
図72は、HCASで利用されたときに付加的な効率を得るために複数の通信チャネルをどのように使えるかを例示している。この例では、HC100は、1つのホームノード110と7つの処理ノード112,114,116,118,120,122,124及び126とから成る。各処理ノード112,114,116,118,120,122,124及び126は2つの並列通信チャネルを有する。1つのチャネルはHC100での問題拡張のために使われ、他方のチャネルはHC100での集塊化のために使われる。図72の接続線は、ノード間で渡されるメッセージを表わす。線のスタイルは、キー456で示されているように、その間にメッセージが渡されるところの時間単位を示す。ホームノード110は、時間単位1の間に処理ノード1,112に処理要求を送る。時間単位2の間に、ホームノード110は処理要求を処理ノード5,120に送る。処理ノード1,112は、処理要求を処理ノード2,114に送り、その第2通信チャネルをホームノード110に向け、これにより集塊化のための用意が整う。時間単位3の間、ホームノード110は処理要求を処理ノード7,124に送る。処理ノード1,112は、その第1通信チャネルを使って、処理要求を処理ノード4,118に送る。処理ノード2,114は、その第1通信チャネルを使って処理要求を処理ノード3,116に送り、その第2通信チャネルを処理ノード2,114に向け、これにより集塊化のための用意が整う。処理ノード5,120は、その第1通信チャネルを使って処理要求を処理ノード6,122に送り、その第2通信チャネルを、処理ノード1,112に向け、これにより集塊化のための用意が整う。時間単位4の間、処理ノード3はその第2通信チャネルを処理ノード2、114に向け、これにより集塊化のための用意が整う。処理ノード4,118は、その第2通信チャネルを処理ノード1,112に向け、これにより集塊化のための用意が整う。処理ノード6,112は、その第2通信チャネルを処理ノード5,120に向け、これにより集塊化のための用意が整う。処理ノード7,124は、その第2通信チャネルを処理ノード5,120に向け、これにより集塊化のための用意が整う。
図示されているように、3つの時間単位の後に処理要求は7個の処理ノードの全てに送られている。時間単位4の間、処理ノードは、もしデータを待っているならば、データ放送を受け取るように自分達の第1通信チャネルを構成する。4時間単位後、データ集塊化通信路全体が確立され、これにより、処理ノードで通信チャネルが1つだけ利用可能である場合にデータ集塊化の前に通常費やされるチャネル構成オーバーヘッドが節約される。(ホームノードとしての処理ノード)
もし各処理ノードがホームノードスイッチネットワークに関連する付加的なNICを含んでいれば、ホームノードの代わりに処理ノードを使うことができる。例えば、もしホームノードが故障したならば、処理ノード又は他のホームノードが通信の欠如を検出する。一実施形態では、最低番号の通信ホームノードが、アクティブな処理ノードソフトウェアを終了させて遠隔手順呼び出しを通して新しいホームノードソフトウェアを始動させることによって、自分の処理ノードのうちの1つを新しいホームノードとして再構成するように選択する。故障したホームノードに割り当てられていた処理ノードは新しいホームノードに割り当て直され、処理が続行される。このことについて、図18、図21−図25と関連して更に論じる。
(カスケードクラスターシステムにおける複数ホームノード)
HCは、協力して動作する複数のホームノードを持つことができる。その様なHCは、更に故障したホームノードの検出及び軽減を自動化することができる。具体的には、HCAS内の各HCクラスターは、ノードが脱落した場合に人の介在無しに、自分自身を再構成することができる。後継のホームノードは故障したノードと同様に動作するので、HCは並列処理のために十分に機能する。更に、複数のホームノードは、複数のリモートホストによるアクセスを容易にする。
同時に処理ノードを割り当てる複数のホームノードを持つために、ホームノードはデータを共有する。図18は、1つのHC100Cにおける複数のゲートウェイノードのための通信路を示す。図18は、例として、3つのホームノード110C、224,226を伴う9個の処理ノード112,114,116,118,120,122,124,126,128を有する。各ホームノードは他のホームノードの各々と通信することができる。システムスタートアップ時に、各ホームノードは自分が責任を持つ処理ノードのリストを有し、このことは、図18では処理ノードスイッチネットワーク220と処理ノードとの間の通信ライン上でホームノードを特定することによって示されている。例えば、処理ノード118,120,122は、同じクラスターネットワークの一部分としてのホームノード224の制御下にある。表13は、HC100Cの全ての関連を明らかにする。
ホームノード110C、224,226のいずれかが追加の処理ノードを必要とするならば、そのノードは、他のホームノードを求めて処理ノードのリストを調べて手空きのノードがあるか無いか調べ、スイッチ220はその後、新しい処理ノードを要求側ホームノードの制御下に置くために再構成を行う。他の実施形態では、処理パワーを必要としているホームノードは、追加の処理ノードを求める要求を他のホームノードの各々に放送することができ、これらのノードは、応答をし、そしてもし手空きの処理ノードが存在するならば、HC100Cは再構成を行って特定のホームノードのために処理を行うノードを調整する。
HC100Cの1つの動作例(図18)では、ホームノード1(110C)及びホームノード2(224)はアイドル状態でホームノード3(226)が7個の処理ノードを必要としている。ホームノード3は、更に4個の処理ノードを求める要求を単一のマルチキャストメッセージでホームノード2及びホームノード1の両方に発する。その要求は、そのメッセージによりアドレス指定されるホームノードの総数も含んでいる。ホームノード1がそのマルチキャストメッセージを受け取って、アドレス指定されているホームノードの総数が2であると判定すると、ホームノード1は、要求されたノードの総数を該メッセージによりアドレス指定されたホームノードの総数で割ることによって2つの手空き処理ノードを返すべきであることを計算し、処理ノード1及び処理ノード2を特定する返送メッセージを送る。ホームノード2は、該マルチキャストメッセージを受け取ると、処理ノード4及び5を特定する返送メッセージを送る。
HC100Cの他の動作例では、ホームノード3は追加の処理ノードを1つだけ必要とする。ホームノード3は、1つの処理ノードを求めるマルチキャストメッセージをホームノード1及びホームノード2に対して発する。そのメッセージは、そのマルチキャストメッセージによりアドレス指定されるホームノードの総数も含んでいる。ホームノード1は、このマルチキャストメッセージを受け取ると、処理ノード1だけを特定する返送メッセージを送るが、その理由は、それが最低の番号を付されたホームノードであって且つ該要求が単一の処理ノードを求める要求だったことにある。ホームノード2は、該マルチキャストメッセージを受け取ると、もっと低い番号を持ったホームノードが該要求を満たしていることを認めるので、返送メッセージをホームノード3に送る必要はない。
図19は、ホームノード110Dについての一NIC構成を示している。ホームノード110Dは2つのネットワークインターフェースカードNIC240及びNIC242を有する。NIC240は、図18の処理ノードスイッチネットワーク220に接続され、NIC242は図18のホームノードスイッチネットワーク222に接続されている。図20は、NIC構成の、処理ノード112と関連する別の接続を示している。処理ノード112は、処理ノードスイッチネットワーク220に接続された単一のネットワークインターフェースカードNIC244を有する。ネットワーク接続に関しての図19のホームノード構成と図20の処理ノード構成との1つの違いは、処理ノード112がホームノードスイッチネットワーク222に接続されたNICを持っていないことである。ホームノード及び処理ノードは種々のソフトウェアを包含するが、遠隔手順呼び出し(“RPC”)を使ってノードのソフトウェア構成を変更することができる。従って、処理ノード112は、ホームノードスイッチネットワーク222に接続された第2のネットワークインターフェースカードを包含していれば、RPCによりホームノードとして動作するように再構成され得る。
(クラスター化されたコンピュータにおいてI/Oアクセスを減少させるオーバーラップデータの使用)
一実施形態では、HCは従来技術の共有メモリークラスターではありふれている多数のデータ転送を無くするのに役立ち、その様なHCは、従来技術の3%から7%の範囲と比べて40%から55%の範囲の計算効率を提供する。結合転送が低減されている場合、HC効率は80%から95%の範囲内にある。一例では、アルゴリズムはHCの2つの処理ノード、即ち処理ノード1及び処理ノード2、で動作する。5x6要素マトリクスは、2つの処理ノードにより並列処理されるように2つの5x3要素マトリクスに分割される。処理ノード1についてのデータが表14に示され、処理ノード2についてのデータが表15に示されている。
この例では、処理ノード1と処理ノード2とがデータ項目5,6,15,16,25、及び26を共有する必要があるということが仮定されている。これらの共有されるデータ項目を処理し転送するためのシーケンスが表16に示されている。
表16に見られるように、HCによる処理は、僅か6個の境界データ処理のために12個のデータ転送/受け取りを生じさせる。(必要なときに共有されるデータを所要のノードに提供するために)共有されるデータが重なり合うように境界データを変更することによって、必要なデータ転送の数が減少する。このことは、処理速度が多数のデータ転送と折衷されるので、重要である。上の例からのデータを用いて、表17及び18に示されているように、5x6要素マトリクスは2個の6x3要素マトリクスに分割される。
表17のコラムaと表18のコラムbとは、オーバーラップするデータを表わす。オーバーラップする領域は1次元オーバーラップ領域である。このオーバーラップ領域は、データを転送する現在の必要無しにオーバーラップとして扱われる。HCにおける処理ノード1及び処理ノード2の、結果としての処理シーケンスは表19に示されている。
比較により、並列活動の数を考察する。オーバーラップ領域がある場合、処理ノード1及び処理ノード2はデータを並列に処理する。従って、6個の時間単位が消費される。データがオーバーラップしていない場合、データが処理ノード間で転送される毎に処理が逐次化され、従って12個の時間単位が消費される(データ転送及びデータ処理が共に1個の時間単位を消費すると仮定して)。この効果は、オーバーラップする次元が多数あるときには、悪化する。例えば、表20は、9個の処理ノードに分配される9x15要素マトリクスを示しており、各ノードについてのデータ項目間にオーバーラップがある。
表20のアンダーラインが付されているデータ項目で分かるように、そのデータセットを有する処理ノードはオーバーラップ領域を含む(従って2次元オーバーラップを表わす)2次元マトリクスの全ての面を有する。これを1次元からN次元に類似的に拡張することができる。このオーバーラップ方法は、ノード間で連続的にデータを共有するのと比べて、クラスター転送のオーバーヘッドを減少させ、問題解決時の別々のプロセッサの効率的使用に配慮している。
(処理ノードのドロップアウトの検出及び取り替え)
前述したように、HCは、働いていない処理ノードを検出して、その働いていない処理ノードのための関連作業を人間の介在無しで他の処理ノードに割り当て直すように構成することができる。従来技術のクラスターは、故障したノードを検出すること及びそれを回復させることの両方に大きな困難を有し、この困難は、コンピュータノードを問題にどのように割り当てるかということの関数である。通常、(例えば図1−図4に示されているように)従来技術ではリモートホスト又はクラスターの外部に存する他のコンピュータは、クラスターで動作するべきアプリケーションコードをコンパイルする。当該技術分野で知られているMPI又はPVMなどのコンパイル時並列処理通信ツールが使用され、これにより処理ノード間の通信関係がコンパイル時に確立される。処理ノード関係がコンパイル時に形成されるときには、他の機能している処理ノードへの並列問題の実行時再割り当てを確立するのは困難である。ジョブを処理している過程でノードがクラスター内の他のノードとの通信を失ったならば、この無通信状態は、特殊化されたハードウェア及び/又は人間の介在無しでは訂正されない。
一方、HCの一実施形態では、ノード通信はコンパイル時にではなくて実行時に決定される。更に、HCの幾何学的性質は、ジョブの持続時間にわたる実行時ノード通信関係を固定する。このことは、処理ノード通信故障を検出すること及び問題セットを他の処理ノードに割り当て直し、実行時にノード故障について訂正を行うことを可能にする。
図21は、カスケードに構成された7つの処理ノード112,114,116,118,120,122及び124を有する1つのHC100Eと、8番目の、割り当てられていない処理ノード126とを例示している。ホームノード110Eは、通常処理時に処理ノード112,114,116,118,120,122及び124と通信する。しかし、もしホームノード110Eが例えば適切な回数の再試行後に処理ノード112と連絡を取れなかったならば、ホームノード110Eは処理ノード112のアドレスを“通信していない”リストに載せ、HC100E内でのその位置を占めるように他の処理ノードを直ちに割り当てる。図22は、再構成後のクラスターHC100Eの接続を例示している。この例では、ホームノード110Eは通信路250の故障を検出する。その時ホームノード110Eはデータ経路252を介して処理ノード126と通信し、処理ノード126にHC100E内での自分の位置を知らせる。すると、処理ノード126は通信路254及び256をそれぞれ介して自分の下位ノード(処理ノード114及び処理ノード118)との通信を確立する。完了すると、HC100Eは修理されていて、処理ノード112の代わりに処理ノード126を用いて処理が再開する。
ネットワーク化されたノードが同じネットワーク上の他のノードと通信しようと試みたが通信できなかったというときには通信プロトコル(例えばTCP/IP)はエラーコードを返送するので、無通信は検出可能である。例えば、図23は、図21のノードとネットワークスイッチ260との物理的接続を示している。もし処理ノード112がネットワークスイッチ260と最早通信していなければ、ホームノード110Eは次の利用可能なノード(この例ではノード126)を後継者として選択する。HC100Eの物理的接続トポロジーは、どのノードをカスケード内の何処に置くことをも、問題やオーバーヘッド無しに可能にする。
他の実施形態に関して、図24は、処理ノード112,114,116,118,120,122及び124を通じての並列処理が完了していてHC100Fが集塊化された結果をホームノード110Fに返送するように構成されている状態のHC100Fを例示している。図25は、処理ノード112の故障から生じる自主的エラー回復プロセスを示している。処理ノード114は、通信路280を介して処理ノード112と通信しようと試みると、エラーを受け取る。このとき処理ノード114は処理ノード112が通信していないことをホームノード110Fに知らせるために通信路282を介してメッセージを処理ノード110Fに直接送る。ホームノード110Fは、通信路284を用いて、処理ノード110が最早通信していないことを確かめる。ホームノード110Fは、その後、通信路286を用いて、次に利用可能な処理ノード(この場合は処理ノード126)を割り当てる。処理ノード126が処理ノード112に取って代わることを可能にするために必要な全ての情報が処理ノード126に送られる。ホームノード110Fは、その後、新しい上位ノード(即ちノード126)が存在することを通信路288及び290をそれぞれ介して処理ノード114及び処理ノード118に知らせる。処理ノード114及び処理ノード118は、その後、それぞれの結果を通信路292及び294をそれぞれ介して処理ノード126に送る。すると、処理ノード126はその集塊化した結果を通信路296を介して上流のホームノード110Fに送る。
他の例では、HC100Gは図21のHC100Eに類似して構成される。図26は、処理ノード112が処理ノード114にアルゴリズム処理要求を落とそうと試みて通信路300が失敗したときに行われるエラー回復シーケンスを示している。処理ノード112は、通信路302を介してその故障をホームノード110Gに知らせる。その後、ホームノード110Gは、次に利用可能な処理ノード(この例では処理ノード126)を選択し、通信路304を介して新しいノードのアイデンティティーを処理ノード112に知らせる。その後、処理ノード112は、通信路306を介して処理ノード126にHC100G内でのその新しい位置を知らせ、元は処理ノード114に向けられていたアルゴリズム処理要求を伝える。その後、処理ノード126は、通信路308を介して処理ノード116へのカスケードを継続する。
他のエラー回復例では、図27のHC100Hは、結果が集塊化されているときに回復をする。図27は、処理ノード116と処理ノード114との間の通信路320が故障したときに行われるHC100Hのエラー回復シーケンスを示す。処理ノード116は、その故障を通信路322を介してホームノード110Hに知らせる。ホームノード110Hは通信路324を介して次に利用可能な処理ノード(この例では処理ノード126)を選択する。その後、ホームノード110Hは、通信路326を介して、新しいノードのアイデンティティーを処理ノード116に知らせる。その後、処理ノード116は、通信路328を介して自分の結果を処理ノード126に送る。その後、処理ノード126は、通信路330を介して自分の集塊化された結果を処理ノード112に送る。
予備の処理ノードが無い場合、HCは現行の処理カスケードを一時停止させ、次の下位カスケードレベルでアルゴリズム処理要求を作り直し、ここで追加の手空き処理ノードを使って処理を再開することができる。この例では、HC100Eは、ノード126が利用できないということが仮定されていることを除いて、図21と同様に構成されている。図28は、処理ノード120が通信路340を介して処理ノード122と通信できないときに行われるエラー回復シーケンスを示す。処理ノード120は、その故障を通信路342を介してホームノード110Eに知らせる。ホームノード110Eは、予備の処理ノードが無いと判定して、処理ノード112,120,124での現行のアルゴリズム処理要求の処理を停止させるために通信路344を介してコマンドを送る。処理ノード112は処理ノード114でのアルゴリズム処理を停止させ、これは処理ノード116でのアルゴリズム処理を停止させる。ホームノード110Eは、処理ノード122を故障リストに加える。図29は、ノードのより小さなグループに通信路360を介して現行のアルゴリズム処理要求を再送し、3つの処理ノード118,120及び124を割り当てないままにしておく。この様に該アルゴリズム処理要求は人間の介在無しで代替ノードにより完成され、内部クラスターの任意の場所で使用可能となる。
一実施形態では、HC内の各ノードは同じ計算能力を持つことができる。リモートホストとホームノードとの間の接続はジョブ処理中開いたままではないので、リモートホストに知らせることを必要とはせずに故障した主ホームノードを切り離して取り替えることができる。図30は、HC100Iにおいて予備ノード(ノード331)と共有されるリモートホスト329から付加的な通信路380を介して受け取られる情報を示す。図31は、更に、主ホームノード110Iがもし故障すれば(例えば、通信路400が故障すれば)、次に利用可能な予備ノードが故障したホームノード110Iに取って代わるべく使用され、この例では、予備の処理ノード331がRPCによって再構成されて新しいホームノードになる。
HC100Iは、当業者に知られているクライアント−サーバーモデルを利用する必要はなく、従って、リモートホストとの接続は再建されて良い。
(ブラインド関数呼び出しのための潜在関数API)
HCSAは、専有アルゴリズムへの第3者のアクセスを回避するインターフェース方法で構築されて従来技術の1つの問題を克服することができる。図34は、アプリケーションコード460とHCASとの間の2つのインターフェースを示す。第1のインターフェースは関数要求インターフェース476であり、第2のインターフェースはデータ要求インターフェース466である。関数要求インターフェース476を通して、アプリケーションコード460は複雑なアプリケーションプログラムインターフェース(“API”)を持たずにパラメータリストで計算集中的アルゴリズムライブラリー99(図5)の関数を呼び出すことができる。該APIを使ってメッセージ作成ソフトウェアを呼び出す前に、テンプレート番号468、関数番号470、バッファーサイズのデータ定義472、及びバッファー474が作られる。テンプレート番号468は、関数番号470により選択される関数(計算集中的アルゴリズムライブラリー99内の)のためのデータテンプレートを定義する。この情報は、図35のパラメータ定義ファイル482に格納される。パラメータ定義ファイル482は実行時にアプリケーションコード460の初期化シーケンスの一部としてメッセージ作成ソフトウェア480に読み込まれる。該メッセージ作成ソフトウェアは、アプリケーションコード460により呼び出される静的動的リンクライブラリー(“DLL”)である。アプリケーションコード460が(計算集中的アルゴリズムライブラリー99の)関数を使うとき、該要求がトリガーされ、テンプレート番号468及び関数番号470は、バッファーサイズ472と、関数パラメータを含むバッファー474と共にメッセージ作成ソフトウェアに送られる。テンプレート番号468と関数番号470とは、バッファー474に包含されているパラメータの定義と、アプリケーションコード460の出力データ構造定義とを見出すために使われる。メッセージ作成ソフトウェア480は、このデータの全部を使って、HCASのホームノードに送られる出力メッセージ定義484を作成する。ホームノードは、テンプレート番号468と、データタイプ、次元数、及び各次元のサイズを定めるバッファー474に含まれるパラメータデータとを使って、使用する処理ノードの数を決定する。
より具体的には、図36は、出力メッセージ502を介して処理ノード112へのアルゴリズム処理要求の分配を開始する1つのホームノード110Jを示す。例示の目的上、処理ノード112が一つだけ示されている。処理ノード112は、呼び出された関数に必要とされるデータを待つ。その後、ホームノード110Jは、データ要求インターフェース466を介してそのデータを要求してアプリケーションコード460から受け取る。ホームノード110Jは、図36においてアプリケーション504からデータを受け取って示されている。ホームノード110Jは、その後、データ放送メッセージ500を使って該データを処理ノード112へ放送する。処理ノード112内の制御ソフトウェア94(図5)は、その後、出力メッセージ502に含まれている出力メッセージ定義484から変換されたパラメータを使って計算集中的アルゴリズムライブラリー99の中から選択された関数に対して関数呼び出しを行う。呼び出された関数は、データを処理し、結果を返送する。集塊化プロセスは、その後、該結果をホームノード110へ返送し、これは該結果をアプリケーション506へのデータとしてアプリケーションコード460に送り返す。ホームノード110Jは、その後、該結果をアプリケーションコード460に送り返す。
アプリケーションコード460によりメッセージ作成ソフトウェア480に渡される或るパラメータタイプは、特別の値を包含することができる。1つのその様な値は、要求された関数への入力パラメータのために使われる特定のデータ領域を指すポインタについての記憶タイプであり、そのポインタ値は実行時に処理ノード制御ソフトウェアの中でのみ解明可能である。このことは、パラメータ通過の柔軟性及び効率を可能にする。
要約すると、図34の関数要求インターフェース476とデータ要求インターフェース466とは、アプリケーションコード460による敏感な関数へのアクセス要求無しに関数がデータレベルで“並列化”されることを可能にする。それは、アプリケーションプログラムへの単純ではあるが高度に拡張可能なAPIにも備えている。
(HCAS上の複雑なアルゴリズム)
複雑なアルゴリズムは、1つ以上の分岐命令を含むアルゴリズムとして定義される。分岐命令は、1つ以上の変数と定数とを比較し、その比較に基づいて実行経路を選択するステートメントである。例えば:
IF(variable_a>10)then
{
Execution−Path−A
}
else
{
Execution−Path−B
}
上記の分岐命令で、変数aの内容が10より大きいか否かに基づいて2つの実行経路のうちの一方が選択される。実行経路は、別の分岐命令及び計算アルゴリズムを含んでいても良い。
計算的アルゴリズムは常に1つ以上のサブルーチン又はライブラリー関数呼び出しとして表わされ得る。HCASコンセプトでは、サブルーチン又はライブラリー関数として表わされ得るコードをHCAS上のアルゴリズムライブラリーにインストールすることができる。従って、分岐命令の計算アルゴリズム的部分をHCAS上で処理することができる。
各分岐命令は、連続的な活動を表わす。複雑なアルゴリズムを実行する全ての並列処理は、自分達の処理の中の同じポイントで同じ判定を行うように要求される。これを達成する方法が本質的に2つある。第1の方法は、各プロセスが同じ判定を行うために十分な情報を有するように、複雑なアルゴリズムを実行している各プロセス(例えば、HCAS内の処理ノード)がその複雑なアルゴリズムを実行している他の全てのプロセスにメッセージを送ることである。この第1の方法は、必要とされる交差通信の量を最大化するので、解決策としては受け入れられない。第2の方法は、分岐命令を評価する中心の場所を使用する。例えば、この中心の場所は、リモートホストに、またはHCAS内のホームノードにあって良い。条件変数データは、複雑なアルゴリズムを実行する各プロセスから中央の場所に送らなければならない唯一の情報であり、従ってデータ転送を最小限に保つ。
分岐命令は、下記の属性を有する条件関数により表わすことができる:
FUNCTION_NAME((Variable|constant)1<comparison attribute>
(Variable|constant)2)
{true path}
else
{false path}
ここで:
FUNCTION_NAME=条件タイプ、例えば:
IF,While,Untilなど。
Variable|constant =変数の名称又は定数値
Comparison attribute =論理的又は数学的ステートメント、例えば
AND,OR,<,>,=NOR,NANDなど。
これは(Variable|constant)1を(Variable|constant)2と比較する。
注記: この比較が真ならば、真経路(true path)が取られ、そうでなければ偽経路(false path)が取られる。
この様に、複雑なアルゴリズムにおける各々の分岐命令は関数呼び出しになる。条件関数と他の全てのHCAS関数との唯一の差違は、条件データが複雑なアルゴリズム中の各分岐命令での評価のために中央の場所に送られることである。
図63は、分岐命令を含む複雑なアルゴリズムの例として1つのプロセス1180を示すフローチャートである。プロセス1180はステップ1182から始まってステップ1184に続く。ステップ1184は、イメージデータに対して2次元相関関数を用いて係数を計算するコードのセクション即ちセクションAを表わす。ステップ1186は、ステップ1184で計算された係数を使用する分岐命令を表わす。もしその係数が0.9より大きければ、プロセス1180はステップ1190で進み、そうでなければプロセス1180はステップ1188に続く。ステップ1188は、この例では付加的なイメージ処理を実行するコードの第2セクション即ちセクションBを表わす。セクションBの計算の後、プロセス1180はステップ1190で続行する。ステップ1190は複雑なアルゴリズムの計算の結果を入手し、プロセス1180はステップ1192で終了する。この例に見られるように、複雑なアルゴリズムは、計算可能なセクション即ちセクションA1184及びセクションB1188と、ステップ1186のような条件関数とに分解することができる。
図64は、HCASで複雑なアルゴリズムを実行するための1つの実施形態を示す。図64は、3つの相互に作用するプロセス即ちホストプロセス1200、制御プロセス1300及び計算プロセス1400のための3つのフローチャートを示している。ホストプロセス1200は、複雑なアルゴリズムの処理要求を発して結果を受け取るリモートホストコンピュータで動作するプロセスを表わす。制御プロセス1300は、複雑なアルゴリズム中の条件分岐命令を調停するプロセスを表わす。制御プロセス1300は、リモートホストコンピュータで又はHCAS内で働くことができる。計算プロセス1400は、HCASで複雑なアルゴリズムセクションを計算するプロセスを表わす。
ホストプロセス1200はステップ1202から始まってステップ1204で続行する。ステップ1204は複雑なアルゴリズムの処理要求制御プロセス1300送る。ホストプロセス1200はステップ1206に続行し、ここで、計算された結果を受け取るために待機する。
制御プロセス1300は、ステップ1302から開始してステップ1304で続行する。ステップ1304は、リモートプロセス1200から複雑なアルゴリズムの処理要求を受け取り、ステップ1306で続行する。ステップ1306は、第1セクションを計算するように指示して複雑アルゴリズム処理セクションを計算プロセス1400に送る。制御プロセス1300はステップ1308で続行する。ステップ1308は、計算プロセス1400が該複雑アルゴリズムのセクションを完了した後に結果を返送するのを待つ。
計算プロセス1400は、ステップ1402から開始してステップ1404で続行する。ステップ1404は、制御プロセス1300から複雑アルゴリズム処理セクションを受け取る。計算プロセス1400は、ステップ1406で続行し、ここで複雑アルゴリズム処理要求の指示されたセクションが計算される。計算プロセス1400はステップ1408で続行する。ステップ1408は、計算されたセクションの結果を集塊化し、それを制御プロセス1300に送る。計算プロセス1400はステップ1410で続行し、ここで制御プロセス1300からの指示を待つ。
制御プロセス1300は、ステップ1308で計算プロセス1400から計算されたセクションの結果を受け取り、ステップ1310で続行する。複雑アルゴリズム処理要求をそれ以上計算する必要が無ければ、制御プロセス1300はステップ1314で続行し、そうでなければ、ステップ1310が、計算プロセス1400から返送された結果を用いて複雑アルゴリズム処理要求中のそれぞれの条件分岐を評価し、ステップ1312で続行する。
ステップ1312は、計算プロセス1400に指示メッセージを送ることによって複雑アルゴリズム処理要求の次のセクションの計算を開始する。制御プロセス1300は、その後、ステップ1308で続行し、ここで、開始されたセクションの計算が計算プロセス1400により完了されるのを待つ。
計算プロセス1400のステップ1410は、次にセクションを計算するか否か、そしてどのセクションを計算するかを示す指示を制御プロセス1300から受け取る。もし次に計算するセクションが無ければ、計算プロセス1400はステップ1414で終了し、そうでなければ計算プロセス1400はステップ1406で続行し、ここで次のセクションが計算される。
制御プロセス1300のステップ1314において、計算されるべきセクションはもう無いということを示す指示メッセージが計算プロセス1400に送られる。制御プロセス1300はステップ1316で続行し、ここで、ステップ1308で計算プロセス1400から受け取った最終結果をホストプロセス1200に送る。制御プロセス1300はその後ステップ1318で終了する。
ホストプロセス1200は、その結果をステップ1206で制御プロセス1300から受け取る。ホストプロセス1200はその後ステップ1208で終了する。
上の例に見られるように、複雑なアルゴリズムの計算可能なセクション及び条件関数への分解、データは必要に応じて動かされるだけである。分岐命令を中央の場所で評価することによって分岐命令の本来の連続性が維持され、HCASは複雑なアルゴリズムを効率よく取り扱うことができる。
(アルゴリズム展開ツールキット)
このセクション(アルゴリズム展開ツールキット)は、HC内でアルゴリズムを実行するための選択プロセスを説明する。この様なプロセスは、設計選択肢の問題として自動化されて良い。
図37は、新しいアルゴリズム520がHCAS80Aで動作することとなるように新しいアルゴリズム520をアルゴリズムライブラリー99に付け加えるためにアルゴリズム展開ツールキット522がどのように使われるかを示すブロック構成図である。アルゴリズム展開ツールキット522は、最少量の展開作業で新しいアルゴリズム520がHCAS80の処理ノード112,114,116及び118で並列に動作することを可能にするために新しいアルゴリズム520に付け加えることのできるルーチンのセットを含んでいる。付け加えられたルーチンは、新しいアルゴリズム520に自分がどの処理ノード上で動作しているか気づかせると共に、自分が処理しなければならないデータ構造に気づかせる。
ホームノード110K、処理ノード112、処理ノード114、処理ノード116、及び処理ノード118は、計算集中的アルゴリズムライブラリー99内の関数のためのデータ及びパラメータを定めるデータテンプレート定義528を含んでいる。HCAS80Aの全ての処理ノードは、データテンプレート定義528と計算集中的アルゴリズムライブラリー99との同一のコピーを含んでいる。アルゴリズム展開ツールキット522は、データ経路524を介するデータ定義528及び計算集中的アルゴリズムライブラリー99への新しいアルゴリズム520の追加と、データ経路526を介する、リモートホスト82で動作するアプリケーションにより使用される並列インターフェースライブラリー530への新しいアルゴリズム520の追加とを容易にする。
図38は、アルゴリズム展開ツールキット522からのルーチンで拡張された新しいアルゴリズム520の1つのプロセス550を示すフローチャートである。プロセス550は、ステップ552から出発してステップ554で続行する。
ステップ554は、図39に記載されているメッシュツール関数への関数呼び出しであり、それは新しいアルゴリズムについての入力データ記述及び出力データ記述を抽出する。プロセス550はステップ556で続行する。
ステップ556は、図51に記載されている入力データ関数を獲得する関数呼び出しであり、それは新しいアルゴリズムのためのデータを獲得する。プロセス550はステップ558で続行する。
ステップ558は、処理ノードのための結果を計算する関数呼び出しであり、この関数が動作する処理ノードのためにステップ556で獲得されたデータセットに対する新しいアルゴリズムの呼び出しである。プロセス550はステップ560で続行する。
ステップ560は、図54に記載されている集塊化結果関数に対する関数呼び出しであり、それはHCの集塊化段階の間に下流側処理ノードから結果を受け取る。プロセス550はステップ562で続行する。
ステップ562は、図58に記載されている結果返送関数に対する関数呼び出しであり、それはローカルな集塊化された結果を正しい処理ノードへ、或いは必要に応じてホームノードへ送る。プロセス550はステップ564で終了する。
図39は、図38のプロセス550のステップ554で呼び出されたメッシュツールサブプロセス570を示すフローチャートである。メッシュツールサブプロセス570は、アルゴリズム要求メッセージから入力データ記述及び出力データ記述を抽出し、それがその上で動作するところの処理ノード位置を用いてローカル計算のためのメッシュサイズを計算する。メッシュは、使用されることになる入力データ及び出力データの記述であって、この処理ノードによりどれだけの量の結果が計算されるか、そして結果を計算するためにどの入力値が使われるかを定める。メッシュは、アルゴリズムのタイプ、HCにおける処理ノードの位置、及びHCにおける処理ノードの総数に依存する。サブプロセス570はステップ572から始まり、ステップ574で続行する。
ステップ574は、図40に記載されている入力データサイズ発見関数に対する関数呼び出しであり、それはアルゴリズム処理要求から入力データサイズを抽出する。サブプロセス570はステップ576で続行する。
ステップ576は、図41に記載されている出力データサイズ計算サブプロセスに対する関数呼び出しであり、それは入力データセットサイズと新しいアルゴリズムの計算タイプとに基づいて出力データセットサイズを計算する。サブプロセス570はステップ578で続行する。
ステップ578は、図45に記載されているメッシュパラメータ計算サブプロセスに対する関数呼び出しであり、それはこの処理ノードによって結果のどの部分が計算されることになるかを定めるメッシュパラメータを計算する。サブプロセス570はステップ580で終了し、自分が呼び出されたところに返る。
図40は、1つの入力データサイズ発見サブプロセス590を記述するフローチャートであって、これはステップ592から始まってステップ594で続行する。
ステップ594は判定である。新しいアルゴリズムが級数展開であれば、サブプロセス590はステップ596で続行し、そうでなければサブプロセス590はステップ598で続行する。
ステップ596は、データ入力ロー及びデータ入力サイズを該級数中の項の数にセットする。サブプロセス590はステップ600で続行する。
ステップ598は、第1データ入力ロー、コラム及び要素サイズを入力イメージサイズと調和させる。サブプロセス590はステップ602で続行する。
ステップ600は、データ入力要素サイズを要素あたりに提供される数字の数にセットする。サブプロセス590はステップ604で続行する。
ステップ602は、第1データ入力サイズをステップ598で定められたデータ入力ローxコラムx要素サイズにセットする。サブプロセス590はステップ606で続行する。
ステップ604は、データ入力コラムを1にセットする。サブプロセス590はステップ612で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ606は判定である。もし第2入力イメージがあれば、サブプロセス590はステップ608で続行し、そうでなければサブプロセス590はステップ612で終了して、呼び出しを行ったプロセスにコントロールを返す。
ステップ608は、第2データ入力ロー、コラム及び要素サイズを第2入力イメージと調和させる。サブプロセス590はステップ610で続行する。
ステップ610は、第2データ入力サイズを、ステップ608で定められるデータ入力ローxコラムx要素サイズにセットする。サブプロセス590はステップ612で終了し、呼び出しを行ったプロセスにコントロールを返す。
図41は図38のプロセス550により呼び出された出力データサイズを見出す1つのサブプロセス620を示すフローチャートである。サブプロセス620は、ステップ622から始まってステップ624で続行する。
ステップ624は判定である。新しいアルゴリズムが級数展開であれば、サブプロセス620はステップ628で続行し、そうでなければサブプロセス620はステップ626で続行する。
ステップ626は判定である。もし第2イメージがあれば、サブプロセス620はステップ632で続行し、そうでなければサブプロセス620はステップ630で続行する。
ステップ628は、図42で定められる級数展開のためのサブプロセス出力級数サイズ計算を呼び出し、これは、新しいアルゴリズムにより計算される級数について出力データサイズを計算する。サブプロセス620はステップ634で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ630は図43で定義される単一イメージについてサブプロセス出力データサイズ計算を呼び出し、これは単一のイメージについて出力データサイズを計算する。サブプロセス620は、ステップ634で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ632は、図44で定められる2つのイメージについてサブプロセス出力データサイズ計算を呼び出し、これは2つのイメージについて出力データサイズを計算する。サブプロセス620は、ステップ634で終了し、呼び出しを行ったプロセスにコントロールを返す。
図42は、新しいアルゴリズムで使われる級数展開について出力データサイズを計算するための1つのサブプロセス640を示す。サブプロセス640は、ステップ642から始まり、ステップ644で続行する。
ステップ644は、データ出力ローを該級数の項の数にセットする。サブプロセス640はステップ646で続行する。
ステップ646は、データ出力要素サイズを1にセットする。サブプロセス640はステップ648で続行する。
ステップ648は、データ出力コラムを1にセットする。サブプロセス640はステップ650で続行する。
ステップ650は判定である。新しいアルゴリズムがex展開であれば、サブプロセス640はステップ654で続行し、そうでなければサブプロセス640はステップ652で続行する。
ステップ652は判定である。新しいアルゴリズムがシグマ平方根展開であれば、サブステップ640はステップ658で続行し、そうでなければサブプロセス640はステップ656で続行する。
ステップ654は、出力データサイズをex展開のための集塊化構造のサイズにセットする。サブプロセス640はステップ660で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ656は、データ出力サイズを該級数の項の数プラス1にセットする。サブプロセス640は、ステップ660で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ658は、データ出力サイズを、ASCII浮動小数点数における数字の数にセットする。サブプロセス640は、ステップ660で終了し、呼び出しを行ったプロセスにコントロールを返す。
図43は、入力データが単一のイメージであるときの出力データサイズを計算するための1つのサブプロセス670を示す。サブプロセス670は、ステップ672から始まり、ステップ674で続行する。
ステップ674は、データ出力ローをデータ入力ローに等しくセットする。サブプロセス670はステップ676で続行する。
ステップ676は、データ出力コラムをデータ入力コラムに等しくセットする。サブプロセス670はステップ678で続行する。
ステップ678は判定である。新しいアルゴリズムがFFT計算であれば、サブプロセス670はステップ682で続行し、そうでなければサブプロセス670はステップ680で続行する。
ステップ680は、データ出力サイズをデータ入力要素サイズに等しくセットする。サブプロセス670は、ステップ684で続行する。
ステップ682は、データ出力要素サイズを2つの倍精度浮動小数点数のサイズにセットする。サブプロセス670はステップ684で続行する。
ステップ684は、データ出力サイズをデータ出力ローxコラムx要素サイズにセットする。サブプロセス670は、ステップ686で終了し、呼び出しを行ったプロセスにコントロールを返す。
図44は、新しいアルゴリズムが2つの入力イメージを有するときに出力データのサイズを計算する1つのサブプロセス690を示す。サブプロセス690は、ステップ692から始まり、ステップ694で続行する。
ステップ694は、データ出力ローを、データ入力第1ロー、マイナスデータ入力第2ロー、プラス1に等しくセットする。サブプロセス690はステップ696で続行する。
ステップ696は、データ出力コラムを、データ入力第1コラム、マイナスデータ入力第2コラム、プラス1にセットする。サブプロセス690はステップ698で続行する。
ステップ698は判定である。新しいアルゴリズムがコンブォルブ(convolve)計算であれば、サブプロセス690はステップ700で続行し、そうでなければサブプロセス690はステップ702で続行する。
ステップ700は、データ出力要素サイズを単精度浮動小数点数のサイズにセットする。サブプロセス690はステップ704で続行する。
ステップ702は、データ出力要素サイズを倍精度浮動小数点数のサイズにセットする。サブプロセス690はステップ704で続行する。
ステップ704は、出力データサイズをデータ出力ローxコラムx要素サイズにセットする。サブプロセス690は、ステップ706で終了し、呼び出しを行ったプロセスにコントロールを返す。
図45は、メッシュについてのパラメータを計算する1つのサブプロセス710を示す。サブプロセス710は、ステップ712から始まり、ステップ714で続行する。
ステップ714は判定である。新しいアルゴリズムがπ、シグマ平方根又はLN(X)計算であれば、サブプロセス710はステップ716で続行し、そうでなければサブプロセス710はステップ718で続行する。
ステップ716は、図46に記載されているNの全ての値について1次元メッシュを計算するサブプロセスを呼び出す。サブプロセス710は、ステップ732で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ718は判定である。新しいアルゴリズムがex計算であれば、サブプロセス710はステップ720で続行し、そうでなければサブプロセス710はステップ722で続行する。
ステップ720は、図47で定められている1次元連続ブロックメッシュを計算するサブプロセスを呼び出す。サブプロセス710は、ステップ732で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ722は判定である。新しいアルゴリズムが畳み込み、正規化相互相関又はエッジ検出アルゴリズムならば、サブプロセス710はステップ724で続行し、そうでなければサブプロセス710はステップ726で続行する。
ステップ724は、図47で定められている2次元連続ブロックローメッシュを計算するサブプロセスを呼び出す。サブプロセス710は、ステップ732で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ726は判定である。新しいアルゴリズムがFFT計算であれば、サブプロセス710はステップ728で続行し、そうでなければサブプロセス710はステップ730で続行する。
ステップ728は、図49で定められている2次元連続ブロックロー及びコラムメッシュを計算するサブプロセスを呼び出す。サブプロセス710は、ステップ732で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ730は、図48で定められている2次元連続ブロックコラムメッシュを計算するサブプロセスを呼び出す。サブプロセス710は、ステップ732で終了し、呼び出しを行ったプロセスにコントロールを返す。
図46は、1次元の全てのNメッシュを計算する1つのサブプロセス740を示す。サブプロセス740は、ステップ742から始まり、ステップ744で続行する。
ステップ744は、メッシュ入力サイズをデータ入力ローにセットする。サブプロセス740はステップ746で続行する。
ステップ746は、メッシュ入力オフセットをデータ入力要素サイズx処理ノードのカスケード位置にセットする。サブプロセス740はステップ748で続行する。
ステップ748は、メッシュ入力ステップを、アルゴリズム処理要求に働きかける処理ノードの数に等しくセットする。サブプロセス740はステップ750で続行する。
ステップ750は判定である。メッシュが項0から始まるのであれば、サブプロセス740はステップ752で続行し、そうでなければサブプロセス740はステップ754で続行する。
ステップ752は、メッシュスタートを処理ノードのカスケード位置にセットする。サブプロセス740はステップ756で続行する。
ステップ754は、メッシュ入力スタートを処理ノードのカスケード位置プラス1にセットする。サブプロセス740は、ステップ756で続行する。
ステップ756は、メッシュ出力サイズをデータ入力ローにセットする。サブプロセス740はステップ758で続行する。
ステップ758は、メッシュ出力オフセットをデータ入力要素サイズx処理ノードのカスケード位置にセットする。サブプロセス740はステップ760で続行する。
ステップ760は、メッシュ出力ステップを、アルゴリズム処理要求に働きかける処理ノードの総数にセットする。サブプロセス740は、ステップ762で続行する。
ステップ762は判定である。メッシュが項0から始まるならば、サブプロセス740はステップ764で続行し、そうでなければサブプロセス740はステップ766で続行する。
ステップ764はメッシュ出力スタートを処理ノードのカスケード位置に等しくセットする。サブプロセス740は、ステップ768で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ766は、メッシュ出力スタートを処理ノードのカスケード位置プラス1にセットする。サブプロセス740は、ステップ768で終了し、呼び出しを行ったプロセスにコントロールを返す。
図47は1次元連続ブロックメッシュを計算する1つのサブプロセス780を示しており、これは2次元連続ブロックローメッシュを計算するための同じサブプロセス780でもある。サブプロセス780は、ステップ782から始まり、ステップ784で続行する。
ステップ784は、図50で定められている、データ入力ローに基づいて線形メッシュを計算するサブプロセスを呼び出す。サブプロセス780はステップ786で続行する。
ステップ786は、図51で定められている、データ出力ローに基づいて線形メッシュを計算するサブプロセスを呼び出す。サブプロセス780は、ステップ788で終了し、呼び出しを行ったプロセスにコントロールを返す。
図48は、2次元連続ブロックメッシュを計算する1つのサブプロセス800を示すフローチャートである。サブプロセス800は、ステップ802から始まり、ステップ804で続行する。
ステップ804は、図50で定められている、データ入力コラムで線形メッシュを計算するサブプロセスを呼び出す。サブプロセス800はステップ806で続行する。
ステップ806は、図51で定められている、データ出力コラムに基づいて線形メッシュを計算するサブプロセスを呼び出す。サブプロセス800は、ステップ808で終了し、呼び出しを行ったプロセスにコントロールを返す。
図49は、2次元連続クロックロー及びコラムメッシュを計算する1つのサブプロセス820を示すフローチャートである。サブプロセス820は、ステップ822から始まり、ステップ824で続行する。
ステップ824は、図50で定められている、データ入力ローで線形メッシュを計算する下位関数を呼び出す。サブプロセス820はステップ826で続行する。
ステップ826は、デー出力ローに基づいて線形メッシュを計算するサブプロセスを呼び出す。サブプロセス820はステップ828で続行する。
ステップ828は、図50で定められているデータ入力コラムで線形メッシュを計算する下位関数を呼び出す。サブプロセス820はステップ830で続行する。
ステップ830は、データ出力コラムに基づいて線形メッシュを計算するサブプロセスを呼び出す。サブプロセス820は、ステップ832で終了し、呼び出しを行ったプロセスにコントロールを返す。
図50は、ローに関して線形メッシュを計算する1つのサブプロセス840を示すフローチャートである。サブプロセス840は、データ入力計算及びデータ出力計算の両方のために呼び出すことのできるものである。サブプロセス840は、ステップ842から始まり、ステップ844で続行する。
ステップ844は判定である。カーネルを伴う第2イメージが存在するならば、サブプロセス840はステップ848で続行し、そうでなければサブプロセス840はステップ846で続行する。
ステップ846は、入力サイズをローにセットする。サブプロセス840はステップ850で続行する。
ステップ848は、入力サイズを第1ローマイナス第2ローにセットする。サブプロセス840はステップ850で続行する。
ステップ850は、メッシュサイズを、アルゴリズム処理要求に対して働きかける処理ノードの総数で割った入力サイズにセットする。サブプロセス840はステップ852で続行する。
ステップ852は、メッシュインデックスを、該アルゴリズムがその上で動作するところの処理ノードのカスケード位置とメッシュサイズとの積にセットする。
ステップ854は判定である。もしカーネルを伴う第2イメージが存在するならば、サブプロセス840はステップ856で続行し、そうでなければサブプロセス840はステップ858で続行する。
ステップ856は、第2ローから1を引いて得られる差をメッシュインデックスに加える。サブプロセス840はステップ858で続行する。
ステップ858は、メッシュ剰余を、アルゴリズム処理要求に働きかける処理ノードの総数で割った入力サイズの剰余にセットする。サブプロセス840はステップ860で続行する。
ステップ860は判定である。もし処理ノードのカスケード位置がステップ858で計算されたメッシュ剰余より小さければ、サブプロセス840はステップ864で続行し、そうでなければサブプロセス840はステップ862で続行する。
ステップ862は、処理ノードのカスケード位置をメッシュインデックスに加える。サブプロセス840はステップ866で続行する。
ステップ864は、ステップ858で計算されたメッシュ剰余をメッシュインデックスに加える。サブプロセス840は、ステップ868で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ866はメッシュサイズをインクリメントする。サブプロセス840は、ステップ868で終了し、呼び出しを行ったプロセスにコントロールを返す。
図51は、コラムに関して線形メッシュを計算する1つのサブプロセス880を示すフローチャートである。サブプロセスは、データ入力計算及びデータ出力計算の両方のために呼び出すことのできるものである。サブプロセス880は、ステップ882から始まり、ステップ884で続行する。
ステップ884は判定である。もしカーネルを伴う第2イメージが存在するならば、サブプロセス880はステップ888で続行し、そうでなければサブプロセス880はステップ886で続行する。
ステップ886は、入力サイズをコラムにセットする。サブプロセス880は、ステップ890で続行する。
ステップ888は、入力サイズを、第1コラムから第2ローを引いた差にセットする。サブプロセス880はステップ890で続行する。
ステップ890は、メッシュサイズを、アルゴリズム処理要求に働きかける処理ノードの総数で割った入力サイズにセットする。サブプロセス880はステップ892で続行する。
ステップ892は、メッシュインデックスを、該アルゴリズムがその上で動作するところの処理ノードのカスケード位置とメッシュサイズとの積にセットする。サブプロセス880はステップ894で続行する。
ステップ894は判定である。もしカーネルを伴う第2イメージが存在するならば、サブプロセス880はステップ896で続行し、そうでなければサブプロセス880はステップ898で続行する。
ステップ896は、第2コラムから1を引いた差をメッシュインデックスに加える。サブプロセス880はステップ898で続行する。
ステップ898は、メッシュ剰余を、アルゴリズム処理要求に働きかける処理ノードの総数で割った入力サイズの剰余にセットする。サブプロセス880はステップ900で続行する。
ステップ900は判定である。もし処理ノードのカスケード位置がステップ898で計算されたメッシュ剰余より小さければ、サブプロセス880はステップ904で続行し、そうでなければサブプロセス880はステップ902で続行する。
ステップ902は、処理ノードのカスケード位置をメッシュインデックスに加える。サブプロセス880はステップ906で続行する。
ステップ904は、ステップ898で計算されたメッシュ剰余をメッシュインデックスに加える。サブプロセス880は、ステップ908で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ906はメッシュサイズをインクリメントする。サブプロセス880は、ステップ908で終了し、呼び出しを行ったプロセスにコントロールを返す。
図52は、アルゴリズム処理要求を実行するために処理ノードが必要とする入力データを獲得する1つのサブプロセス920を示すフローチャートである。サブプロセス920はステップ922から始まり、ステップ924で続行する。
ステップ924は判定である。アルゴリズム処理要求が入力データを期待しているならば、サブプロセス920はステップ926で続行し、そうでなければサブプロセス920はステップ930で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ926は判定である。データがHCによりデータ放送として送られれば、サブプロセス920はステップ928で続行し、そうでなければサブプロセス920はステップ930で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ928は、図53で定められている放送メッセージを受け取るためにマルチキャストツールを使用するサブプロセスを呼び出す。サブプロセス920はステップ930で終了し、呼び出しを行ったプロセスにコントロールを返す。
図53は、放送データを受け取るためにマルチキャストツールを使用する1つのサブプロセス940を示すフローチャートである。サブプロセス940は、ステップ929から始まり、ステップ944で続行する。
ステップ944は、放送を受け取るためにマルチキャストソケットを開く。サブプロセス940はステップ946で続行する。
ステップ946はマルチキャストデータを受け取る。サブプロセス940はステップ948で続行する。
ステップ948は判定である。受け取るデータがもっとあれば、サブプロセス940はステップ946で続行し、そうでなければサブプロセス940はステップ950で続行する。
ステップ950は、ステップ944で開かれたマルチキャストソケットを閉じる。サブプロセス940はステップ952で終了し、呼び出しを行ったプロセスにコントロールを返す。
図54は、集塊化時に、下流側の処理ノードから結果を受け取る1つのサブプロセス960を示すフローチャートである。サブプロセス960はステップ962から始まり、ステップ964で続行する。
ステップ964は判定である。集塊化がマルチホームノードを伴うタイプのものであれば、サブプロセス960はステップ980で終了し、呼び出しを行ったプロセスにコントロールを返し、そうでなければサブプロセス960はステップ966で続行する。
ステップ966は、下流側の処理ノードから期待されるメッセージの数を判定する。サブプロセス960はステップ968で続行する。
ステップ968は判定である。期待されるメッセージが無ければ、サブプロセス960はステップ980で終了して呼び出しを行ったプロセスにコントロールを返し、そうでなければサブプロセス960はステップ970で続行する。
ステップ970は、受け取った結果を格納するために使用される結果ポインタをセットするサブプロセスを呼び出す。サブプロセス960はステップ972で続行する。
ステップ972は、データが添付されているメッセージを受け取る。サブプロセス960はステップ974で続行する。
ステップ974は結果を前の結果と結合させるサブプロセスを呼び出す。サブプロセス960はステップ976で続行する。
ステップ976は判定である。データが添付されているメッセージがもっと期待されるならば、サブプロセス960はステップ970で続行し、そうでなければサブプロセス960はステップ978で続行する。
ステップ978は、集塊化が完了した後に記憶装置を掃除するサブプロセスを呼び出す。サブプロセス960はステップ980で終了し、呼び出しを行ったプロセスにコントロールを返す。
図55は、結果ポインタを集塊化結果のために準備ができている状態にセットする1つのサブプロセス990を示すフローチャートである。サブプロセス990はステップ992から始まり、ステップ994で続行する。
ステップ994は判定である。集塊化タイプがローメッシュであれば、入力データのために割り当てられた現存するメモリーを使うことができ、サブプロセス990はステップ1000で続行し、そうでなければサブプロセス990はステップ996で続行する。
ステップ996は判定である。集塊化タイプが結果リストであれば、サブプロセス990はステップ1002で続行し、そうでなければサブプロセス990はステップ998で続行する。
ステップ998は判定である。ポインタが現在使用されていれば、サブプロセス990はステップ1006で終了し、呼び出しを行ったプロセスにコントロールを返し、そうでなければサブプロセス990はステップ1002で続行する。
ステップ1000は、データポインタを入力データスペースを指すように向けさせる。サブプロセス990はステップ1006で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ1002は、集塊化のためにもっとメモリーを割り当てる。サブプロセス990はステップ1004で続行する。
ステップ1004は、ステップ1002で割り当てられたメモリースペースにポインタを向けさせる。サブプロセス990はステップ1006で終了し、呼び出しを行ったプロセスにコントロールを返す。
図56は、集塊化中に結果を処理する1つのサブプロセス1020を示すフローチャートである。サブプロセス1020はステップ1022から始まり、ステップ1024で続行する。
ステップ1024は判定である。集塊化タイプが任意精度加算であれば、サブプロセス1020はステップ1026で続行し、そうでなければサブプロセス1020はステップ1028で続行する。
ステップ1026は、受け取った集塊化データをAPFLOAT数に変換し、それを蓄積されている結果に加える。サブプロセス1020はステップ1040で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ1028は判定である。集塊化タイプが浮動小数点加算であれば、サブプロセス1020はステップ1030で続行し、そうでなければサブプロセス1020はステップ1032で続行する。
ステップ1030は、受け取った集塊化データを浮動小数点数に変換し、それを蓄積されている結果に加える。サブプロセス1020はステップ1040で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ1032は判定である。集塊化タイプが最大を保存するタイプであれば、サブプロセス1020はステップ1034で続行し、そうでなければサブプロセス1020はステップ1036で続行する。
ステップ1034は、受け取った集塊化結果を格納されている値と比較し、もしそれより大きければ格納されている値を受け取った集塊化データに置き換える。サブプロセス1020はステップ1040で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ1036は判定である。集塊化タイプが結果リストであれば、サブプロセス1020はステップ1038で続行し、そうでなければサブプロセス1020はステップ1040で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ1038は、結果ポインタを結果リストに加え、結果カウンタをインクリメントする。サブプロセス1020はステップ1040で終了し、呼び出しを行ったプロセスにコントロールを返す。
図57は、使用された結果スペースを集塊化が完了した後に掃除する1つのサブプロセス1050を示すフローチャートである。サブプロセス1050はステップ1052から始まり、ステップ1054で続行する。
ステップ1054は判定である。集塊化方法がROWMESHであったならば、サブプロセス1050はステップ1058で終了し、呼び出しを行ったプロセスにコントロールを返す。そうでなければサブプロセス1050はステップ1056で続行する。
ステップ1056は、割り当てられたメモリースペースを解放する。サブプロセス1050はステップ1058で終了し、呼び出しを行ったプロセスにコントロールを返す。
図58は、局所の或いは集塊化された結果を正しい処理ノード或いはホームノードに返す1つのサブプロセス1070を示すフローチャートである。サブプロセス1070はステップ1072から始まり、ステップ1074で続行する。
ステップ1074は、図59で定められている、結果を受け取る宛先ノードのアドレスを得るサブプロセスを呼び出す。サブプロセス1070はステップ1076で続行する。
ステップ1076は、図60で定められている、結果メッセージのためのフォーマットを得るサブプロセスを呼び出す。サブプロセス1070はステップ1078で続行する。
ステップ1078は、図61で定められている、結果メッセージを構築するサブプロセスを呼び出す。サブプロセス1070はステップ1080で続行する。
ステップ1080は、図62で定められている、結果メッセージを宛先ノードに送るサブプロセスを呼び出す。サブプロセス1070は、ステップ1082で終了し、呼び出しを行ったプロセスにコントロールを返す。
図59は、集塊化結果を受け取るノードのアドレスを決定する1つのサブプロセス1090を示すフローチャートである。サブプロセス1090はステップ1092から始まり、ステップ1094で続行する。
ステップ1094は判定である。結果がホームノードに送られるべきであれば、サブプロセス1090はステップ1098で続行し、そうでなければサブプロセス1090はステップ1096で続行する。
ステップ1096は、上流側処理ノードのためのアドレスを得る。サブプロセス1090はステップ1100で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ1098はホームノードのアドレスを得る。サブプロセス1090はステップ1100で終了し、呼び出しを行ったプロセスにコントロールを返す。
図60は結果メッセージのフォーマットを入手する1つのサブプロセス1110を示すフローチャートである。サブプロセス1110はステップ1112から始まり、ステップ1114で続行する。
ステップ1114は判定である。その結果がホームノードへの結果であれば、サブプロセス1110はステップ1118で続行し、そうでなければサブプロセス1110はステップ1116で続行する。
ステップ1116は、上流側処理ノードについてのメッセージフォーマットを得る。サブプロセス1110はステップ1120で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ1118は、ホームノードについてのメッセージフォーマットを入手する。サブプロセス1110はステップ1120で終了し、呼び出しを行ったプロセスにコントロールを返す。
図61は、結果メッセージを作る1つのサブプロセス1130を示すフローチャートである。サブプロセス1130は、ステップ1132から始まり、ステップ1134で続行する。
ステップ1134は判定である。メッセージがデータヘッダ無しで返されるのであれば、サブプロセス1030はステップ1136で続行し、そうでなければサブプロセス1130はステップ1138で続行する。
ステップ1136は、データヘッダ無しのメッセージを作る。サブプロセス1130はステップ1144で終了し、呼び出しを行ったプロセスにコントロールを返す。
ステップ1138は判定である。メッセージがデータヘッダを伴って作られるのであれば、サブプロセス1130はステップ1140で続行し、そうでなければサブプロセス1130はステップ1142で続行する。
ステップ1142は、処理ノード結果メッセージを作る。サブプロセス1130はステップ1144で終了し、呼び出しを行ったプロセスにコントロールを返す。
図62は、結果メッセージを送る1つのサブプロセス1160を示すフローチャートである。サブプロセス1160はステップ1162から始まり、ステップ1164で続行する。
ステップ1164は宛先ノードへのストリームソケットを開く。サブプロセス1160はステップ1166で続行する。
ステップ1166はストリーム沿いにデータを送る。サブプロセス1160はステップ1168で続行する。
ステップ1168は判定である。送るデータがもっとあれば、サブプロセス1160はステップ1166で続行し、そうでなければサブプロセス1160はステップ1170で続行する。
ステップ1170はストリームソケットを閉じる。サブプロセス1160はステップ1172で終了し、呼び出しを行ったプロセスにコントロールを返す。
(不均質コンピュータシステム及び通信チャネルを使ってHCASを作る)
HCASでは同等の仕様及び性能のコンピュータシステム及び通信チャネルを使うのが好ましいが、システム効率を顕著に低下させることなく、まちまちな仕様のシステム及びチャネルからHCASを作ることができる。例えば、まちまちなプロセッサ速度、単一プロセッサマザーボード又は多プロセッサマザーボード、及びいろいろな数のNICを有するコンピュータシステムを同じHCAS内のホームノード及び処理ノードとして利用することができる。
従来技術の並列処理システムでは、ノード仕様のこの様なアンバランスは、処理アンバランスの原因となり、従ってクラスターにおける顕著な効率低下の原因となる。しかし、HCASでは、負荷バランシングを自動的に実行することができる。
当業者に理解されるように、並列処理クラスターにおける負荷バランシングのために多くの手法を利用することができる。HCASに利用できる1つの手法は、各処理ノードに必要な処理量を、その処理能力及び通信能力に基づいて比例的に配分することである。例えば、プロセッサクロックの遅い処理ノードには、プロセッサクロックの速い処理ノードよりも相対的に少量の処理されるべきデータを配分することができ、或いは級数展開で計算をする相対的に少数の要素を配分することができる。他の例では、2つの処理ノードが同一のプロセッサクロック速度を有するが、第1の処理ノードは第2の処理ノードの帯域幅の2倍の帯域幅を有する通信チャネルを有する。第1処理ノードは、第2処理ノードがデータを受け取るために使う時間のうちにより大量のデータを受け取ることができるので、第1処理ノードには第2処理ノードによりも多くのデータが配分される。
HCにおけるアルゴリズム処理要求の拡張は、メッセージサイズが小さいので通信チャネル速度による影響をあまり受けない。通信チャネル帯域幅のアンバランスに起因する問題拡張時のシステム性能のアンバランスは取るに足りない。
(別の例)
下記のセクションは、HCASで動作させることのできるアルゴリズムの別の例を提供する。
(並列処理のための2次元物体変換データの分解)
2次元物体の幾何学的変換は、並進運動、スケーリング、回転、及びシアリングを含む。このセクションは、一実施形態において、2D物体の幾何学的変換をHCでどのように実行できるか説明する。データ分割は、任意の数の並列処理ノード及び任意の大きさの物体を処理する。
2D物体は、(x、y)平面における座標として表わされた該物体のエンドポイントにより定義される。マトリクスMxyに、これらN個のエンドポイントをコラムベクトルとして表わさせる:
エンドポイントは一様座標に変換され、第3座標を1にセットし、新しいマトリクスM
Hを作る:
この一様座標への変換は、2D変換問題をマトリクス乗算に変え:M
T=T×M
H、ここでTは3×3変換マトリクスを表わし、M
Hは一様座標の3×Nマトリクスとして表わされた2D物体である。得られた積M
Tは、元の2D物体の変換を表わす。
変換マトリクスTは、変換のタイプに依存して、次のマトリクスのうちの1つに等しくなることができる:
t
x=x方向の並進運動オフセット
t
y=y方向の並進運動オフセット
s
x=x方向のスケールファクター
s
y=y方向のスケールファクター
sh
x=x方向のシアー定数
sh
y=y方向のシアー定数
2D物体変換問題は、HCで実行されるマトリクス乗算問題に変わっている。任意のマトリクスが下で表21に示されている、J個のロー及びK個のコラムに排列された数のアレイ。データ分割はマトリクスの要素を並列処理ノードに一様に分配する。
マトリクス乗算問題M
T=T×Mを考察する。ここでマトリクスTは次元3×3を有し、マトリクスMは次元3×Nを有し、結果としての積M
Tも次元3×Nを有する。3×Nは積M
Tのサイズを表わすものとする。マトリクス乗算のHC実行では、P個の並列処理ノードは、それぞれ、T及びMのコピーを受け取る。3×N>Pと仮定し、解のサイズ3×Nをノードの数Pで割って整数の商W及び剰余Rを得る。W個の要素がP個のノードの各々に割り当てられる。剰余Rは、始めのR個のノードの各々に1要素ずつ割り当てられる。このようにして始めのR個のノードには総数W+1個の要素が割り当てられ、残っているP−R個のノードの各々には総数W個の要素が割り当てられる。割り当てられる要素の総数は:R(W+1)+(P−R)W=PW+R=3×Nである。
上記のアプローチは、ノード計算負荷を1要素以内に均衡させる。
7ノードHCでの3個のロー及び50個のコラムから成る積マトリクスMTの分配を考える。この場合、整数商Wは150/7=21であり、剰余Rは3である。処理ノードP1からP3には22個の要素がそれぞれ割り当てられ、ノードP4からP7には21個がそれぞれ割り当てられる。マトリクスデータ分割は、総数150個の要素で計算され、表22に示されている。
処理ノードP
1は変換マトリクスTのロー1に物体マトリクスMのコラム1から22を乗じて、結果の自分の部分を計算する。処理ノードP
2は変換マトリクスTのロー1に物体マトリクスMのコラム23から44を乗じて、結果の自分の部分を計算する。処理ノードP
3は、変換マトリクスTのロー1及び2と物体マトリクスMのコラム1から16及び45から50とを使って自分の結果を計算する。仕事の分配は、処理ノードP
4からP
7に同様に分散される。
ホームノードは、マトリクスデータ分割を行う。コマンド(この場合にはマトリクス乗算)とデータ分割とを記述するメッセージが処理ノードに送られる。ノードは、自分達のコマンドメッセージを受け取ると、ホームノードが入力マトリクスデータを送るのを待つ。データは、カスケード中の全てのノードがそれを同時に受け取るように、放送されて良い。この様に各ノードは両方の入力マトリクスを受け取るが、これは、各ノードに別々のメッセージと入力データの各ノードのための部分とだけを送るより効率が良い。このことは、多数の並列処理ノードを考慮するときには特に重要である。ノードは、入力マトリクスを受け取ると、他のノードとは別に積の計算を続けることができる。マトリクス乗算結果は、準備ができると、ホームノードに蓄積されて最終結果に合併される。このポイントで処理は完了する。
この例が示すように、HCに適用される2D物体変換データ分配は任意のサイズの物体に簡単に且つ効率的に配慮する。
(並列処理のためのマトリクス乗算データの分解)
このセクションは、HCでマトリクス乗算をどのように実行できるかを説明する。説明されるマトリクス分割は、任意の数の並列処理ノードと任意の大きさのマトリクスとを処理することができる。
任意のマトリクスがM個のローとN個のコラムとに排列された数のアレイとして表23に示されている。データ分割は、マトリクスの要素を並列処理ノードに均等に分配する。
マトリクス乗算問題A×B=Cを考察する。ここで入力マトリクスAは次元M×Nを有し、入力マトリクスBは次元N×Qを有し、結果としての積Cは次元M×Qを有する。E=M×Qにより積Cのサイズを表わす。マトリクス乗算実行時には、P個の並列処理ノードの各々はA及びBのコピーを受け取る。E>Pと仮定し、解のサイズEをノードの数Pで割ると、整数の商Wと剰余Rとが得られる。W個の要素がP個のノードの各々に割り当てられる。剰余Rは、始めのR個のノードに1要素ずつ、分配される。従って、始めのR個のノードにはそれぞれ要素総数Ei=W+1が割り当てられ、残りのP−R個のノードには要素総数Ei=Wが割り当てられる。割り当てられる要素の総数はR(W+1)+(P−R)W=PW+R=Eに等しい。
もう一度、ノード計算負荷は1要素以内に均衡される。
7ノードのHCにおける50個のローと50個のコラムとから成る積マトリクスの分配を考察する。この場合、整数商Qは2500÷7=357であり、剰余Rは1である。処理ノードP1には358個の要素が割り当てられ、ノードP2からP7にはそれぞれ357個が割り当てられる。このマトリクスデータ分割が表24に示されている。
処理ノードP
1は、ロー1から7を全てのコラムについて計算し、次にロー8をコラム1から8だけについて計算し、合計358個の要素について計算する。P
1はマトリクスAの始めの8ローとマトリクスBの全部とを使って、自分の結果を計算する。
処理ノードP2は、ロー8をコラム9から50まで、ロー9から14を全てのコラムについて、ロー15をコラム1から15について計算し、合計で357要素を計算する。P2は、マトリクスAのロー8から15とマトリクスBの全部とを使って、自分の結果を計算する。
1<i≦7について、処理ノードPiは要素357(i−1)+2から357i+1を計算する。コラム幅50で割ると、7i−6から7i+1のローインデックス範囲がもたらされる。第1ロー、即ち7i−6、はコラム7i−5から50について計算される。最後のロー、即ち7i+1、はコラム1から7i+1について計算される。残りのローは全てのコラムについて計算される。計算される要素の総数は51−(7i−5)+6(50)+7i+1=56−7i+300+7i+1=357に等しい。Piは、マトリクスAのロー7i−6から7i+1とマトリクスBの全部とを使って自分の結果を計算する。
ホームノードは、マトリクスデータ分割を行う。コマンド(この場合にはマトリクス乗算)とデータ分割とを記述するメッセージが処理ノードに送られる。ノードは、自分達のコマンドメッセージを受け取ると、ホームノードが入力マトリクスデータを送るのを待つ。データは、カスケード中の全てのノードがそれを同時に受け取るように、放送されて良い。この様に各ノードは両方の入力マトリクスを受け取るが、これは、各ノードに別々のメッセージと入力データの各ノードのための部分とだけを送るより効率が良い。
ノードは、入力マトリクスを受け取ると、他のノードとは別に積の計算を続けることができる。マトリクス乗算結果は、準備ができると、ホームノードに蓄積されて最終結果に合併される。このポイントで処理は完了する。この例が示すように、HCに適用されるマトリクスデータ分配は任意のサイズのマトリクスに簡単に且つ効率的に配慮する。
(高速フーリエ変換を用いる2次元畳み込みのための並列処理データの分解)
このセクションは、高速フーリエ変換を用いる2次元畳み込みをHCでどの様に分割できるかを説明する。この分割は任意の数の並列処理ノードと任意の大きさのイメージとに対処することができる。
ピクセル値のM個のロー及びN個のコラムを含むイメージと、J個のロー及びK個のコラムを含むより小さなカーネルイメージとを考察する(J≦M,K≦N)。このイメージ及びカーネルに対して2D畳み込みを実行する効率的方法は、2D高速フーリエ変換の使用を含む。始めに、イメージのサイズと調和するようにカーネルがパッドされる。その後、イメージ及びカーネルに対して2D FFTが別々に実行される。その結果は、要素毎に乗算され、その後に逆2D FFTがその積に対して適用される。最終結果は、2D畳み込みを直接計算するのと同等である。
任意の入力イメージとカーネルとがピクセルのアレイとしてそれぞれ表25及び26に示されている。各並列処理ノードはカーネル全体のコピーを受け取る。イメージはロー或いはコラムにより処理ノードに一様に分配され、ここでデータ分割をロー分配によって説明する。
入力イメージのM個のローはP個の並列処理ノードに一様に分配される。ノードに割り当てられるローは、ローインデックスと称される出発ローIRiとロー総数Miとにより定められる。ローはノード間に分割されないので、ロー総数は整数に制限される。M>Pと仮定して、M個のローはP個のノードで割られ、整数の商Qと剰余Rとが得られる。P個のノードの各々にQ個の連続するローが割り当てられる。どんな剰余Rも、始めのR個のノードに1ローずつ分配される。従って始めのR個のノードには、それぞれ、総数Mi=Q+1個のローが割り当てられ、残りのP−R個のノードには総数Mi=Qのローが割り当てられる。割り当てられるローの総数はR(Q+1)+(P−R)Q=PQ+R=Mに等しい。始めのR個のノードについてのローインデックスIRiは(i−1)(Q+1)+1である。残りのP−R個のノードについては、IRiは(i−1)Q+R+1に等しい。
このセクションで説明されたこのアプローチは、1ロー以内に均衡されたノード計算負荷を維持する。ノードへのローのマッピングが下の表27に示されている。
1024ロー及び700コラムから成るイメージの7ノードHCでの分配を考察する。この場合、整数商Qは1024÷7=146であり、ロー剰余Rは2である。処理ノードP
1及びP
2には147ローがそれぞれ割り当てられ、ノードP
3からP
7には146がそれぞれ割り当てられる。P
1についてのローインデックスは1であり、P
2についてのローインデックスは148であり、以降P
7までこの様であり、P
7は879のローインデックスを有する。
HC計算の開始時に、コマンド(この場合には2D畳み込み)を記述するメッセージが処理ノードに送られる。ノードは、自分のコマンドメッセージを受け取ると、ホームノードが入力データを送るのを待つ。そのデータは、カスケード中の全てのノードがそれを同時に受け取るように、放送される。各ノードはデータセット全体を受け取るが、これは、各ノードに別々のメッセージと入力データの各ノードのための部分とだけを送るより効率が良い。
ノードは、入力データを受け取ると、他のノードとは別に、自分に割り当てられたローで2D畳み込み続ける。それぞれの結果が準備できると、それらはホームノードに蓄積され、最終結果に合併される。このポイントでプロセスは完了する。
この例が示すように、HCに適用されるデータ分配は、任意のサイズのイメージ及びカーネルに簡単且つ効率的に配慮する。
(並列処理のための線形連立方程式の分解)
このセクションは、HCで分割された線形連立方程式Ax=bの解を説明する。下記の分割方法は、任意の数の並列処理ノードと任意の大きさの連立方程式とを処理する。方程式Ax=b、より具体的には:
の解を考察する。ここでAは係数のN×Nマトリクスであり、bはN×1のコラムベクトルであり、xは求められているN×1の解である。
xを求めるために、Aに対してLU因数分解が行われる。LU因数分解の結果として、A=LUとなるように下側三角マトリクスL及び上側三角マトリクスUが得られる。元の方程式のAに代入してLUx=b或いはUx=L−1bとすると、xも解くことができる。
始めに、A及びbは、表25に示されているようにN個のローとN+1個のコラムとを有する単一の入力マトリクスに結合される。データ分割により、入力マトリクスのローが並列処理ノードに一様に分配される。
入力マトリクスのN個のローはP個の並列処理ノードに一様に分配される。ノードに割り当てられるローは、ローインデックスIRiと称される開始ローと、ローの総数Niとにより定められる。ローはノード間に分割されないので、ロー総数は整数に制限される。N>Pと仮定して、N個のローはP個のノードで割られ、整数の商Qと剰余Rとが得られる。P個のノードの各々にQ個の連続するローが割り当てられる。どんな剰余Rも、始めのR個のノードに1ローずつ分配される。従って始めのR個のノードには、それぞれ、総数Ni=Q+1個のローが割り当てられ、残りのP−R個のノードには総数Ni=Qのローが割り当てられる。割り当てられるローの総数はR(Q+1)+(P−R)Q=PQ+R=Nに等しい。始めのR個のノードについてのローインデックスIRiは(i−1)(Q+1)+1である。残りのP−R個のノードについては、IRiは(i−1)Q+R+1に等しい。
このセクションで説明されたこのアプローチは、1ロー以内に均衡されたノード計算負荷を維持する。ノードへのローのマッピングが表29に示されている。
100ロー及び101コラムの入力マトリクスの7ノードHCでの分配を考察する。この場合、整数商Qは10100÷7=1442であり、ロー剰余Rは6である。処理ノードP
1からP
6には1443ローがそれぞれ割り当てられ、ノードP
7には1442ローが割り当てられる。P
1についてのローインデックスは1であり、P
2についてのローインデックスは1444であり、以降P
7までこの様であり、P
7は8659のローインデックスを有する。
ホームノードは、このセクションのマトリクスデータ分割を実行する。コマンド(この場合には線形解)及びデータ分割は処理ノードに送られる。ノードは、自分達のコマンドメッセージを受け取ると、ホームノードが入力マトリクスデータを送るのを待つ。データは、カスケード内の全てのノードが該データを同時に受け取るように、放送される。従って各ノードはデータセット全体を受け取れるが、これは、各ノードに別々のメッセージと入力データの各ノードのための部分とだけを送るより効率が良い。
ノードは、入力マトリクスを受け取ると、各反復でピボットローを決定するためにデータを共有する場合を除いて他のノードとは別に、自分に割り当てられたローで線形連立方程式を解く。個々の結果が準備できると、それらはホームノードに蓄積されて最終結果に合併される。このポイントでプロセスは完了する。
この例が示すように、HCに適用されるデータ分配は任意のサイズの線形連立方程式に簡単且つ効率的に配慮する。
上記の明示された実施形態からのバリエーションが本書で考えられることを当業者は理解するであろう。説明は上記実施形態に制限されるべきではなくて、下記の請求項により評価されるべきである。