(57)【要約】  並列計算の高速化を図る。  並列計算方法は、データを分割した第１レベルの小データの各々を複数の計算ノードの各々に配置するステップと、複数の計算ノードのうちの少なくとも１つの第１計算ノードにおいて、第１レベルの小データをさらに第２レベルの小データに分割するステップと、第２レベルの小データの各々を、少なくとも１つの第１計算ノードから複数の計算ノードへ並列転送するステップと、転送された第２レベルの小データを、複数の計算ノードの各々から複数の計算ノードのうちの少なくとも１つの第２計算ノードへ並列転送するステップと、少なくとも１つの第２計算ノードにおいて、複数の計算ノードから転送された第２レベルの小データを用いて第１レベルの小データを再構成するステップと、を含む。
2021009901.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算ノードを備える並列計算システムにおいて並列計算を行う方法であって、
データを分割した第１レベルの小データの各々を前記複数の計算ノードの各々に配置する第１ステップと、
前記複数の計算ノードのうちの少なくとも１つの計算ノードを含む第１計算ノード群において、前記第１レベルの小データをさらに第２レベルの小データに分割する第２ステップと、
前記第２レベルの小データの各々を、前記第１計算ノード群から前記複数の計算ノードの部分集合である中継ノード群へ並列転送する第３ステップと、
前記転送された第２レベルの小データを、前記中継ノード群から前記複数の計算ノードのうちの少なくとも１つの計算ノードを含む第２計算ノード群へ並列転送する第４ステップと、
前記第２計算ノード群において、前記中継ノード群から転送された第２レベルの小データを用いて前記第１レベルの小データを再構成する第５ステップと、
を含む並列計算方法。
【請求項２】
前記再構成された第１レベルの小データを用いて前記並列計算の一部分を実行する第６ステップをさらに含む、請求項１に記載の並列計算方法。
【請求項３】
前記第３ステップにおける前記第１計算ノード群からの並列転送は、前記第１計算ノード群と前記中継ノード群との間で利用可能なすべての通信リンクが使用されるように、前記第１計算ノード群が、それぞれの前記第２レベルの小データを並列転送することを含む、請求項１または２に記載の並列計算方法。
【請求項４】
前記第４ステップにおける前記第２計算ノード群への並列転送は、前記中継ノード群と前記第２計算ノード群との間で利用可能なすべての通信リンクが使用されるように、前記中継ノード群が、前記第２レベルの小データを並列転送することを含む、請求項１から３のいずれか１項に記載の並列計算方法。
【請求項５】
前記計算ノードは、それぞれ複数の通信ポートを備え、
前記第３ステップにおける前記第１計算ノード群から前記中継ノード群へのデータ通信または前記第４ステップにおける前記中継ノード群から前記第２計算ノード群へのデータ通信は、前記複数の通信ポートを介して行われる、
請求項１から４のいずれか１項に記載の並列計算方法。
【請求項６】
前記複数の計算ノードは論理フルメッシュ接続される、請求項１から５のいずれか１項に記載の並列計算方法。
【請求項７】
前記並列計算は行列演算であり、前記データは行列を表すデータであり、前記第１レベルの小データは、前記行列を行方向および列方向に分割した小行列を表すデータである、請求項１から６のいずれか１項に記載の並列計算方法。
【請求項８】
前記小行列は、前記行列をＮ分割（ただしＮは計算ノードの数）した小行列であり、前記第２レベルの小データは、前記小行列をさらにＮ分割したデータである、請求項７に記載の並列計算方法。
【請求項９】
前記行列演算は行列積の計算である、請求項７または８に記載の並列計算方法。
【請求項１０】
複数の計算ノードを備える並列計算システムにおいて並列計算を行う方法であって、
データを分割した第１レベルの小データの各々を、さらに第２レベルの小データに分割するステップと、
前記第２レベルの小データの各々を前記複数の計算ノードの各々に配置するステップと、
前記第２レベルの小データを、前記複数の計算ノードの各々から前記複数の計算ノードのうちの少なくとも１つの計算ノードへ並列転送するステップと、
前記少なくとも１つの計算ノードにおいて、前記複数の計算ノードから転送された第２レベルの小データを用いて前記第１レベルの小データを再構成するステップと、
を含む並列計算方法。
【請求項１１】
複数の計算ノードを備える並列計算システムであって、
データを分割した第１レベルの小データの各々が前記複数の計算ノードの各々に配置され、
前記複数の計算ノードのうちの少なくとも１つの第１計算ノードが、
前記第１レベルの小データをさらに第２レベルの小データに分割し、
前記第２レベルの小データの各々を前記複数の計算ノードの部分集合である中継ノード群へ並列転送する
ように構成され、
前記複数の計算ノードのうちの少なくとも１つの第２計算ノードが、
前記第２レベルの小データを前記中継ノード群から並列転送によって取得し、
前記中継ノード群から転送された第２レベルの小データを用いて前記第１レベルの小データを再構成する
ように構成される、
並列計算システム。
【請求項１２】
複数の計算ノードを備える並列計算システムであって、
データを分割した第１レベルの小データの各々がさらに第２レベルの小データに分割され、
前記第２レベルの小データの各々が前記複数の計算ノードの各々に配置され、
前記複数の計算ノードのうちの少なくとも１つの計算ノードが、
前記第２レベルの小データを前記複数の計算ノードの各々から並列転送によって取得し、
前記複数の計算ノードから転送された第２レベルの小データを用いて前記第１レベルの小データを再構成する
ように構成される、
並列計算システム。
【請求項１３】
前記複数の計算ノードは、一次元フルメッシュ接続または二次元フルメッシュ接続される、請求項１１または１２に記載の並列計算システム。
【請求項１４】
前記複数の計算ノードは、波長ルーティングを用いて論理的にフルメッシュ接続される、請求項１３に記載の並列計算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算方法およびシステムに関する。
【背景技術】
【０００２】
従来、複数の計算ノードを用いて並列計算を行うシステムが開発されている。並列計算の一例として、行列積計算がある。行列積計算は、科学技術計算全般、ビッグデータ解析、人工知能等の分野で幅広く使われている最も基本的な計算要素の一つである。【０００３】
行列積を並列計算で行う従来の方法として、例えば非特許文献１が知られている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Robert A. van de Geijn 他、“SUMMA: Scalable Universal Matrix Multiplication Algorithm”、Concurrency Practice and Experience 9(4)、１９９７年４月、p. 255-274
【発明の概要】
【発明が解決しようとする課題】
【０００５】
並列計算の高速化は、データセンタ等におけるシステムの消費電力量の削減にとって重要である。【０００６】
本発明は、上記の点に鑑みてなされたものであり、その目的の１つは、並列計算の高速化を図ることにある。
【課題を解決するための手段】
【０００７】
上述した課題を解決するために、本発明の一態様は、複数の計算ノードを備える並列計算システムにおいて並列計算を行う方法であって、データを分割した第１レベルの小データの各々を前記複数の計算ノードの各々に配置する第１ステップと、前記複数の計算ノードのうちの少なくとも１つの計算ノードを含む第１計算ノード群において、前記第１レベルの小データをさらに第２レベルの小データに分割する第２ステップと、前記第２レベルの小データの各々を、前記第１計算ノード群から前記複数の計算ノードの部分集合である中継ノード群へ並列転送する第３ステップと、前記転送された第２レベルの小データを、前記中継ノード群から前記複数の計算ノードのうちの少なくとも１つの計算ノードを含む第２計算ノード群へ並列転送する第４ステップと、前記第２計算ノード群において、前記中継ノード群から転送された第２レベルの小データを用いて前記第１レベルの小データを再構成する第５ステップと、を含む並列計算方法を提供する。【０００８】
また、本発明の他の一態様は、上記一態様において、前記再構成された第１レベルの小データを用いて前記並列計算の一部分を実行する第６ステップをさらに含む、並列計算方法を提供する。【０００９】
また、本発明の他の一態様は、上記一態様において、前記第３ステップにおける前記第１計算ノード群からの並列転送は、前記第１計算ノード群と前記中継ノード群との間で利用可能なすべての通信リンクが使用されるように、前記第１計算ノード群が、それぞれの前記第２レベルの小データを並列転送することを含む、並列計算方法を提供する。【００１０】
また、本発明の他の一態様は、上記一態様において、前記第４ステップにおける前記第２計算ノード群への並列転送は、前記中継ノード群と前記第２計算ノード群との間で利用可能なすべての通信リンクが使用されるように、前記中継ノード群が、前記第２レベルの小データを並列転送することを含む、並列計算方法を提供する。【００１１】
また、本発明の他の一態様は、上記一態様において、前記計算ノードは、それぞれ複数の通信ポートを備え、前記第３ステップにおける前記第１計算ノード群から前記中継ノード群へのデータ通信または前記第４ステップにおける前記中継ノード群から前記第２計算ノード群へのデータ通信は、前記複数の通信ポートを介して行われる、並列計算方法を提供する。【００１２】
また、本発明の他の一態様は、上記一態様において、前記複数の計算ノードは論理フルメッシュ接続される、並列計算方法を提供する。【００１３】
また、本発明の他の一態様は、上記一態様において、前記並列計算は行列演算であり、前記データは行列を表すデータであり、前記第１レベルの小データは、前記行列を行方向および列方向に分割した小行列を表すデータである、並列計算方法を提供する。【００１４】
また、本発明の他の一態様は、上記一態様において、前記小行列は、前記行列をＮ分割（ただしＮは計算ノードの数）した小行列であり、前記第２レベルの小データは、前記小行列をさらにＮ分割したデータである、並列計算方法を提供する。【００１５】
また、本発明の他の一態様は、上記一態様において、前記行列演算は行列積の計算である、並列計算方法を提供する。【００１６】
また、本発明の他の一態様は、複数の計算ノードを備える並列計算システムにおいて並列計算を行う方法であって、データを分割した第１レベルの小データの各々を、さらに第２レベルの小データに分割するステップと、前記第２レベルの小データの各々を前記複数の計算ノードの各々に配置するステップと、前記第２レベルの小データを、前記複数の計算ノードの各々から前記複数の計算ノードのうちの少なくとも１つの計算ノードへ並列転送するステップと、前記少なくとも１つの計算ノードにおいて、前記複数の計算ノードから転送された第２レベルの小データを用いて前記第１レベルの小データを再構成するステップと、を含む並列計算方法を提供する。【００１７】
また、本発明の他の一態様は、複数の計算ノードを備える並列計算システムであって、データを分割した第１レベルの小データの各々が前記複数の計算ノードの各々に配置され、前記複数の計算ノードのうちの少なくとも１つの第１計算ノードが、前記第１レベルの小データをさらに第２レベルの小データに分割し、前記第２レベルの小データの各々を前記複数の計算ノードの部分集合である中継ノード群へ並列転送するように構成され、前記複数の計算ノードのうちの少なくとも１つの第２計算ノードが、前記第２レベルの小データを前記中継ノード群から並列転送によって取得し、前記中継ノード群から転送された第２レベルの小データを用いて前記第１レベルの小データを再構成するように構成される、並列計算システムを提供する。【００１８】
また、本発明の他の一態様は、複数の計算ノードを備える並列計算システムであって、データを分割した第１レベルの小データの各々がさらに第２レベルの小データに分割され、前記第２レベルの小データの各々が前記複数の計算ノードの各々に配置され、前記複数の計算ノードのうちの少なくとも１つの計算ノードが、前記第２レベルの小データを前記複数の計算ノードの各々から並列転送によって取得し、前記複数の計算ノードから転送された第２レベルの小データを用いて前記第１レベルの小データを再構成するように構成される、並列計算システムを提供する。
【発明の効果】
【００１９】
本発明によれば、並列計算を高速に行うことができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の一実施形態に係る並列計算システムの構成図である。
【図２】本発明の一実施形態に係る計算ノードの構成図である。
【図３】本発明の一実施形態に係る並列計算システムが対象とする並列計算の一例を示す。
【図４】従来のアルゴリズム（ＳＵＭＭＡ）による並列計算システムの動作を示すフローチャートである。
【図５】従来のアルゴリズム（ＳＵＭＭＡ）における行列計算の進展を概念的に示す。
【図６】従来のアルゴリズム（ＳＵＭＭＡ）における計算ノード間での小行列のルーティングを示す表である。
【図７】本発明の第１実施形態に係る並列計算システムの動作を示すフローチャートである。
【図８】本発明の第１実施形態における計算ノード間のルーティングを示す表である。
【図９】本発明の第２実施形態に係る並列計算システムの動作を示すフローチャートである。
【図１０】本発明の第２実施形態における計算ノード間のルーティングを示す表である。
【図１１】本発明の第３実施形態に係る並列計算システムの動作を示すフローチャートである。
【図１２】本発明の第３実施形態における計算ノード間のルーティングを示す表である。
【図１３】本発明の第４実施形態に係る並列計算システムの動作を示すフローチャートである。
【図１４】本発明の第４実施形態における各計算ノードへのデータの初期配置と計算ノード間のルーティングを示す表である。
【図１５】従来のアルゴリズムによる並列計算方法および本発明の各実施形態に係る並列計算方法の性能をまとめた一覧表である。
【図１６】並列計算のシミュレーションにおける実行時間を計測した結果を示すグラフである。
【図１７】従来のアルゴリズム（Ｃａｎｎｏｎアルゴリズム）における行列計算の進展を概念的に示す。
【図１８】本発明の第５実施形態における計算ノード間のルーティングを示す表である。
【図１９】従来のアルゴリズム（Ｆｏｘアルゴリズム）における行列計算の進展を概念的に示す。
【図２０】本発明の第６実施形態における計算ノード間のルーティングを示す表である。
【図２１】本発明の第７実施形態に係る並列計算システムの構成図である。
【図２２】本発明の第８実施形態に係る並列計算システムの構成図である。
【図２３】波長ルータによるルーティングを示すテーブルである。
【図２４】本発明の第８実施形態に係る並列計算システムに適用される計算ノードの構成図である。
【発明を実施するための形態】
【００２１】
以下、図面を参照しながら本発明の実施形態について詳しく説明する。
【００２２】
図１は、本発明の一実施形態に係る並列計算システム１０の構成図である。並列計算システム１０は、複数の計算ノード１００を備える。図１は、計算ノード１００間の論理トポロジーを示している。各計算ノード１００は、それぞれに割り当てられた所定の計算を他の計算ノード１００と並列に実行するコンピュータである。図１の例において、並列計算システム１０は、９台の計算ノード１００、すなわち、計算ノードＮ０、計算ノードＮ１、計算ノードＮ２、計算ノードＮ３、計算ノードＮ４、計算ノードＮ５、計算ノードＮ６、計算ノードＮ７、および計算ノードＮ８から構成されている。しなしながら、計算ノード１００の台数は一例にすぎず、任意の台数、例えば、数十台、数百台、あるいは数千台の計算ノード１００が、並列計算システム１０を構成してもよい。
【００２３】
各計算ノード１００の間は、通信リンク２０によって接続されている。通信リンク２０は、それが接続する両端の計算ノード１００が相互にデータを送受信することを可能にする伝送路である。通信リンク２０は、電気信号または光信号の形態でデータを伝送する。通信リンク２０は、有線でも無線でもよい。図１の例において、計算ノードＮ０は、他のすべての計算ノード１００、すなわち、計算ノードＮ１、計算ノードＮ２、計算ノードＮ３、計算ノードＮ４、計算ノードＮ５、計算ノードＮ６、計算ノードＮ７、および計算ノードＮ８と通信リンク２０によって接続されている。他の計算ノード１００も同様に、自分以外のすべての計算ノード１００と通信リンク２０によって接続されている。このように、図１に例示された並列計算システム１０では、各計算ノード１００が通信リンク２０によって「フルメッシュ」接続されている。しかしながら、計算ノード１００間の接続はフルメッシュでなくともよく、ある計算ノード１００間の通信リンク２０が省略されていてもよい。通信リンク２０が存在していない計算ノード１００間の通信は、例えば、他の計算ノード１００を経由して行われてもよい。なお、本明細書では、通信リンク２０の本数を、一方向の通信毎に１本と数えることにする。図１において、計算ノード１００間を接続する各通信リンク２０は簡単化のため１本の線で示しているが、実際には、各計算ノード１００間では同時に双方向の通信が可能であるので、各計算ノード１００間は２本の通信リンク２０で結ばれている。従って、図１の例では、９×８＝７２本の通信リンク２０が存在する。なお、図１は計算ノード１００間の論理トポロジーがフルメッシュ接続であることを示しており、必ずしも計算ノード１００間の物理トポロジーがフルメッシュ接続である必要はない。本発明の実施形態は、後述（図２２〜２４）の波長ルーティングを用いる並列計算システムのように、論理トポロジーはフルメッシュ接続であるが、物理トポロジーはスター型接続である構成の並列計算システムを含む。
【００２４】
このように、本発明の実施形態に係る並列計算システム１０は、各計算ノード１００間が論理的にフルメッシュ接続された構成を有している。従来の、各計算ノード間がパケット・スイッチを介して接続された構成の並列計算システムでは、計算ノードとパケット・スイッチ間のリンクを時分割で利用するため、高い柔軟性を有する反面、パケットの衝突を回避するための複雑な手順が必要となり、通信遅延および消費電力増加の原因となる。これに対し、各計算ノード１００間が論理的にフルメッシュ接続された本実施形態の並列計算システム１０では、全計算ノード１００間が常時直接接続されているため、パケット間の衝突を考慮する必要がなく、より簡単な処理で済ませることができ、通信遅延や消費電力の削減が可能である。
【００２５】
ある計算を実施する場合、並列計算システム１０は、当該計算の処理を複数に分割し、分割したサブ処理を各計算ノード１００に割り当てる。すなわち、各計算ノード１００は、並列計算システム１０が全体として実施する計算のうちの一部分を担当する。また並列計算システム１０は、計算で使用するデータ、あるいは計算の対象であるデータを複数に分割し、分割した小データを各計算ノード１００に分散して配置する。各計算ノード１００は、自分が担当する計算を実行するが、その計算に必要なデータを保持していない場合がある。計算ノード１００は、そのようなデータを、当該データを保持している他の計算ノード１００から通信リンク２０を介して入手する。このようにして各計算ノード１００が自分に割り当てられたサブ処理を実行することで、並列計算システム１０における計算が、複数の計算ノード１００の協働によって並列に処理される。
【００２６】
図２は、本発明の一実施形態に係る計算ノード１００の構成図である。図２は、図１における複数の計算ノード１００のうちのある計算ノード１００の構成を示している。複数の計算ノード１００のうちの他の計算ノード１００は、図２と同一の構成を有していてもよいし、あるいは図２とは異なるように構成されてもよい。
【００２７】
図２において、計算ノード１００は、プロセッサ１１０、メモリ１２０、および送受信ユニット１３０を備える。メモリ１２０は、少なくともプログラム格納領域１２２およびデータ格納領域１２４を含む。プログラム格納領域１２２には、計算ノード１００に本発明の一実施形態に係る後述の動作を行わせるコンピュータプログラムが格納される。プロセッサ１１０が当該コンピュータプログラムをメモリ１２０から読み出して実行することで、計算ノード１００は、本発明の一実施形態に係る後述の動作を行う。
【００２８】
データ格納領域１２４には、並列計算で使用する全体データを複数に分割した小データの１つであって、当該計算ノード１００がその配置先として指定された小データが、あらかじめ格納される。またデータ格納領域１２４には、当該計算ノード１００が計算に必要とする小データであって、他の計算ノード１００から入手した小データが、一時的に格納される。さらに、データ格納領域１２４には、当該計算ノード１００が計算を実行することによって生成されたデータも格納される。
【００２９】
送受信ユニット１３０は、当該計算ノード１００と他の計算ノード１００との間で、各計算ノード１００が計算に必要とする小データを送受信する。具体的に、送受信ユニット１３０は、当該計算ノード１００に分散配置されメモリ１２０のデータ格納領域１２４にあらかじめ格納されている小データを、他の計算ノード１００が計算に使用するために当該他の計算ノード１００へ送信する。また送受信ユニット１３０は、当該計算ノード１００が保持していないが計算に必要な小データを、他の計算ノード１００から受信する。
【００３０】
送受信ユニット１３０は、複数の計算ノード１００の各々とデータを並列に送受信するための複数の通信ポート１３２を備える。各通信ポート１３２は、通信リンク２０によって対応するそれぞれの計算ノード１００と接続されている。図２の例において、送受信ユニット１３０は、８個の通信ポート１３２を備える。例えば、計算ノードＮ０に着目すると、通信ポートＰ０は計算ノードＮ１と接続され、通信ポートＰ１は計算ノードＮ２と接続され、通信ポートＰ２は計算ノードＮ３と接続され、通信ポートＰ３は計算ノードＮ４と接続され、通信ポートＰ４は計算ノードＮ５と接続され、通信ポートＰ５は計算ノードＮ６と接続され、通信ポートＰ６は計算ノードＮ７と接続され、通信ポートＰ７は計算ノードＮ８と接続されている。計算ノードＮ０以外の計算ノード１００においても、各通信ポート１３２は同様に他の計算ノード１００とそれぞれ接続されている。これにより、各計算ノード１００は、他の複数の計算ノード１００へ同時にデータを送信することが可能であり、また、他の複数の計算ノード１００から同時にデータを受信することが可能である。各計算ノード１００が比較的粒度の小さい多数の通信ポート１３２を有し、多数の通信リンク２０を介して他の計算ノード１００と接続されることによって、仮に１つの通信ポート１３２が故障しても他の通信ポート１３２および通信リンク２０を経由して通信を継続することができ、高い可用性が期待できる。
【００３１】
図３は、本発明の一実施形態に係る並列計算システム１０が対象とする並列計算の一例を示す。並列計算システム１０は、行列Ａと行列Ｂの行列積Ｃ＝Ａ×Ｂを計算する処理を実行することができる。しかしながら、並列計算システム１０に適用し得る並列計算は、行列積の計算に限られない。データＡおよびＢは行列でなくてもよい。また、２つのデータ（すなわちＡおよびＢ）を使うのではなく、データを１つだけ（例えばデータＡ）利用する計算や、データを３つ以上利用する計算であってもよい。並列計算システム１０は、少なくとも１つのあるデータ（例えばデータＡ）を小データに分割して複数の計算ノード１００に分散配置し、各計算ノード１００が計算に必要な小データを他の計算ノード１００から入手するように実行可能な、あらゆる種類の並列計算を対象とすることができる。
【００３２】
以下、本発明の実施形態は行列積の計算に関して説明される。計算ノード１００の台数がＮ（＝ｐ×ｑ；ただしｐ、ｑは自然数）のとき、行列Ａ、Ｂはそれぞれ行方向にｐ分割、列方向にｑ分割される。必ずしもｐ＝ｑである必要はないが、ｐ＝ｑの場合に行列ＡとＢの通信回数が一致し、最も効率良く計算が行えるので、以下ではｐ＝ｑ、すなわちＮ＝ｐ２の場合を説明する。行列Ａと行列Ｂに関して行列積Ａ×Ｂを計算できるためには、行列Ａの列数と行列Ｂの行数が等しい必要がある。そこで、行列ＡをＩ行Ｋ列、行列ＢをＫ行Ｊ列とする。このとき、行列ＡをＮ（＝ｐ２）分割した小行列の行数と列数はそれぞれＩ／ｐ、Ｋ／ｐとなり、行列ＢをＮ（＝ｐ２）分割した小行列の行数と列数はそれぞれＫ／ｐ、Ｊ／ｐとなる。したがって、行列Ａの小行列の列数と行列Ｂの小行列の行数が一致するので、行列Ａの小行列と行列Ｂの小行列に関して行列積を計算することができる。例えば、図１の並列計算システム１０の場合には、計算ノード１００の数は９台であるのでＮ＝９、ｐ＝３となり、行列ＡおよびＢはそれぞれ、行方向に３分割、列方向に３分割される。具体的に、図３に示されるように、行列Ａの小行列をａ１１、ａ１２、ａ１３、ａ２１、ａ２２、ａ２３、ａ３１、ａ３２、ａ３３と定義する。同様に、行列Ｂの小行列をｂ１１、ｂ１２、ｂ１３、ｂ２１、ｂ２２、ｂ２３、ｂ３１、ｂ３２、ｂ３３と定義する。行列積Ａ×Ｂを表す行列Ｃについても同様に、小行列をｃ１１、ｃ１２、ｃ１３、ｃ２１、ｃ２２、ｃ２３、ｃ３１、ｃ３２、ｃ３３と定義する。なお、上記の仮定から、行列Ｃの各小行列ｃｉｊの行数と列数はそれぞれＩ／ｐ、Ｊ／ｐである。行列Ｃの各小行列ｃｉｊは次式で計算される。並列計算システム１０の各計算ノード１００は、これら９個の小行列ｃｉｊのうちの１つを計算する処理を担当する。
ｃｉｊ＝Σｋ（ａｉｋ×ｂｋｊ）
（ただし、ｉ＝１，２，３；ｊ＝１，２，３；ｋ＝１，２，３）
【００３３】
はじめに、従来知られている並列計算のアルゴリズムを説明する。図４は、従来の行列積計算アルゴリズムの一つであるＳＵＭＭＡ（Scalable Universal Matrix Multiplication Algorithm）を採用した場合における並列計算システム１０の動作を示すフローチャートである。また図５は、並列計算システム１０の各計算ノード１００がＳＵＭＭＡによる行列計算をどのように進展させていくかを示す概念図である。図５には、３行３列の９個のセルからなるボックスがいくつか示されている。各ボックスにおける３行３列の９個のセルのうち、上段左のセルは計算ノードＮ０を表し、上段中央のセルは計算ノードＮ１を表し、上段右のセルは計算ノードＮ２を表し、中段左のセルは計算ノードＮ３を表し、中段中央のセルは計算ノードＮ４を表し、中段右のセルは計算ノードＮ５を表し、下段左のセルは計算ノードＮ６を表し、下段中央のセルは計算ノードＮ７を表し、下段右のセルは計算ノードＮ８を表している。
【００３４】
まずステップ４０２において、行列Ａの各小行列ａｉｊがそれぞれ対応する計算ノードＮｎ（ただしｎ＝３（ｉ−１）＋ｊ−１）に配置される。具体的には、図５に示されるように、小行列ａ１１が計算ノードＮ０に配置され、小行列ａ１２が計算ノードＮ１に配置され、小行列ａ１３が計算ノードＮ２に配置され、小行列ａ２１が計算ノードＮ３に配置され、小行列ａ２２が計算ノードＮ４に配置され、小行列ａ２３が計算ノードＮ５に配置され、小行列ａ３１が計算ノードＮ６に配置され、小行列ａ３２が計算ノードＮ７に配置され、小行列ａ３３が計算ノードＮ８に配置される。なお、計算ノード１００に配置されるとは、データが計算ノード１００のメモリ１２０のデータ格納領域１２４に格納されることを意味する。
【００３５】
次にステップ４０４において、行列Ｂの各小行列ｂｉｊが、同様にそれぞれ対応する計算ノードＮｎに配置される。
【００３６】
次にステップ４０５において、各計算ノードＮｎは、それぞれのメモリ１２０のデータ格納領域１２４の一部として、小行列ｃｉｊを格納するための領域を確保し、小行列ｃｉｊの全要素を０で初期化する。ここで、小行列ｃｉｊのインデックスｉおよびｊは、それぞれｉ＝ｎ／３＋１、ｊ＝ｎ％３＋１と表される。ただし、ｎ／３はｎを３で割った商の整数部分、ｎ％３はｎを３で割った剰余をそれぞれ意味する。
【００３７】
この時点では、例えば計算ノードＮ０は、行列Ａの小行列ａ１１および行列Ｂの小行列ｂ１１を保持しているだけである。そのため計算ノードＮ０は、行列積Ｃの計算のうちの担当する小行列ｃ１１の計算をまだ行うことができない。他の計算ノード１００についても同様である。ここまでが、以下の繰り返し処理を行う前の準備段階である。以降、ステップ４０６〜４１０、ステップ４１２〜４１６、およびステップ４１８〜４２２の３回の繰り返し処理を行う。
【００３８】
１回目の繰り返し処理では、ステップ４０６において、計算ノードＮ０、Ｎ３、およびＮ６が、それぞれ保有している行列Ａの小行列を、「同じ行内」の他の２つの計算ノード１００へ「Ｂｒｏａｄｃａｓｔ通信」で送信する。「同じ行内」とは、図５に示されるボックスにおいて同一の行に所属することを意味する。例えば、計算ノードＮ０と計算ノードＮ１と計算ノードＮ２は同じ行内に存在する。また「Ｂｒｏａｄｃａｓｔ通信」とは、ある計算ノード１００から他の複数の計算ノード１００へ同一のデータを送る通信である。より具体的に、計算ノードＮ０は小行列ａ１１を計算ノードＮ１および計算ノードＮ２へ送信し、計算ノードＮ３は小行列ａ２１を計算ノードＮ４および計算ノードＮ５へ送信し、計算ノードＮ６は小行列ａ３１を計算ノードＮ７および計算ノードＮ８へ送信する。
【００３９】
次にステップ４０８において、計算ノードＮ０、Ｎ１、およびＮ２が、それぞれ保有している行列Ｂの小行列を、「同じ列内」の他の２つの計算ノード１００へＢｒｏａｄｃａｓｔ通信で送信する。「同じ列内」とは、図５に示されるボックスにおいて同一の列に所属することを意味する。例えば、計算ノードＮ０と計算ノードＮ３と計算ノードＮ６は同じ列内に存在する。より具体的に、計算ノードＮ０は小行列ｂ１１を計算ノードＮ３および計算ノードＮ６へ送信し、計算ノードＮ１は小行列ｂ１２を計算ノードＮ４および計算ノードＮ７へ送信し、計算ノードＮ２は小行列ｂ１３を計算ノードＮ５および計算ノードＮ８へ送信する。
【００４０】
次にステップ４１０において、各計算ノードＮｎは、各々が担当する計算の一部分である２つの小行列同士の行列積ａｉ１×ｂ１ｊを計算する（ただしｉ＝ｎ／３＋１、ｊ＝ｎ％３＋１）。例えば、計算ノードＮ０は、ステップ４０２およびステップ４０４でそれぞれメモリ１２０のデータ格納領域１２４に格納済みの小行列ａ１１と小行列ｂ１１を用いて、行列積ａ１１×ｂ１１を計算する。また、計算ノードＮ１は、ステップ４０４でメモリ１２０のデータ格納領域１２４に格納済みの小行列ｂ１２と、ステップ４０６で計算ノードＮ０から入手した小行列ａ１１とを用いて、行列積ａ１１×ｂ１２を計算する。また、例えば計算ノードＮ４は、ステップ４０６で計算ノードＮ３から入手した小行列ａ２１と、ステップ４０８で計算ノードＮ１から入手した小行列ｂ１２とを用いて、行列積ａ２１×ｂ１２を計算する。他の計算ノード１００については図５を参照されたい。各計算ノードＮｎは、計算で得た行列積ａｉ１×ｂ１ｊの各要素を、要素毎に、それぞれのメモリ１２０のデータ格納領域１２４にある小行列ｃｉｊの各要素に加算する。この結果、各計算ノードＮｎのメモリ１２０のデータ格納領域１２４には、この時点における小行列ｃｉｊの途中経過データとして、ａｉ１×ｂ１ｊのデータが格納される。
【００４１】
２回目の繰り返し処理では、ステップ４１２において、計算ノードＮ１、Ｎ４、およびＮ７が、それぞれ保有している行列Ａの小行列を、同じ行内の他の２つの計算ノード１００へＢｒｏａｄｃａｓｔ通信で送信する。具体的に、計算ノードＮ１は小行列ａ１２を計算ノードＮ０および計算ノードＮ２へ送信し、計算ノードＮ４は小行列ａ２２を計算ノードＮ３および計算ノードＮ５へ送信し、計算ノードＮ７は小行列ａ３２を計算ノードＮ６および計算ノードＮ８へ送信する。
【００４２】
次にステップ４１４において、計算ノードＮ３、Ｎ４、およびＮ５が、それぞれ保有している行列Ｂの小行列を、同じ列内の他の２つの計算ノード１００へＢｒｏａｄｃａｓｔ通信で送信する。具体的に、計算ノードＮ３は小行列ｂ２１を計算ノードＮ０および計算ノードＮ６へ送信し、計算ノードＮ４は小行列ｂ２２を計算ノードＮ１および計算ノードＮ７へ送信し、計算ノードＮ５は小行列ｂ２３を計算ノードＮ２および計算ノードＮ８へ送信する。
【００４３】
次にステップ４１６において、各計算ノードＮｎは、上述のステップ４１０と同様にして、各々が担当する計算の一部分である２つの小行列同士の行列積ａｉ２×ｂ２ｊを計算し、得られた行列積ａｉ２×ｂ２ｊの各要素を、要素毎に、それぞれのメモリ１２０のデータ格納領域１２４にある小行列ｃｉｊの各要素に加算する。説明が煩雑になることを避けるために詳細は省略するが、当業者であれば、上述したステップ４１０における説明および図５の記載から、ステップ４１６の計算の具体的内容は容易に理解可能であろう。ステップ４１６の結果、各計算ノードＮｎのメモリ１２０のデータ格納領域１２４には、この時点における小行列ｃｉｊの途中経過データとして、ａｉ１×ｂ１ｊ＋ａｉ２×ｂ２ｊのデータが格納される。
【００４４】
３回目の繰り返し処理では、ステップ４１８において、計算ノードＮ２、Ｎ５、およびＮ８が、それぞれ保有している行列Ａの小行列を、同じ行内の他の２つの計算ノード１００へＢｒｏａｄｃａｓｔ通信で送信する。具体的に、計算ノードＮ２は小行列ａ１３を計算ノードＮ０および計算ノードＮ１へ送信し、計算ノードＮ５は小行列ａ２３を計算ノードＮ３および計算ノードＮ４へ送信し、計算ノードＮ８は小行列ａ３３を計算ノードＮ６および計算ノードＮ７へ送信する。
【００４５】
次にステップ４２０において、計算ノードＮ６、Ｎ７、およびＮ８が、それぞれ保有している行列Ｂの小行列を、同じ列内の他の２つの計算ノード１００へＢｒｏａｄｃａｓｔ通信で送信する。具体的に、計算ノードＮ６は小行列ｂ３１を計算ノードＮ０および計算ノードＮ３へ送信し、計算ノードＮ７は小行列ｂ３２を計算ノードＮ１および計算ノードＮ４へ送信し、計算ノードＮ８は小行列ｂ３３を計算ノードＮ２および計算ノードＮ５へ送信する。
【００４６】
次にステップ４２２において、各計算ノードＮｎは、上述のステップ４１０およびステップ４１６と同様にして、各々が担当する計算の一部分である２つの小行列同士の行列積ａｉ３×ｂ３ｊを計算し、得られた行列積ａｉ３×ｂ３ｊの各要素を、要素毎に、それぞれのメモリ１２０のデータ格納領域１２４にある小行列ｃｉｊの各要素に加算する。計算の具体的内容は、ステップ４１０における説明および図５の記載を参照されたい。ステップ４２２の結果、各計算ノードＮｎのメモリ１２０のデータ格納領域１２４には、最終的な小行列ｃｉｊのデータとして、ａｉ１×ｂ１ｊ＋ａｉ２×ｂ２ｊ＋ａｉ３×ｂ３ｊのデータが格納される。
【００４７】
以上により、各計算ノード１００は、行列積Ａ×Ｂを表す行列Ｃの一部分であり自分が計算を担当する小行列ｃｉｊについての計算結果を得る。
【００４８】
図６は、上述した従来のアルゴリズムのステップ４０６、４０８、４１２、４１４、４１８、および４２０の各々において、小行列が計算ノード１００間でどのようにルーティングされたかを表形式で視覚的に示す。送信側の各計算ノード１００が表の縦方向に示され、受信側の各計算ノード１００が表の横方向に示されている。「１１」等の数字が記載されたセルは、そのセルに対応する送信側の計算ノード１００と受信側の計算ノード１００の間で小行列が転送されたこと、つまり当該２つの計算ノード１００間の通信リンク２０が使用されたことを表す。また空欄のセルは、そのセルに対応する送信側の計算ノード１００と受信側の計算ノード１００の間で小行列の転送が行われていないこと、つまり当該２つの計算ノード１００間の通信リンク２０は未使用であることを表す。数字「ｉｊ」は、小行列ａｉｊまたはｂｉｊを表す。
【００４９】
例えば、図６のステップ４０６と示された表において、最上段の左から２番目のセルに記載された数字「１１」は、送信側の計算ノードＮ０と受信側の計算ノードＮ１の間の通信リンク２０を使って小行列ａ１１が転送されたことを表し、上から４段目で左から５番目のセルに記載された数字「２１」は、送信側の計算ノードＮ３と受信側の計算ノードＮ４の間の通信リンク２０を使って小行列ａ２１が転送されたことを表している。これらの小行列の転送についてはステップ４０６に関して上述したとおりである。図６の各表に記載された他の任意の数字「ｉｊ」も同様に理解される。
【００５０】
図６に示されるように、上述した従来のアルゴリズムでは、並列計算システム１０の９台の計算ノード１００を相互に接続する全部で７２（＝９×８）本の通信リンク２０のうち、各ステップ４０６、４０８、４１２、４１４、４１８、４２０のそれぞれにおいて同時に使用される通信リンク２０は１２本のみである。各ステップにおいて残りの６０本の通信リンク２０は未使用となっている。したがって、並列計算システム１０の全体の通信帯域が有効活用されていない。そこで、以下に説明する本発明の実施形態では、並列計算システム１０の通信帯域の利用効率を上げることで並列計算の高速化を可能にする。
【００５１】
なお、上記の説明では、行列を３×３＝９個の小行列に分割して、９台の計算ノード１００に分散配置する例を示した。しかしながら、行列の分割数および計算ノード１００の台数はこの例に限られない。一般化すると、行列をｐ×ｐ＝ｐ２個（ｐは２以上の整数）の小行列に分割して、ｐ２台の計算ノードＮｎ（ただしｎ＝０，１，…，ｐ２−１）に分散配置することができる。図４のフローチャートに示す動作の場合には、ステップ４０６〜４１０、ステップ４１２〜４１６、およびステップ４１８〜４２２の３回の繰り返し処理が行われたが、行列の分割数がｐ２個の一般化した動作においては、同様の繰り返し処理が合計ｐ回行われる。
【００５２】
ｐ回の繰り返し処理のうちのｍ番目（ｍ＝１，２，…，ｐ）の繰り返し処理は次のように行われる。すなわち、まず計算ノードＮｎ（ただしｎ＝ｉ×ｐ＋ｍ−１、ｉ＝０，１，…，ｐ−１）は、図４のフローチャートのステップ４０６に対応する動作として、それぞれ保有している行列Ａの小行列ａｉｍ（ただしｉ＝ｎ／３＋１）を同じ行内の他の計算ノード１００へＢｒｏａｄｃａｓｔ通信で送信する。次に計算ノードＮｎ（ただしｎ＝ｐ×（ｍ−１）＋ｊ、ｊ＝０，１，…，ｐ−１）は、図４のフローチャートのステップ４０８に対応する動作として、それぞれ保有している行列Ｂの小行列ｂｍｊ（ただしｊ＝ｎ％３＋１）を同じ列内の他の計算ノード１００へＢｒｏａｄｃａｓｔ通信で送信する。そして、各計算ノードＮｎ（ただしｎ＝０，１，…，ｐ２−１）は、図４のフローチャートのステップ４１０に対応する動作として、行列積ａｉｍ×ｂｍｊを計算してメモリ１２０内の小行列ｃｉｊに加算する。このように、ｐ回の繰り返し処理の各々において２回のＢｒｏａｄｃａｓｔ通信が行われ、総通信回数は２×ｐ回である。
【００５３】
＜第１実施形態＞
図７は、本発明の第１実施形態に係る並列計算システム１０の動作を示すフローチャートである。また図８は、本発明の第１実施形態において、計算ノード１００間で小行列がどのようにルーティングされるかを表形式で視覚的に示す図であり、従来例における前述の図６に相当する。
【００５４】
まずステップ７０２において、行列Ａの各小行列ａｉｊおよび行列Ｂの各小行列ｂｉｊがそれぞれ対応する計算ノード１００に配置される。このステップは、前述した従来例のステップ４０２および４０４と同じものである。
【００５５】
次にステップ７０３において、各計算ノード１００は、従来例のステップ４０５と同様に、それぞれのメモリ１２０のデータ格納領域１２４の一部として、小行列ｃｉｊを格納するための領域を確保し、小行列ｃｉｊの全要素を０で初期化する。
【００５６】
次にステップ７０４において、計算ノードＮ０、Ｎ３、およびＮ６が、それぞれ保有している行列Ａの小行列を「Ｓｃａｔｔｅｒ通信」ですべての計算ノード１００へ送信する。「Ｓｃａｔｔｅｒ通信」とは、ある計算ノード１００の保有しているデータを小データに細分化し、その各々の小データをそれぞれに対応する計算ノード１００へ送ることで、元のデータの異なる部分を別々の計算ノード１００に分配する通信である。
【００５７】
具体的に、例えば計算ノードＮ０は、小行列ａ１１を９個の小データａ１１０、ａ１１１、ａ１１２、ａ１１３、ａ１１４、ａ１１５、ａ１１６、ａ１１７、およびａ１１８に分割し、小データａ１１１を計算ノードＮ１へ、小データａ１１２を計算ノードＮ２へ、小データａ１１３を計算ノードＮ３へ、小データａ１１４を計算ノードＮ４へ、小データａ１１５を計算ノードＮ５へ、小データａ１１６を計算ノードＮ６へ、小データａ１１７を計算ノードＮ７へ、小データａ１１８を計算ノードＮ８へ、それぞれ送信する。また計算ノードＮ３は、小行列ａ２１を同様に９個の小データに分割し、各小データをそれぞれ他の計算ノード１００へ送信する。計算ノードＮ６についても同様である。図８のステップ７０４と示された表には、これらの小データの転送が、数字「ｉｊｋ」によって示されている。図８において、数字「ｉｊｋ」は、小行列ａｉｊまたはｂｉｊを分割したｋ番目（ｋ＝０，１，…，８）の小データを表す。
【００５８】
次にステップ７０６において、計算ノードＮ１、Ｎ２、Ｎ４、Ｎ５、Ｎ７、およびＮ８が、上記ステップ７０４で各計算ノード１００に分配された小データを「Ａｌｌｇａｔｈｅｒ通信」で回収し、それら回収された小データからそれぞれ行列Ａの小行列を再構成する。「Ａｌｌｇａｔｈｅｒ通信」とは、複数の計算ノード１００に分散しているデータを１つの計算ノード１００に集めて結合する処理を、並列で複数実行するものである。
【００５９】
具体的に、例えば計算ノードＮ１は、小データａ１１０、ａ１１１、ａ１１２、ａ１１３、ａ１１４、ａ１１５、ａ１１６、ａ１１７、およびａ１１８をそれぞれ計算ノードＮ０、Ｎ１、Ｎ２、Ｎ３、Ｎ４、Ｎ５、Ｎ６、Ｎ７、Ｎ８から取得し、これら各小データを用いて行列Ａの小行列ａ１１を再構成する。この各計算ノード１００から計算ノードＮ１への各小データの転送が、図８のステップ７０６と示された表の左から２列目に示されている。同様に、計算ノードＮ２は小行列ａ１１を再構成し、計算ノードＮ４およびＮ５は小行列ａ２１を再構成し、計算ノードＮ７およびＮ８は小行列ａ３１を再構成する。
【００６０】
このようにステップ７０４および７０６が実施されることにより、前述した従来のアルゴリズムにおけるステップ４０６が実施された場合と同様に、計算ノードＮ０、Ｎ１、およびＮ２は行列Ａの小行列ａ１１を保持し、計算ノードＮ３、Ｎ４、およびＮ５は行列Ａの小行列ａ２１を保持し、計算ノードＮ６、Ｎ７、およびＮ８は行列Ａの小行列ａ３１を保持した状態となる。従来のアルゴリズムにおけるステップ４０６と本実施形態におけるステップ７０４および７０６を比較すると、本実施形態では通信ステップの数が２倍に増えているものの、使用される通信リンク２０の数は９倍になり、また各通信リンク２０を伝送されるデータサイズは１／９となっており、その結果、小行列を転送するのにかかる通信時間は２／９倍に短縮されることに注目されたい。
【００６１】
次にステップ７０８において、計算ノードＮ０、Ｎ１、およびＮ２が、それぞれ保有している行列Ｂの小行列をＳｃａｔｔｅｒ通信ですべての計算ノード１００へ送信する。具体的に、図８のステップ７０８の表に示されるように、計算ノードＮ０は、小行列ｂ１１を９個の小データに分割し、小データｂ１１１、ｂ１１２、ｂ１１３、ｂ１１４、ｂ１１５、ｂ１１６、ｂ１１７、およびｂ１１８をそれぞれ計算ノードＮ１、Ｎ２、Ｎ３、Ｎ４、Ｎ５、Ｎ６、Ｎ７、Ｎ８へ送信する。同様に、計算ノードＮ１は小行列ｂ１２を分割した小データを各計算ノード１００へ送信し、計算ノードＮ２は小行列ｂ１３を分割した小データを各計算ノード１００へ送信する。
【００６２】
次にステップ７１０において、計算ノードＮ３、Ｎ４、Ｎ５、Ｎ６、Ｎ７、およびＮ８が、上記ステップ７０８で各計算ノード１００に分配された小データをＡｌｌｇａｔｈｅｒ通信で回収し、それら回収された小データからそれぞれ行列Ｂの小行列を再構成する。具体的に、例えば計算ノードＮ３は、小データｂ１１０、ｂ１１１、ｂ１１２、ｂ１１３、ｂ１１４、ｂ１１５、ｂ１１６、ｂ１１７、およびｂ１１８をそれぞれ計算ノードＮ０、Ｎ１、Ｎ２、Ｎ３、Ｎ４、Ｎ５、Ｎ６、Ｎ７、Ｎ８から取得し、これら各小データを用いて行列Ｂの小行列ｂ１１を再構成する。この各計算ノード１００から計算ノードＮ３への各小データの転送が、図８のステップ７１０と示された表の左から４列目に示されている。同様に、計算ノードＮ６は小行列ｂ１１を再構成し、計算ノードＮ４およびＮ７は小行列ｂ１２を再構成し、計算ノードＮ５およびＮ８は小行列ｂ１３を再構成する。
【００６３】
このようにステップ７０８および７１０が実施されることにより、前述した従来のアルゴリズムにおけるステップ４０８が実施された場合と同様に、計算ノードＮ０、Ｎ３、およびＮ６は行列Ｂの小行列ｂ１１を保持し、計算ノードＮ１、Ｎ４、およびＮ７は行列Ｂの小行列ｂ１２を保持し、計算ノードＮ２、Ｎ５、およびＮ８は行列Ｂの小行列ｂ１３を保持した状態となる。従来のアルゴリズムにおけるステップ４０８と本実施形態におけるステップ７０８および７１０を比較すると、上述のステップ７０４および７０６と同様に、本実施形態では通信ステップの数が２倍に増えているものの、使用される通信リンク２０の数は９倍になり、また各通信リンク２０を伝送されるデータサイズは１／９となっており、その結果、小行列を転送するのにかかる通信時間は２／９倍に短縮される。
【００６４】
次にステップ７１２において、各計算ノード１００は、各々が担当する計算の一部分である２つの小行列同士の行列積ａｉ１×ｂ１ｊを計算し、得られた行列積の各要素を、要素毎に、それぞれのメモリ１２０のデータ格納領域１２４にある小行列ｃｉｊの各要素に加算する。このステップは、前述した従来のアルゴリズムのステップ４１０に対応するものである。なお、例えば計算ノードＮ１は、当該行列積の計算に必要な小行列ａ１１を、ステップ７０４のＳｃａｔｔｅｒ通信およびステップ７０６のＡｌｌｇａｔｈｅｒ通信によって取得している。また、例えば計算ノードＮ４は、当該行列積の計算に必要な小行列ａ２１をステップ７０４のＳｃａｔｔｅｒ通信およびステップ７０６のＡｌｌｇａｔｈｅｒ通信によって取得し、小行列ｂ１２をステップ７０８のＳｃａｔｔｅｒ通信およびステップ７１０のＡｌｌｇａｔｈｅｒ通信によって取得している。他の計算ノード１００も同様に、計算に必要な小行列を、Ｓｃａｔｔｅｒ通信とＡｌｌｇａｔｈｅｒ通信を順に行うことによって取得している。このように、各小行列ａｉｊおよびｂｉｊは、送信元の計算ノード１００から送信先の計算ノード１００へ直接転送されるのではなく、各小行列ａｉｊおよびｂｉｊが分割された小データがＳｃａｔｔｅｒ通信およびＡｌｌｇａｔｈｅｒ通信の２ステップ通信で他の計算ノード１００に中継されることによって、送信元の計算ノード１００から送信先の計算ノード１００へ転送される。
【００６５】
次に、上述のステップ７０４〜７１２と同様にして、ステップ７１４〜７２２が行われる。ステップ７１４および７１６は、ステップ７０４および７０６と同様のＳｃａｔｔｅｒ通信とＡｌｌｇａｔｈｅｒ通信により、行列Ａの小行列ａ１２を計算ノードＮ０およびＮ２に配送し、小行列ａ２２を計算ノードＮ３およびＮ５に配送し、小行列ａ３２を計算ノードＮ６およびＮ８に配送する処理である。また、ステップ７１８および７２０は、ステップ７０８および７１０と同様のＳｃａｔｔｅｒ通信とＡｌｌｇａｔｈｅｒ通信により、行列Ｂの小行列ｂ２１を計算ノードＮ０およびＮ６に配送し、小行列ｂ２２を計算ノードＮ１およびＮ７に配送し、小行列ｂ２３を計算ノードＮ２およびＮ８に配送する処理である。図８の各ステップに対応する表に、これらの処理がそれぞれ示されている。ステップ７２２は、各計算ノード１００が小行列の行列積ａｉ２×ｂ２ｊを計算してメモリ１２０に加算する処理であり、これは従来のアルゴリズムにおけるステップ４１６に対応している。ステップ７２２の結果、各計算ノード１００のメモリ１２０のデータ格納領域１２４には、この時点における小行列ｃｉｊの途中経過データとして、ａｉ１×ｂ１ｊ＋ａｉ２×ｂ２ｊのデータが格納される。
【００６６】
次に、上述のステップ７０４〜７１２およびステップ７１４〜７２２と同様にして、ステップ７２４〜７３２が行われる。ステップ７２４および７２６は、上記と同様のＳｃａｔｔｅｒ通信およびＡｌｌｇａｔｈｅｒ通信により、行列Ａの小行列ａ１３を計算ノードＮ０およびＮ１に配送し、小行列ａ２３を計算ノードＮ３およびＮ４に配送し、小行列ａ３３を計算ノードＮ６およびＮ７に配送する処理である。また、ステップ７２８および７３０は、上記と同様のＳｃａｔｔｅｒ通信およびＡｌｌｇａｔｈｅｒ通信により、行列Ｂの小行列ｂ３１を計算ノードＮ０およびＮ３に配送し、小行列ｂ３２を計算ノードＮ１およびＮ４に配送し、小行列ｂ３３を計算ノードＮ２およびＮ５に配送する処理である。図８の各ステップに対応する表に、これらの処理がそれぞれ示されている。ステップ７３２は、各計算ノード１００が小行列の行列積ａｉ３×ｂ３ｊを計算してメモリ１２０に加算する処理であり、これは従来のアルゴリズムにおけるステップ４２２に対応している。ステップ７３２の結果、各計算ノード１００のメモリ１２０のデータ格納領域１２４には、最終的な小行列ｃｉｊのデータとして、ａｉ１×ｂ１ｊ＋ａｉ２×ｂ２ｊ＋ａｉ３×ｂ３ｊのデータが格納される。
【００６７】
以上により、各計算ノード１００は最終的に、行列積Ａ×Ｂを表す行列Ｃの一部分であり自分が計算を担当する小行列ｃｉｊについての計算結果を得る。
【００６８】
ここで、本発明の第１実施形態に係る上記の並列計算方法が、前述した従来のアルゴリズムを用いた並列計算方法に比べてどのくらい高速化されているかを評価する。両者において、各計算ノード１００の計算能力および各通信リンク２０の通信帯域に違いはないものとする。また、並列計算システム１０を構成する計算ノード１００の数をＮとし（上述したとおり図１ではＮ＝９）、各小行列ａｉｊおよびｂｉｊのデータ長を、すべて同じ規格化した値「１」とする。
【００６９】
従来のアルゴリズムの場合、ステップ４０６、４０８、４１２、４１４、４１８、および４２０でＢｒｏａｄｃａｓｔ通信が行われ、全体の通信回数（Ｍと記す）は２√Ｎである。また、各回の通信（すなわち各ステップ）では小行列ａｉｊまたはｂｉｊが転送されるので、１回当りの通信で転送されるデータ長（Ｓと記す）は１である。よって、全体の相対的な通信時間Ｔ（＝ＭＳ）は２√Ｎとなる。例えばＮ＝６４とすると、Ｔ＝１６である。
【００７０】
本発明の第１実施形態に係る並列計算方法の場合には、ステップ７０４、７０８、７１４、７１８、７２４、および７２８でＳｃａｔｔｅｒ通信が行われ、ステップ７０６、７１０、７１６、７２０、７２６、および７３０でＡｌｌｇａｔｈｅｒ通信が行われ、全体の通信回数は４√Ｎである。また、各回の通信では小行列ａｉｊまたはｂｉｊを計算ノード１００の数に分割した小データが転送されるので、１回当りの通信で転送されるデータ長は１／Ｎである。よって、全体の相対的な通信時間はＴ＝４／√Ｎとなる。例えばＮ＝６４とすると、Ｔ＝０．５である。
【００７１】
このように、本発明の第１実施形態に係る並列計算方法を用いた場合における相対通信時間は、従来のアルゴリズムを用いた場合の２／Ｎとなり、相対的な理論性能（すなわち１／Ｔ）はＮ／２倍に高速化される。Ｎ＝６４とすると、本発明の第１実施形態に係る並列計算方法は、従来のアルゴリズムに対して３２倍の高速化処理が可能である。
【００７２】
＜第２実施形態＞
図９は、本発明の第２実施形態に係る並列計算システム１０の動作を示すフローチャートである。また図１０は、本発明の第２実施形態において、計算ノード１００間で小行列がどのようにルーティングされるかを表形式で視覚的に示す図であり、第１実施形態の図８に相当する。
【００７３】
本発明の第２実施形態と第１実施形態との違いは、第２実施形態では、第１実施形態における３つのＳｃａｔｔｅｒ通信を１つの「Ａｌｌｔｏａｌｌ通信」に集約している点にある。すなわち、第１実施形態のステップ７０４、７１４、および７２４におけるＳｃａｔｔｅｒ通信は、第２実施形態のステップ９０４におけるＡｌｌｔｏａｌｌ通信として集約され、また第１実施形態のステップ７０８、７１８、および７２８におけるＳｃａｔｔｅｒ通信は、第２実施形態のステップ９０６におけるＡｌｌｔｏａｌｌ通信として集約されている。なお、図９のフローチャートにおいて、ステップ９０４および９０６以外のステップは、第１実施形態の図７のフローチャートにおける対応する各ステップと同じものである。具体的に、第２実施形態のステップ９０２、９０３、９０８、９１０、９１２、９１４、９１６、９１８、９２０、９２２、および９２４は、それぞれ第１実施形態のステップ７０２、７０３、７０６、７１０、７１２、７１６、７２０、７２２、７２６、７３０、７３２に対応している。以下、ステップ９０４および９０６について説明する。
【００７４】
ステップ９０４では、すべての計算ノード１００が、それぞれ保有している行列Ａの小行列ａｉｊを「Ａｌｌｔｏａｌｌ通信」ですべての計算ノード１００へ送信する。「Ａｌｌｔｏａｌｌ通信」とは、ある計算ノード１００の保有しているデータを小データに細分化し、その各々の小データをそれぞれに対応する計算ノード１００へ送る処理を、すべての計算ノード１００が並列で実行するものである。これにより、すべての小行列ａｉｊの細分化された異なる部分が、一斉に別々の計算ノード１００に分配される。
【００７５】
具体的に、例えば計算ノードＮ０は、小行列ａ１１を９個の小データに分割し、小データａ１１１、ａ１１２、ａ１１３、ａ１１４、ａ１１５、ａ１１６、ａ１１７、およびａ１１８をそれぞれ計算ノードＮ１、Ｎ２、Ｎ３、Ｎ４、Ｎ５、Ｎ６、Ｎ７、Ｎ８へ送信する。この計算ノードＮ０から各計算ノード１００への各小データの転送は、図１０のステップ９０４と示された表の最上段に示されている。また、例えば計算ノードＮ４は、小行列ａ２２を９個の小データに分割し、小データａ２２０、ａ２２１、ａ２２２、ａ２２３、ａ２２５、ａ２２６、ａ２２７、およびａ２２８をそれぞれ計算ノードＮ０、Ｎ１、Ｎ２、Ｎ３、Ｎ５、Ｎ６、Ｎ７、Ｎ８へ送信する。この計算ノードＮ４から各計算ノード１００への各小データの転送は、図１０のステップ９０４の表の上から５段目に示されている。他の計算ノード１００についても同様であり、その具体的内容は図１０のステップ９０４の表の各段の記載から容易に理解される。
【００７６】
図１０のルーティング表から明らかなように、ステップ９０４のＡｌｌｔｏａｌｌ通信では、並列計算システム１０のすべての通信リンク２０が使用されており、並列計算システム１０の通信帯域を最大限に利用した無駄のないデータ転送が実現していることに注目されたい。
【００７７】
同様に、ステップ９０６では、すべての計算ノード１００が、それぞれ保有している行列Ｂの小行列ｂｉｊをＡｌｌｔｏａｌｌ通信ですべての計算ノード１００へ送信する。その具体的内容は、図１０のステップ９０６の表に示されており、上記のステップ９０４についての説明も参照することで容易に理解される。ここでも、Ａｌｌｔｏａｌｌ通信によって並列計算システム１０のすべての通信リンク２０が無駄なく活用されている。
【００７８】
このようにして、各小行列ａｉｊおよびｂｉｊは、各小行列ａｉｊおよびｂｉｊの小データがＡｌｌｔｏａｌｌ通信およびＡｌｌｇａｔｈｅｒ通信の２ステップ通信で他の計算ノード１００に中継されることによって、送信元の計算ノード１００から送信先の計算ノード１００へ転送される。
【００７９】
本発明の第２実施形態に係る並列計算方法では、上記のようにステップ９０４および９０６でＡｌｌｔｏａｌｌ通信が行われ、ステップ９０８、９１０、９１４、９１６、９２０、および９２２でＡｌｌｇａｔｈｅｒ通信が行われ、全体の通信回数は２＋２√Ｎである。また、各回の通信では、第１実施形態と同様に、小行列ａｉｊまたはｂｉｊを計算ノード１００の数に分割した小データが転送されるので、１回当りの通信で転送されるデータ長は１／Ｎである。よって、全体の相対的な通信時間はＴ＝（２＋２√Ｎ）／Ｎとなる。例えばＮ＝６４とすると、Ｔ＝０．２８である。
【００８０】
したがって、本発明の第２実施形態に係る並列計算方法を用いた場合における相対通信時間は、従来のアルゴリズムを用いた場合の（１＋√Ｎ）／（Ｎ√Ｎ）となり、相対的な理論性能は（Ｎ√Ｎ）／（１＋√Ｎ）倍に高速化される。Ｎ＝６４とすると、本発明の第２実施形態に係る並列計算方法は、従来のアルゴリズムに対して５７倍の高速化処理が可能である。
【００８１】
＜第３実施形態＞
図１１は、本発明の第３実施形態に係る並列計算システム１０の動作を示すフローチャートである。また図１２は、本発明の第３実施形態において、計算ノード１００間で小行列がどのようにルーティングされるかを表形式で視覚的に示す図である。
【００８２】
本発明の第３実施形態は、上述した第２実施形態における小データの転送をさらに効率化し改良したものである。第２実施形態のステップ９０８、９１０、９１４、９１６、９２０、および９２２におけるＡｌｌｇａｔｈｅｒ通信は、並列計算システム１０の通信帯域をすべて使い尽くしているわけではない。例えば、図１０におけるステップ９０８の表の最左列、左から４番目の列、および左から７番目の列が空欄のセルとして示されていることから理解されるように、ステップ９０８の処理では、Ａｌｌｇａｔｈｅｒ通信と並行して、さらに追加のデータをすべての計算ノード１００から計算ノードＮ０、Ｎ３、およびＮ６へ送信することが可能である。
【００８３】
したがって、本発明の第３実施形態と第２実施形態との違いは、第３実施形態では、第２実施形態における３つのＡｌｌｇａｔｈｅｒ通信を、上記「空欄のセル」を利用することで２つのＡｌｌｔｏａｌｌｖ通信に集約している点にある。
【００８４】
具体的に、第３実施形態のステップ１１０８のＡｌｌｔｏａｌｌｖ通信は、第２実施形態におけるステップ９２０のＡｌｌｇａｔｈｅｒ通信のうち計算ノードＮ０、Ｎ３、およびＮ６が他の各計算ノード１００からそれぞれ小行列ａ１３の各小データａ１３ｋ、小行列ａ２３の各小データａ２３ｋ、小行列ａ３３の各小データａ３３ｋを取得する処理を、第２実施形態のステップ９０８におけるＡｌｌｇａｔｈｅｒ通信の空欄セルに組み込んだものである。これは、図１２におけるステップ１１０８の表に点線の枠囲みで示されている。同様に、第３実施形態のステップ１１１４のＡｌｌｔｏａｌｌｖ通信は、第２実施形態におけるステップ９２０のＡｌｌｇａｔｈｅｒ通信のうち計算ノードＮ１、Ｎ４、およびＮ７が他の各計算ノード１００からそれぞれ小行列ａ１３の各小データａ１３ｋ、小行列ａ２３の各小データａ２３ｋ、小行列ａ３３の各小データａ３３ｋを取得する処理を、第２実施形態のステップ９１４におけるＡｌｌｇａｔｈｅｒ通信の空欄セルに組み込んだものである。これは、図１２におけるステップ１１１４の表に点線の枠囲みで示されている。
【００８５】
このようなステップ１１０８のＡｌｌｔｏａｌｌｖ通信によって、計算ノードＮ０は小行列ａ１３を取得し、計算ノードＮ１およびＮ２は小行列ａ１１を取得し、計算ノードＮ３は小行列ａ２３を取得し、計算ノードＮ４およびＮ５は小行列ａ２１を取得し、計算ノードＮ６は小行列ａ３３を取得し、計算ノードＮ７およびＮ８は小行列ａ３１を取得する。また、ステップ１１１４のＡｌｌｔｏａｌｌｖ通信によって、計算ノードＮ１は小行列ａ１３を取得し、計算ノードＮ０およびＮ２は小行列ａ１２を取得し、計算ノードＮ４は小行列ａ２３を取得し、計算ノードＮ３およびＮ５は小行列ａ２２を取得し、計算ノードＮ７は小行列ａ３３を取得し、計算ノードＮ６およびＮ８は小行列ａ３２を取得する。
【００８６】
また、第３実施形態のステップ１１１０のＡｌｌｔｏａｌｌｖ通信は、第２実施形態におけるステップ９２２のＡｌｌｇａｔｈｅｒ通信のうち計算ノードＮ０、Ｎ１、およびＮ２が他の各計算ノード１００からそれぞれ小行列ｂ３１の各小データｂ３１ｋ、小行列ｂ３２の各小データｂ３２ｋ、小行列ｂ３３の各小データｂ３３ｋを取得する処理を、第２実施形態のステップ９１０におけるＡｌｌｇａｔｈｅｒ通信の空欄セルに組み込んだものである。これは、図１２におけるステップ１１１０の表に点線の枠囲みで示されている。さらに、第３実施形態のステップ１１１６のＡｌｌｔｏａｌｌｖ通信は、第２実施形態におけるステップ９２２のＡｌｌｇａｔｈｅｒ通信のうち計算ノードＮ３、Ｎ４、およびＮ５が他の各計算ノード１００からそれぞれ小行列ｂ３１の各小データｂ３１ｋ、小行列ｂ３２の各小データｂ３２ｋ、小行列ｂ３３の各小データｂ３３ｋを取得する処理を、第２実施形態のステップ９１６におけるＡｌｌｇａｔｈｅｒ通信の空欄セルに組み込んだものである。これは、図１２におけるステップ１１１６の表に点線の枠囲みで示されている。
【００８７】
このようなステップ１１１０のＡｌｌｔｏａｌｌｖ通信によって、計算ノードＮ０は小行列ｂ３１を取得し、計算ノードＮ１は小行列ｂ３２を取得し、計算ノードＮ２は小行列ｂ３３を取得し、計算ノードＮ３およびＮ６は小行列ｂ１１を取得し、計算ノードＮ４およびＮ７は小行列ｂ１２を取得し、計算ノードＮ５およびＮ８は小行列ｂ１３を取得する。また、ステップ１１１６のＡｌｌｔｏａｌｌｖ通信によって、計算ノードＮ３は小行列ｂ３１を取得し、計算ノードＮ４は小行列ｂ３２を取得し、計算ノードＮ５は小行列ｂ３３を取得し、計算ノードＮ０およびＮ６は小行列ｂ２１を取得し、計算ノードＮ１およびＮ７は小行列ｂ２２を取得し、計算ノードＮ２およびＮ８は小行列ｂ２３を取得する。
【００８８】
なお、図１１のフローチャートにおいて、ステップ１１０２、１１０３、１１０４、１１０６、１１１２、１１１８、１１２０は、それぞれ第２実施形態のステップ９０２、９０３、９０４、９０６、９１２、９１８、９２４と同じものである。
【００８９】
図１２のルーティング表から明らかなように、第３実施形態では、ステップ１１０４〜１１１０、１１１４、および１１１６のいずれにおいても、Ａｌｌｔｏａｌｌ通信またはＡｌｌｔｏａｌｌｖ通信が行われることによって並列計算システム１０のすべての通信リンク２０が無駄なく活用されている。
【００９０】
このようにして、各小行列ａｉｊおよびｂｉｊは、各小行列ａｉｊおよびｂｉｊの小データがＡｌｌｔｏａｌｌ通信およびＡｌｌｔｏａｌｌｖ通信の２ステップ通信で他の計算ノード１００に中継されることによって、送信元の計算ノード１００から送信先の計算ノード１００へ転送される。
【００９１】
このように、本発明の第３実施形態に係る並列計算方法においては、ステップ１１０４および１１０６でＡｌｌｔｏａｌｌ通信が行われ、ステップ１１０８、１１１０、１１１４、および１１１６でＡｌｌｔｏａｌｌｖ通信が行われ、全体の通信回数は２√Ｎである。また、各回の通信では、第１および第２実施形態と同様に、小行列ａｉｊまたはｂｉｊを計算ノード１００の数に分割した小データが転送されるので、１回当りの通信で転送されるデータ長は１／Ｎである。よって、全体の相対的な通信時間はＴ＝２／√Ｎとなる。例えばＮ＝６４とすると、Ｔ＝０．２５である。
【００９２】
したがって、本発明の第３実施形態に係る並列計算方法を用いた場合における相対通信時間は、従来のアルゴリズムを用いた場合の１／Ｎとなり、相対的な理論性能はＮ倍に高速化される。
【００９３】
＜第４実施形態＞
図１３は、本発明の第４実施形態に係る並列計算システム１０の動作を示すフローチャートである。また図１４は、本発明の第４実施形態における、各計算ノード１００へのデータの初期配置と計算ノード１００間でのデータのルーティングを表形式で視覚的に示す図である。
【００９４】
本発明の第４実施形態は、上述した第２実施形態のステップ９０４（または第３実施形態のステップ１１０４）で行列Ａの小行列ａｉｊをＡｌｌｔｏａｌｌ通信で各計算ノード１００に分配し、また第２実施形態のステップ９０６（または第３実施形態のステップ１１０６）で行列Ｂの小行列ｂｉｊをＡｌｌｔｏａｌｌ通信で各計算ノード１００に分配したのと同じ状態となるように、あらかじめ小行列ａｉｊおよびｂｉｊの小データを各計算ノード１００に分散して配置しておく点が、前述の各実施形態と異なる。
【００９５】
まずステップ１３０２において、行列Ａの各小行列ａｉｊがそれぞれ複数の小データに分割され、分割された小データがそれぞれに対応する計算ノード１００に分散して配置される。具体的には、図１４のステップ１３０２の表に示されるように、小行列ａ１１を分割した各小データａ１１０、ａ１１１、ａ１１２、ａ１１３、ａ１１４、ａ１１５、ａ１１６、ａ１１７、およびａ１１８が、それぞれ計算ノードＮ０、Ｎ１、Ｎ２、Ｎ３、Ｎ４、Ｎ５、Ｎ６、Ｎ７、Ｎ８に配置される。同様に、小行列ａ１２を分割した各小データａ１２０、ａ１２１、ａ１２２、ａ１２３、ａ１２４、ａ１２５、ａ１２６、ａ１２７、およびａ１２８が、それぞれ計算ノードＮ０、Ｎ１、Ｎ２、Ｎ３、Ｎ４、Ｎ５、Ｎ６、Ｎ７、Ｎ８に配置される。他の小行列ａｉｊの小データも同様に各計算ノード１００に配置される。
【００９６】
上記のような初期配置の結果、例えば計算ノードＮ０は、小行列ａ１１の小データａ１１０と、小行列ａ１２の小データａ１２０と、小行列ａ１３の小データａ１３０と、小行列ａ２１の小データａ２１０と、小行列ａ２２の小データａ２２０と、小行列ａ２３の小データａ２３０と、小行列ａ３１の小データａ３１０と、小行列ａ３２の小データａ３２０と、小行列ａ３３の小データａ３３０とを保持する。また同様に、計算ノードＮ１は、小行列ａ１１の小データａ１１１と、小行列ａ１２の小データａ１２１と、小行列ａ１３の小データａ１３１と、小行列ａ２１の小データａ２１１と、小行列ａ２２の小データａ２２１と、小行列ａ２３の小データａ２３１と、小行列ａ３１の小データａ３１１と、小行列ａ３２の小データａ３２１と、小行列ａ３３の小データａ３３１とを保持する。他の計算ノード１００についても同様である。
【００９７】
次にステップ１３０４において、ステップ１３０２と同様に、行列Ｂの各小行列ｂｉｊがそれぞれ複数の小データに分割され、分割された小データがそれぞれに対応する計算ノード１００に分散して配置される。
【００９８】
その後、ステップ１３０６、１３１２、および１３１８において、順次、各計算ノード１００の所持している小行列ａｉｊの小データが、Ａｌｌｔｏａｌｌｖ通信によって計算ノード１００間で交換される。
【００９９】
具体的に、ステップ１３０６のＡｌｌｔｏａｌｌｖ通信は、計算ノードＮ０、Ｎ３、およびＮ６が各計算ノード１００からそれぞれ小行列ａ１１の各小データａ１１ｋ、小行列ａ２１の各小データａ２１ｋ、小行列ａ３１の各小データａ３１ｋを取得する処理を、第２実施形態のステップ９０８におけるＡｌｌｇａｔｈｅｒ通信の空欄セルに組み込んだものである。また、ステップ１３１２のＡｌｌｔｏａｌｌｖ通信は、計算ノードＮ１、Ｎ４、およびＮ７が各計算ノード１００からそれぞれ小行列ａ１２の各小データａ１２ｋ、小行列ａ２２の各小データａ２２ｋ、小行列ａ３２の各小データａ３２ｋを取得する処理を、第２実施形態のステップ９１４におけるＡｌｌｇａｔｈｅｒ通信の空欄セルに組み込んだものである。さらに、ステップ１３１８のＡｌｌｔｏａｌｌｖ通信は、計算ノードＮ２、Ｎ５、およびＮ８が各計算ノード１００からそれぞれ小行列ａ１３の各小データａ１３ｋ、小行列ａ２３の各小データａ２３ｋ、小行列ａ３３の各小データａ３３ｋを取得する処理を、第２実施形態のステップ９２０におけるＡｌｌｇａｔｈｅｒ通信の空欄セルに組み込んだものである。
【０１００】
このようなステップ１３０６のＡｌｌｔｏａｌｌｖ通信によって、計算ノードＮ０、Ｎ１、およびＮ２は小行列ａ１１を取得し、計算ノードＮ３、Ｎ４、およびＮ５は小行列ａ２１を取得し、計算ノードＮ６、Ｎ７、およびＮ８は小行列ａ３１を取得する。また、ステップ１３１２のＡｌｌｔｏａｌｌｖ通信によって、計算ノードＮ０、Ｎ１、およびＮ２は小行列ａ１２を取得し、計算ノードＮ３、Ｎ４、およびＮ５は小行列ａ２２を取得し、計算ノードＮ６、Ｎ７、およびＮ８は小行列ａ３２を取得する。さらに、ステップ１３１８のＡｌｌｔｏａｌｌｖ通信によって、計算ノードＮ０、Ｎ１、およびＮ２は小行列ａ１３を取得し、計算ノードＮ３、Ｎ４、およびＮ５は小行列ａ２３を取得し、計算ノードＮ６、Ｎ７、およびＮ８は小行列ａ３３を取得する。
【０１０１】
また、ステップ１３０８、１３１４、および１３２０において、順次、各計算ノード１００の所持している小行列ｂｉｊの小データが、Ａｌｌｔｏａｌｌｖ通信によって計算ノード１００間で交換される。
【０１０２】
具体的に、ステップ１３０８のＡｌｌｔｏａｌｌｖ通信は、計算ノードＮ０、Ｎ１、およびＮ２が各計算ノード１００からそれぞれ小行列ｂ１１の各小データｂ１１ｋ、小行列ｂ１２の各小データｂ１２ｋ、小行列ｂ１３の各小データｂ１３ｋを取得する処理を、第２実施形態のステップ９１０におけるＡｌｌｇａｔｈｅｒ通信の空欄セルに組み込んだものである。また、ステップ１３１４のＡｌｌｔｏａｌｌｖ通信は、計算ノードＮ３、Ｎ４、およびＮ５が各計算ノード１００からそれぞれ小行列ｂ２１の各小データｂ２１ｋ、小行列ｂ２２の各小データｂ２２ｋ、小行列ｂ２３の各小データｂ２３ｋを取得する処理を、第２実施形態のステップ９１６におけるＡｌｌｇａｔｈｅｒ通信の空欄セルに組み込んだものである。さらに、ステップ１３２０のＡｌｌｔｏａｌｌｖ通信は、計算ノードＮ６、Ｎ７、およびＮ８が各計算ノード１００からそれぞれ小行列ｂ３１の各小データｂ３１ｋ、小行列ｂ３２の各小データｂ３２ｋ、小行列ｂ３３の各小データｂ３３ｋを取得する処理を、第２実施形態のステップ９２２におけるＡｌｌｇａｔｈｅｒ通信の空欄セルに組み込んだものである。
【０１０３】
このようなステップ１３０８のＡｌｌｔｏａｌｌｖ通信によって、計算ノードＮ０、Ｎ３、およびＮ６は小行列ｂ１１を取得し、計算ノードＮ１、Ｎ４、およびＮ７は小行列ｂ１２を取得し、計算ノードＮ２、Ｎ５、およびＮ８は小行列ｂ１３を取得する。また、ステップ１３１４のＡｌｌｔｏａｌｌｖ通信によって、計算ノードＮ０、Ｎ３、およびＮ６は小行列ｂ２１を取得し、計算ノードＮ１、Ｎ４、およびＮ７は小行列ｂ２２を取得し、計算ノードＮ２、Ｎ５、およびＮ８は小行列ｂ２３を取得する。さらに、ステップ１３２０のＡｌｌｔｏａｌｌｖ通信によって、計算ノードＮ０、Ｎ３、およびＮ６は小行列ｂ３１を取得し、計算ノードＮ１、Ｎ４、およびＮ７は小行列ｂ３２を取得し、計算ノードＮ２、Ｎ５、およびＮ８は小行列ｂ３３を取得する。
【０１０４】
このように、本発明の第４実施形態に係る並列計算方法においては、ステップ１３０６、１３０８、１３１２、１３１４、１３１８、および１３２０でＡｌｌｔｏａｌｌｖ通信が行われ、通信回数は２√Ｎである。また、各回の通信では、前述の実施形態と同様に、小行列ａｉｊまたはｂｉｊを計算ノード１００の数に分割した小データが転送されるので、１回当りの通信で転送されるデータ長は１／Ｎである。よって、全体の相対的な通信時間は、第３実施形態と同じくＴ＝２／√Ｎとなる。例えばＮ＝６４とすると、Ｔ＝０．２５である。
【０１０５】
したがって、本発明の第４実施形態に係る並列計算方法を用いた場合における相対通信時間は、従来のアルゴリズムを用いた場合の１／Ｎとなり、相対的な理論性能はＮ倍に高速化される。
【０１０６】
図１５は、従来のアルゴリズムによる並列計算方法および本発明の各実施形態に係る並列計算方法の性能をまとめた一覧表である。相対通信時間および相対理論性能についてはＮ＝６４の場合の数値を併記した。図１６は、それぞれの方法で並列計算のシミュレーションを行い、計算に要した実行時間を計測した結果を示すグラフである。グラフの横軸は計算対象の行列のサイズ（すなわち行（列）の数）を表し、縦軸はシミュレーションにより得られた計算実行時間である。シミュレーションでは、６４台の計算ノード１００がフルメッシュ接続された並列計算システムをモデル化した。シミュレーションを行った中で最大サイズの行列についての結果を図１５の表の最右列に示す。この数値は、従来のアルゴリズムの場合の計算実行時間を１としたときの、各実施形態の方法の相対性能を示したものである。
【０１０７】
以上において説明した各実施形態の並列計算は、従来の行列積計算アルゴリズムの一つであるＳＵＭＭＡをベースとしたものである。しかしながら、本明細書に開示する発明の本質は、ＳＵＭＭＡへの適用のみに限定されるわけではない。行列積計算アルゴリズムの他の例としてＣａｎｎｏｎアルゴリズムやＦｏｘアルゴリズムが知られており、これらのアルゴリズムをベースとして、上述した各実施形態と同様の追加の実施形態を提供することができる。
【０１０８】
＜第５実施形態＞
図１７は、並列計算システム１０の各計算ノード１００がＣａｎｎｏｎアルゴリズムによる行列計算を実施する手順を示す概念図であり、ＳＵＭＭＡの場合における前述の図５に相当する。また図１８は、図１７のＣａｎｎｏｎアルゴリズムをベースとした、本発明の第５実施形態による計算ノード１００間のルーティング表の例である。
【０１０９】
図１７および図１８を参照すると、例えば計算ノードＮ１の動作は次のとおりである。計算ノードＮ１は、ステップ１７０２でメモリ１２０に格納済みの小行列ａ１２と、ステップ１８０８および１８１０によって計算ノードＮ４から入手した小行列ｂ２２とを用いて、ステップ１７１０において行列積ａ１２×ｂ２２を計算する。また計算ノードＮ１は、ステップ１８１４および１８１６によって計算ノードＮ０から入手した小行列ａ１１と、ステップ１７０４でメモリ１２０に格納済みの小行列ｂ１２とを用いて、ステップ１７１６において行列積ａ１１×ｂ１２を計算する。さらに計算ノードＮ１は、ステップ１８２４および１８２６によって計算ノードＮ２から入手した小行列ａ１３と、ステップ１８２８および１８３０によって計算ノードＮ７から入手した小行列ｂ３２とを用いて、ステップ１７２２において行列積ａ１３×ｂ３２を計算する。計算ノードＮ１以外の他の計算ノード１００の動作も、図１７および図１８を参照することにより同様に理解することが可能である。
【０１１０】
＜第６実施形態＞
図１９は、並列計算システム１０の各計算ノード１００がＦｏｘアルゴリズムによる行列計算を実施する手順を示す概念図である。また図２０は、図１９のＦｏｘアルゴリズムをベースとした、本発明の第６実施形態による計算ノード１００間のルーティング表の例である。
【０１１１】
図１９および図２０を参照すると、例えば計算ノードＮ１の動作は次のとおりである。計算ノードＮ１は、ステップ２００４および２００６によって計算ノードＮ０から入手した小行列ａ１１と、ステップ１９０４でメモリ１２０に格納済みの小行列ｂ１２とを用いて、ステップ１９１０において行列積ａ１１×ｂ１２を計算する。また計算ノードＮ１は、ステップ１９０２でメモリ１２０に格納済みの小行列ａ１２と、ステップ２０１８および２０２０によって計算ノードＮ４から入手した小行列ｂ２２とを用いて、ステップ１９１６において行列積ａ１２×ｂ２２を計算する。さらに計算ノードＮ１は、ステップ２０２４および２０２６によって計算ノードＮ２から入手した小行列ａ１３と、ステップ２０１８および２０３０によって計算ノードＮ７から入手した小行列ｂ３２とを用いて、ステップ１９２２において行列積ａ１３×ｂ３２を計算する。計算ノードＮ１以外の他の計算ノード１００の動作も、図１９および図２０を参照することにより同様に理解することが可能である。
【０１１２】
＜第７実施形態＞
上述した各実施形態では、並列計算システム１０は、図１に示されるように、各計算ノード１００が自分以外のすべての計算ノード１００とフルメッシュ接続された形に構成されていた。計算ノード１００のこのような接続形態を、「一次元フルメッシュ接続」と呼ぶことができる。しかしながら、本発明は、計算ノード１００がこれとは異なる形態に接続された並列計算システムに適用することも可能である。
【０１１３】
図２１は、本発明の別の実施形態に係る並列計算システム２１０の構成図である。並列計算システム２１０は、複数の計算ノード１００を備える。各計算ノード１００は、図１の並列計算システム１０における計算ノード１００と同じものである。図２１の例において、並列計算システム２１０は、図１の並列計算システム１０と同様に９台の計算ノードＮ０〜Ｎ８から構成されている。なお、並列計算システム２１０を構成する計算ノード１００の数Ｎ（ただしＮは平方数とする）は、任意の数であってよい。
【０１１４】
図示されるように、並列計算システム２１０の９台の計算ノードＮ０〜Ｎ８は、それぞれ３台の計算ノード１００を含む３つのグループＧ１、Ｇ２、およびＧ３に区分けされる。第１グループＧ１は、計算ノードＮ０、Ｎ１、およびＮ２を含み、第２グループＧ２は、計算ノードＮ３、Ｎ４、およびＮ５を含み、第３グループＧ３は、計算ノードＮ６、Ｎ７、およびＮ８を含む。計算ノード１００は、これら各グループ内でフルメッシュ接続される。例えば、第１グループＧ１において、計算ノードＮ０、Ｎ１、およびＮ２がフルメッシュ接続（すなわち、自分以外のすべての計算ノード１００と接続）される。第２グループＧ２および第３グループＧ３についても同様である。これにより、互いに重複しない３つのフルメッシュ接続ネットワークＧ１、Ｇ２、およびＧ３が形成される。
【０１１５】
並列計算システム２１０の９台の計算ノードＮ０〜Ｎ８は、さらに、それぞれ３台の計算ノード１００を含む、上記のグループＧ１、Ｇ２、およびＧ３とは異なる別の３つのグループＧ４、Ｇ５、およびＧ６にも区分けされる。第４グループＧ４は、計算ノードＮ０、Ｎ３、およびＮ６を含み、第５グループＧ５は、計算ノードＮ１、Ｎ４、およびＮ７を含み、第６グループＧ６は、計算ノードＮ２、Ｎ５、およびＮ８を含む。計算ノード１００は、上記グループＧ１、Ｇ２、およびＧ３の場合と同様に、これら各グループＧ４、Ｇ５、およびＧ６内においてもフルメッシュ接続される。例えば、第４グループＧ４において、計算ノードＮ０、Ｎ３、およびＮ６がフルメッシュ接続される。第５グループＧ５および第６グループＧ６についても同様である。これにより、上記のフルメッシュ接続ネットワークＧ１、Ｇ２、およびＧ３とは別個独立の、３つのフルメッシュ接続ネットワークＧ４、Ｇ５、およびＧ６が形成される。
【０１１６】
ここで、例えば計算ノードＮ０は、図２１において横方向に配列した計算ノードからなるフルメッシュ接続ネットワークＧ１の構成要素であるとともに、図２１において縦方向に配列した計算ノードからなるフルメッシュ接続ネットワークＧ４の構成要素でもある。同様に、いずれの計算ノード１００も、図２１において横方向に配列した計算ノードからなるフルメッシュ接続ネットワークおよび縦方向に配列した計算ノードからなるフルメッシュ接続ネットワークの両方の構成要素となっている。図２１における計算ノード１００のこのような接続形態を、「二次元フルメッシュ接続」と呼ぶことができる。
【０１１７】
このように、並列計算システム２１０は、図２１において横方向に配列した計算ノードからなる３つのフルメッシュ接続ネットワークＧ１、Ｇ２、Ｇ３と、図２１において縦方向に配列した計算ノードからなる３つのフルメッシュ接続ネットワークＧ４、Ｇ５、Ｇ６とを有している。これらの各フルメッシュ接続ネットワーク内では、前述したいずれかの実施形態と同様の方法にしたがって、小行列が小データに分割されて計算ノード１００間で転送される。
【０１１８】
例えば、フルメッシュ接続ネットワークＧ１に着目すると、計算ノードＮ０、Ｎ１、およびＮ２は、それぞれ保有している小行列ａ１ｊを３個の小データに分割して、分割した小データを、フルメッシュ接続ネットワークＧ１内の各計算ノード１００へＳｃａｔｔｅｒ通信またはＡｌｌｔｏａｌｌ通信で送信する。次いで、計算ノードＮ０、Ｎ１、およびＮ２は、フルメッシュ接続ネットワークＧ１内に分散された上記の小データをＡｌｌｇａｔｈｅｒ通信またはＡｌｌｔｏａｌｌｖ通信で回収し、元の小行列ａ１ｊを再構成する。フルメッシュ接続ネットワークＧ２およびＧ３においても同様に、それぞれ小行列ａ２ｊ、ａ３ｊが３個の小データに分割されて、当該フルメッシュ接続ネットワーク内の計算ノード１００間で転送される。
【０１１９】
一方、フルメッシュ接続ネットワークＧ４では、計算ノードＮ０、Ｎ３、およびＮ６間において、小行列ｂｉ１を３個に分割した小データが上記と同様にして転送される。また、フルメッシュ接続ネットワークＧ５およびＧ６では、同様に小行列ｂｉ２、ｂｉ３の小データが計算ノード１００間で転送される。
【０１２０】
こうして、計算ノード１００が二次元フルメッシュ接続された並列計算システム２１０において、各計算ノード１００は、それぞれ小行列ｃｉｊの計算に必要なデータを他の計算ノード１００から取得することができる。
【０１２１】
本実施形態において小行列の転送にＡｌｌｔｏａｌｌ通信およびＡｌｌｔｏａｌｌｖ通信を使用した場合の通信時間を、前述の第３実施形態（同様にＡｌｌｔｏａｌｌ通信およびＡｌｌｔｏａｌｌｖ通信を使用していることに留意されたい）と比較する。第３実施形態の場合、前述したように、通信回数はＭ＝２√Ｎであり、１回当りの通信で転送されるデータ長はＳ＝１／Ｎである。一方、本実施形態の場合、小行列は（並列計算システム２１０の全計算ノード数ではなく）並列計算システム２１０の一つのグループに含まれる計算ノード数に分割されるので、１回当りの通信で転送されるデータ長はＳ＝１／√Ｎである。また、本実施形態の場合、小行列ａｉｊの転送と小行列ｂｉｊの転送を１回のＡｌｌｔｏａｌｌ通信またはＡｌｌｔｏａｌｌｖ通信で同時に行うことができるため、通信回数はＭ＝√Ｎとなる。さらに、計算ノード１台当たりの通信帯域を一定値「１」とすると、第３実施形態では、各計算ノード１００は自分以外の（Ｎ−１）台の計算ノード１００と通信するので、通信リンク当たりの通信帯域ＢはＢ＝１／（Ｎ−１）≒１／Ｎであるのに対し、本実施形態では、各計算ノード１００は２（√Ｎ−１）台の計算ノード１００と通信するので、Ｂ＝１／２（√Ｎ−１）≒１／２√Ｎである。したがって、すべてのデータを転送するのにかかる全体の相対的な通信時間Ｔ（＝ＭＳ／Ｂ）は、第３実施形態と本実施形態で等しくなる。
【０１２２】
このように、本発明の第７実施形態に係る並列計算システム２１０は、前述の各実施形態に係る並列計算システム１０と同様の高速化処理が可能である。また、（一次元または二次元）フルメッシュ接続された計算ノード間で波長多重通信を行うことを想定すると、一次元フルメッシュ接続による図１の並列計算システム１０においてはＮ個の異なる波長を用意しなければならないが、二次元フルメッシュ接続による図２１の並列計算システム２１０においては、必要な波長の数は√Ｎ個で済む。一般に、通信に利用できる波長帯域には限りがあり、そのため利用可能な波長の数も限られている。したがって、利用可能な波長の数が同一であるならば、二次元フルメッシュ接続の構成を採用することによって、一次元フルメッシュ接続の場合と比較して、より多くの計算ノード１００からなる並列計算システム２１０を構築することができる。例えば、利用可能な波長の数が６４個であるとすると、図１の並列計算システム１０は最大で６４台の計算ノード１００しか含むことができないが、第７実施形態の二次元フルメッシュ接続された並列計算システム２１０は、最大で４０９６（＝６４２）台の計算ノード１００を含むことが可能である。したがって、本発明の第７実施形態によれば、より大規模な並列計算システム２１０を構築することが可能となり、より大規模な並列計算（例えば行列計算）を実現することができる。
【０１２３】
＜第８実施形態＞
図２２は、本発明の一実施形態に係る並列計算システム２２０の構成図であり、計算ノード３００間の物理トポロジーを示している。図２２には８台の計算ノード３００が示されているが、並列計算システム２２０を構成する計算ノード３００の数は、任意の数であってよい。
【０１２４】
各計算ノード３００は、光ファイバ２２７によって波長ルータ２２５に物理的に接続されている。並列計算システム２２０は、波長ルータ２２５にすべての計算ノード３００が物理的に接続されたスター型接続の物理トポロジーを有する。各計算ノード３００は、波長ルータ２２５を介して他の任意の計算ノード３００と通信することができる。したがって、並列計算システム２２０は、論理的には、図１に示されるような一次元フルメッシュ接続の論理トポロジー、または図２１に示されるような二次元フルメッシュ接続の論理トポロジーを有するように構成されている。
【０１２５】
波長ルータ２２５は、複数の入出力ポートＰ１〜Ｐ８を備え、そのそれぞれに、計算ノードＮ１〜Ｎ８のうちの対応する１つが接続される。各計算ノード３００から送信された光信号が、波長ルータ２２５のポートＰ１〜Ｐ８のいずれかに入力される。波長ルータ２２５は、各ポートに入力された光信号を、ポートＰ１〜Ｐ８のうちその波長に応じたいずれかの出力ポートに振り分ける機能を有する。この波長ルーティングによって、送信元の計算ノード３００からの光信号が、宛先の計算ノード３００にルーティングされる。例えば、図２２に示されるように、計算ノードＮ１から送信された波長λ１、λ２、λ３、λ４、λ５、λ６、λ７の各光信号は、それぞれ、計算ノードＮ２、Ｎ３、Ｎ４、Ｎ５、Ｎ６、Ｎ７、Ｎ８にルーティングされる。
【０１２６】
図２３は、波長ルータ２２５によるルーティングを示すテーブルである。上に例示した計算ノードＮ１が送信元の場合は、図２３のルーティングテーブルの最上段に示されている。また例えば、このルーティングテーブルの上から２段目には、計算ノードＮ２から送信された波長λ１、λ２、λ３、λ４、λ５、λ６、λ７の各光信号は、それぞれ、計算ノードＮ３、Ｎ４、Ｎ５、Ｎ６、Ｎ７、Ｎ８、Ｎ１にルーティングされることが示されている。他の計算ノード３００が送信元である場合についても、図２３から同様に理解することが可能である。このようなサイクリックな波長ルーティング機能を備えた波長ルータ２２５は、公知のパッシブ光回路を用いて実現することができる。
【０１２７】
図２４は、波長ルーティングを用いた並列計算システム２２０に適用される計算ノード３００の構成図である。計算ノード３００は、プロセッサ１１０、メモリ１２０、クロスバー・スイッチ３３０、複数の光源・変調器ユニット３４０、複数の光検出器３５０、マルチプレクサ３６０、およびデマルチプレクサ３７０を備える。プロセッサ１１０は、他の計算ノード３００のそれぞれに対応して設けられた各光源・変調器ユニット３４０へ、クロスバー・スイッチ３３０を介して送信対象のデータを供給する。各光源・変調器ユニット３４０は、特定波長（λ１〜λ７のうち当該光源・変調器ユニット３４０にあらかじめ割り当てられた１つの波長）のキャリア光を発生させ、クロスバー・スイッチ３３０からの入力データに基づいてキャリア光を変調しマルチプレクサ３６０へ出力する。各光源・変調器ユニット３４０からの各波長の光信号は、マルチプレクサ３６０によって波長多重され、送信側光ファイバ２２７−１へ送り出される。また、受信側光ファイバ２２７−２を通って、他の複数の計算ノード３００から送信された波長多重された光信号がデマルチプレクサ３７０へ入力される。この波長多重信号は、デマルチプレクサ３７０によって波長分離されて、各波長の信号毎に、他の計算ノード３００のそれぞれに対応して設けられた各光検出器３５０によって受信される。
【０１２８】
なお図２４では、メモリ１２０とクロスバー・スイッチ３３０間のデータの転送はプロセッサ１１０を介して行うように示されているが、メモリ１２０とクロスバー・スイッチ３３０間にダイレクト・メモリ・アクセス・コントローラ（ＤＭＡＣ）を設置し、メモリ１２０とクロスバー・スイッチ３３０間のデータの転送をプロセッサ１１０からオフロードし、ＤＭＡＣ経由で行ってもよい。また、図２４の光源・変調器ユニット３４０は光源を内蔵しているが、光源は計算ノード３００の外に設置し、その外部に設置した光源から光ファイバ等を介してキャリア光を変調器ユニット３４０に入力してもよい。
【０１２９】
このように波長ルーティングを行うように構成された並列計算システム２２０においても、前述の第１〜第７実施形態と同様にして並列計算のためのデータ通信を行うことが可能であり、それにより、並列計算の高速化を実現することができる。
【０１３０】
上述のとおり、本実施形態の並列計算システム２２０は、各計算ノード３００間が光ファイバ２２７および波長ルータ２２５を介して物理的に接続されるとともに、波長ルータ２２５による波長ルーティングを用いて各計算ノード３００間が論理的にフルメッシュ接続された構成を有している。この並列計算システム２２０が、各計算ノード間がパケット・スイッチを介して接続された従来の並列計算システムに比べて優れている点を以下に説明する。まず計算ノード間の通信に必要な消費電力に関して、従来の電気のパケット・スイッチではその消費電力はスループット（ラインレート×ポート数）に比例する一方、波長ルータ２２５の消費電力はスループットに無依存であるため、特に高スループット時に本実施形態の並列計算システム２２０の方が低消費電力となる。次にポート数に関して、従来の電気のパケット・スイッチのポート数の上限は、主にフロントパネルに実装できる電気コネクタ数で決まり、１Ｕ当たり３６程度である。一方、波長ルータのポート数の上限は主に波長数で決まり、信号のシンボルレートを２５ＧＢａｕｄ、チャンネル間隔を５０ＧＨｚとすると、長距離光ファイバ通信で用いられているＣ帯全域で約８０ポートが可能である。光ファイバとしてＭＴコネクタ等を用いると、２５０μｍ以下のピッチでアレイ化が可能であり、８０台の計算ノードとの接続に必要な光ファイバ１６０芯分のコネクタを１Ｕのフロントパネルに収めることが可能である。従って、本実施形態の並列計算システム２２０は、従来に比べて小型化が可能である。また、計算ノード間における通信速度の高速化への適応容易性に関して、従来の電気のパケット・スイッチはビットレートや変調方式に依存するため、計算ノード間の通信速度を高速化する際には電気のパケット・スイッチも一緒に交換する必要があるが、波長ルータ２２５は電気的な信号処理を含まずビットレートや変調方式に無依存のため、そのまま使い続けることができる。従って、本実施形態の並列計算システム２２０は、従来に比べて経済的であると共に地球環境にも優しいという利点を備えている。
【０１３１】
以上、本発明の実施形態を説明したが、本発明はこれに限定されず、その要旨を逸脱しない範囲内において様々な変更が可能である。
【符号の説明】
【０１３２】
１０    並列計算システム
２０    通信リンク
１００  計算ノード
１１０  プロセッサ
１２０  メモリ
１２２  プログラム格納領域
１２４  データ格納領域
１３０  送受信ユニット
１３２  通信ポート
２１０  並列計算システム
２２０  並列計算システム
２２５  波長ルータ
２２７  光ファイバ
３００  計算ノード
３３０  クロスバー・スイッチ
３４０  光源・変調器ユニット
３５０  光検出器
３６０  マルチプレクサ
３７０  デマルチプレクサ
【図１】
2021009901.tif 000003
【図２】
2021009901.tif 000004
【図３】
2021009901.tif 000005
【図４】
2021009901.tif 000006
【図５】
2021009901.tif 000007
【図６】
2021009901.tif 000008
【図７】
2021009901.tif 000009
【図８】
2021009901.tif 000010
【図９】
2021009901.tif 000011
【図１０】
2021009901.tif 000012
【図１１】
2021009901.tif 000013
【図１２】
2021009901.tif 000014
【図１３】
2021009901.tif 000015
【図１４】
2021009901.tif 000016
【図１５】
2021009901.tif 000017
【図１６】
2021009901.tif 000018
【図１７】
2021009901.tif 000019
【図１８】
2021009901.tif 000020
【図１９】
2021009901.tif 000021
【図２０】
2021009901.tif 000022
【図２１】
2021009901.tif 000023
【図２２】
2021009901.tif 000024
【図２３】
2021009901.tif 000025
【図２４】
2021009901.tif 000026
【手続補正書】
【提出日】令和3年7月7日(2021.7.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の計算ノードを備える並列計算システムにおいて並列計算を行う方法であって、
データを分割した第１レベルの小データの各々を前記複数の計算ノードの各々に配置する第１ステップと、
前記複数の計算ノードのうちの第１計算ノードおよび第２計算ノードにおいて、前記第１レベルの小データをさらに第２レベルの小データに分割する第２ステップと、
前記第１計算ノードおよび前記第２計算ノードが、同時に、それぞれ保持する前記第２レベルの小データの各々を、前記複数の計算ノードのすべてへ並列転送する第３ステップと、
前記複数の計算ノードの各々が、前記第１計算ノードから転送された第２レベルの小データを、前記複数の計算ノードのうちの第３計算ノードへ並列転送し、それと同時に、前記第２計算ノードから転送された第２レベルの小データを、前記複数の計算ノードのうちの第４計算ノードへ並列転送する第４ステップと、
前記第３計算ノードおよび前記第４計算ノードにおいて、前記第４ステップで転送された第２レベルの小データを用いて前記第１レベルの小データを再構成する第５ステップと、
を含む並列計算方法。
【請求項２】
前記再構成された第１レベルの小データを用いて前記並列計算の一部分を実行する第６ステップをさらに含む、請求項１に記載の並列計算方法。
【請求項３】
前記第３ステップにおける並列転送は、前記複数の計算ノード間で利用可能なすべての通信リンクが使用されるように前記第２レベルの小データを並列転送することを含む、請求項１または２に記載の並列計算方法。
【請求項４】
前記第４ステップにおける並列転送は、前記複数の計算ノード間で利用可能なすべての通信リンクが使用されるように前記第２レベルの小データを並列転送することを含む、請求項１から３のいずれか１項に記載の並列計算方法。
【請求項５】
前記計算ノードは、それぞれ複数の通信ポートを備え、
前記第３ステップにおけるデータ通信または前記第４ステップにおけるデータ通信は、前記複数の通信ポートを介して行われる、
請求項１から４のいずれか１項に記載の並列計算方法。
【請求項６】
前記複数の計算ノードは論理フルメッシュ接続される、請求項１から５のいずれか１項に記載の並列計算方法。
【請求項７】
前記並列計算は行列演算であり、前記データは行列を表すデータであり、前記第１レベルの小データは、前記行列を行方向および列方向に分割した小行列を表すデータである、請求項１から６のいずれか１項に記載の並列計算方法。
【請求項８】
前記小行列は、前記行列をＮ分割（ただしＮは計算ノードの数）した小行列であり、前記第２レベルの小データは、前記小行列をさらにＮ分割したデータである、請求項７に記載の並列計算方法。
【請求項９】
前記行列演算は行列積の計算である、請求項７または８に記載の並列計算方法。
【請求項１０】
複数の計算ノードを備える並列計算システムにおいて並列計算を行う方法であって、
データを分割した第１レベルの小データの各々を、さらに第２レベルの小データに分割するステップと、
前記第２レベルの小データの各々を前記複数の計算ノードの各々に配置するステップと、
前記複数の計算ノードの各々が、前記第２レベルの第１の小データを、前記複数の計算ノードのうちの第１計算ノードへ並列転送し、それと同時に、前記第２レベルの第２の小データを、前記複数の計算ノードのうちの第２計算ノードへ並列転送するステップと、
前記第１計算ノードおよび前記第２計算ノードにおいて、それぞれ、前記複数の計算ノードから転送された前記第２レベルの第１または第２の小データを用いて前記第１レベルの小データを再構成するステップと、
を含む並列計算方法。
【請求項１１】
複数の計算ノードを備える並列計算システムであって、
データを分割した第１レベルの小データの各々が前記複数の計算ノードの各々に配置され、
前記複数の計算ノードのうちの第１計算ノードおよび第２計算ノードが、
前記第１レベルの小データをさらに第２レベルの小データに分割し、
それぞれ保持する前記第２レベルの小データの各々を、同時に、前記複数の計算ノードのすべてへ並列転送する
ように構成され、
前記複数の計算ノードの各々が、
前記第１計算ノードから転送された第２レベルの小データを、前記複数の計算ノードのうちの第３計算ノードへ並列転送し、それと同時に、前記第２計算ノードから転送された第２レベルの小データを、前記複数の計算ノードのうちの第４計算ノードへ並列転送する
ように構成され、
前記第３計算ノードおよび前記第４計算ノードが、
前記複数の計算ノードの各々から転送された第２レベルの小データを用いて前記第１レベルの小データを再構成する
ように構成される、
並列計算システム。
【請求項１２】
複数の計算ノードを備える並列計算システムであって、
データを分割した第１レベルの小データの各々がさらに第２レベルの小データに分割され、
前記第２レベルの小データの各々が前記複数の計算ノードの各々に配置され、
前記複数の計算ノードの各々が、
前記第２レベルの第１の小データを、前記複数の計算ノードのうちの第１計算ノードへ並列転送し、それと同時に、前記第２レベルの第２の小データを、前記複数の計算ノードのうちの第２計算ノードへ並列転送する
ように構成され、
前記第１計算ノードおよび前記第２計算ノードが、
前記複数の計算ノードの各々から転送された前記第２レベルの第１または第２の小データをそれぞれ用いて前記第１レベルの小データを再構成する
ように構成される、
並列計算システム。
【請求項１３】
前記複数の計算ノードは、一次元フルメッシュ接続または二次元フルメッシュ接続される、請求項１１または１２に記載の並列計算システム。
【請求項１４】
前記複数の計算ノードは、波長ルーティングを用いて論理的にフルメッシュ接続される、請求項１３に記載の並列計算システム。
【国際調査報告】
2021009901.tif 000027
2021009901.tif 000028
2021009901.tif 000029
2021009901.tif 000030