(57)【要約】コンピューターシステムに、各々が１または複数の処理ユニット側ポートを有する、複数のＣＰＵ１１ａおよび１１ｂと、２以上の記憶装置側ポートを有する、少なくとも１のメモリ１２と、を備え、処理ユニット側ポートと記憶装置側ポートとが論理上１対１で接続されることで、メモリ１２が、複数の処理ユニットのうち所定の２以上の処理ユニットによって共有されることとした。
2015121986.tif 000002
【特許請求の範囲】
【請求項１】
各々が１または複数の処理ユニット側ポートを有する、複数の処理ユニットと、
２以上の記憶装置側ポートを有する、少なくとも１の記憶装置と、を備え、
前記処理ユニット側ポートと前記記憶装置側ポートとが論理上１対１で接続されることで、前記記憶装置は、前記複数の処理ユニットのうち所定の２以上の処理ユニットによって共有される、
システム。
【請求項２】
前記所定の２以上の処理ユニットに含まれる何れかの処理ユニットによる演算結果が前記記憶装置に書き込まれたことを、前記所定の２以上の処理ユニットに含まれる他の処理ユニットに通知する通知部を更に備える、
請求項１に記載のシステム。
【請求項３】
前記通知部は、前記演算結果が前記記憶装置に書き込まれた場合に、前記他の処理ユニットに対する割込を発生させることで、前記演算結果が前記記憶装置に書き込まれたことを、前記他の処理ユニットに通知する、
請求項２に記載のシステム。
【請求項４】
前記記憶装置は、前記他の処理ユニットに対する割込を行う割込部を備え、
前記通知部は、前記演算結果が前記記憶装置に書き込まれた場合に、前記割込部に、前記他の処理ユニットに対する割込を行わせることで、前記演算結果が前記記憶装置に書き込まれたことを、前記他の処理ユニットに通知する、
請求項３に記載のシステム。
【請求項５】
前記所定の２以上の処理ユニットに含まれる何れかの処理ユニットによって、前記所定の２以上の処理ユニットに含まれる他の処理ユニットの演算結果が前記記憶装置から読み出されたことを、前記他の処理ユニットに通知する通知部を更に備える、
請求項１に記載のシステム。
【請求項６】
前記通知部は、前記演算結果が前記記憶装置から読み出された場合に、前記他の処理ユニットに対する割込を発生させることで、前記演算結果が前記記憶装置から読み出されたことを、前記他の処理ユニットに通知する、
請求項５に記載のシステム。
【請求項７】
前記記憶装置は、前記他の処理ユニットに対する割込を行う割込部を備え、
前記通知部は、前記演算結果が前記記憶装置から読み出された場合に、前記割込部に、前記他の処理ユニットに対する割込を行わせることで、前記演算結果が前記記憶装置から読み出されたことを、前記他の処理ユニットに通知する、
請求項６に記載のシステム。
【請求項８】
前記通知部は、前記記憶装置に対して所定の指示を行うことで、前記割込を行わせる、
請求項４または７に記載のシステム。
【請求項９】
前記複数の処理ユニットは、各処理ユニットがノードとなるメッシュを論理上構成するように、前記記憶装置を介して接続され、
前記所定の２以上の処理ユニットは、前記複数の処理ユニットのうち、前記メッシュにおいて隣同士に配置された処理ユニットである、
請求項１から８の何れか一項に記載のシステム。
【請求項１０】
前記複数の処理ユニットは、論理上１次元または多次元のトーラスを構成するように、前記記憶装置を介して接続され、
前記所定の２以上の処理ユニットは、前記複数の処理ユニットのうち、前記トーラスにおいて隣同士に配置された処理ユニットである、
請求項１から８の何れか一項に記載のシステム。
【請求項１１】
前記複数の処理ユニットの夫々は、
自身と前記記憶装置を共有する他の処理ユニットによる演算結果を、前記記憶装置から読み出すことで取得する、演算結果取得手段と、
前記演算結果取得手段によって取得された演算結果を用いて演算を行う演算手段と、
前記演算手段による演算結果を、前記記憶装置に書き込むことで、該演算結果を前記他の処理ユニットに渡し、該演算結果を用いた演算を該他の処理ユニットに行わせる、演算結果引渡手段と、を備える、
請求項１から１０の何れか一項に記載のシステム。
【請求項１２】
２以上の処理ユニットによって共有可能な記憶装置であって、
前記２以上の処理ユニットから書き込まれた演算結果を記憶する記憶部と、
前記記憶部に前記演算結果を書き込んだ処理ユニットまたは前記記憶部から前記演算結果を読み出した処理ユニットからの指示を受けて、前記２以上の処理ユニットに含まれる他の処理ユニットに対して割込を行う割込部と、
を備える記憶装置。
【請求項１３】
前記割込部は、前記他の処理ユニットが複数ある場合に、複数の他の処理ユニットに対して前記割込を行う、
請求項１２に記載の記憶装置。
【請求項１４】
各々が処理ユニット側ポートを有する複数の処理ユニット、および２以上の記憶装置側ポートを有する少なくとも１の記憶装置を備え、前記処理ユニット側ポートと前記記憶装置側ポートとが論理上１対１で接続されることで、前記記憶装置が前記複数の処理ユニットのうち所定の２以上の処理ユニットによって共有されるシステムにおいて、
前記処理ユニットによる演算結果を前記記憶装置に書き込む書込ステップと、
前記書き込みが行われたことを、前記所定の２以上の処理ユニットに含まれる他の処理ユニットに通知する通知ステップと、
を実行する方法。
【請求項１５】
前記通知ステップでは、前記演算結果が前記記憶装置に書き込まれた場合に、前記他の処理ユニットに対する割込を発生させることで、前記演算結果が前記記憶装置に書き込まれたことが、前記他の処理ユニットに通知される、
請求項１４に記載の方法。
【請求項１６】
前記記憶装置は、前記他の処理ユニットに対して割込を行う割込部を備え、
前記通知ステップでは、前記演算結果が前記記憶装置に書き込まれた場合に、前記割込部に、前記他の処理ユニットに対する割込を行わせることで、前記演算結果が前記記憶装置に書き込まれたことが、前記他の処理ユニットに通知される、
請求項１４または１５に記載の方法。
【請求項１７】
各々が処理ユニット側ポートを有する複数の処理ユニット、および２以上の記憶装置側ポートを有する少なくとも１の記憶装置を備え、前記処理ユニット側ポートと前記記憶装置側ポートとが論理上１対１で接続されることで、前記記憶装置が前記複数の処理ユニットのうち所定の２以上の処理ユニットによって共有されるシステムにおいて、
前記処理ユニットによる演算結果を前記記憶装置に書き込む書込ステップと、
前記所定の２以上の処理ユニットに含まれる他の処理ユニットが前記演算結果を前記記憶装置から読み出す読出ステップと、
前記読み出しが行われたことを、前記処理ユニットに通知する通知ステップと、
を実行する方法。
【請求項１８】
前記通知ステップでは、前記演算結果が前記記憶装置から読み出された場合に、前記処理ユニットに対する割込を発生させることで、前記演算結果が前記記憶装置から読み出されたことが、前記他の処理ユニットに通知される、
請求項１７に記載の方法。
【請求項１９】
前記記憶装置は、前記他の処理ユニットに対して割込を行う割込部を備え、
前記通知ステップでは、前記演算結果が前記記憶装置から読み出された場合に、前記割込部に、前記処理ユニットに対する割込を行わせることで、前記演算結果が前記記憶装置から読み出されたことが、前記処理ユニットに通知される、
請求項１７または１８に記載の方法。
【請求項２０】
各々が処理ユニット側ポートを有する複数の処理ユニット、および２以上の記憶装置側ポートを有する少なくとも１の記憶装置を備え、前記処理ユニット側ポートと前記記憶装置側ポートとが論理上１対１で接続されることで、前記記憶装置が前記複数の処理ユニットのうち所定の２以上の処理ユニットによって共有されるシステムにおいて、
前記複数の処理ユニットの夫々が、
自身と前記記憶装置を共有する他の処理ユニットによる演算結果を、前記記憶装置から読み出すことで取得する、演算結果取得ステップと、
前記演算結果取得ステップで取得された演算結果を用いて演算を行う演算ステップと、
前記演算ステップにおける演算結果を、前記記憶装置に書き込むことで、該演算結果を前記他の処理ユニットに渡し、該演算結果を用いた演算を該他の処理ユニットに行わせる、演算結果引渡ステップと、を実行する、
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の処理ユニットおよび少なくとも１の記憶装置を備えるシステムに関する。
【背景技術】
【０００２】
従来、複数のプロセッサーと、前記プロセッサー間を結ぶネットワークと、前記ネットワークに接続する共有メモリと、前記ネットワークに接続し拡張記憶装置を接続するデータ転送処理装置から構成される情報処理システムが提案されている（特許文献１を参照）。【０００３】
また、各々が演算処理装置、キャッシュメモリ、ローカルメモリ部を含む複数個のプロセッサエレメントがネットワークで結合され、前記複数個のプロセッサエレメント内の前記各演算処理装置から、前記複数個のプロセッサエレメント内すべての前記ローカルメモリが同一のアドレス空間を有する共有メモリとしてアクセス可能な分散共有メモリ型並列計算機システムが提案されている（特許文献２を参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平８−３４０３４８号公報
【特許文献２】特開平１１−１０２３２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来、複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が並列処理を行うシステム等において、複数のＣＰＵによってメモリが共有される技術が存在する。しかし、従来の共有メモリは、複数のＣＰＵを所定のネットワークに所属させ、当該ネットワークに共有メモリを接続することで共有メモリを参照可能としたものや、複数のＣＰＵの夫々に接続された複数のメモリを単一のアドレス空間として管理することで、夫々のＣＰＵから、他のＣＰＵのメモリを参照可能としたもの等であった。このため、複数のＣＰＵが並列処理を行うにあたってＣＰＵ間で演算結果を受け渡すには、一旦、ＣＰＵや、多くのコンポーネントを有し複雑な調停を行うネットワークインターフェース等を介して演算結果を送受信する必要があり、このために並列処理の高速化が妨げられていた。【０００６】
図９は、ＣＰＵ間で演算結果を受け渡すことが可能な、従来の複数ＣＰＵの接続態様を示す図である。図９に示す構成では、複数のＣＰＵは、夫々がメモリを有しており、ＣＰＵ間は、所定の通信用インターフェースで接続されている。このため、複数ＣＰＵにおいて並列処理を行う場合等に、演算結果をＣＰＵ間で受け渡すためには、ＣＰＵが自身に直接接続されているメモリから演算結果を読み出し、読み出した演算結果を、通信用インターフェースを通じて相手のＣＰＵに送信し、演算結果を受信したＣＰＵは受信した演算結果を自身に直接接続されたメモリに書き込んでから、当該演算結果を参照して、続きの演算を開始する。即ち、複数の処理ユニットを備えるシステムにおいて、処理ユニット間で演算結果を受け渡しながら並列処理を行う場合には、他の処理ユニットへの演算結果送信や、他の処理ユニットからの演算結果待ち受け、受信した演算結果のメモリへの書き込み、等に多くのクロック数が消費されてしまい、システム全体のパフォーマンスが制限されるという問題があった。【０００７】
本発明は、上記した問題に鑑み、複数の処理ユニットを備えるシステムにおいて、処理ユニット間での演算結果の受け渡しをより高速にし、システム全体の性能を向上させることを課題とする。
【課題を解決するための手段】
【０００８】
本発明は、上記した課題を解決するために、以下の手段を採用した。即ち、本発明は、各々が１または複数の処理ユニット側ポートを有する、複数の処理ユニットと、２以上の記憶装置側ポートを有する、少なくとも１の記憶装置と、を備え、前記処理ユニット側ポートと前記記憶装置側ポートとが論理上１対１で接続されることで、前記記憶装置は、前記複数の処理ユニットのうち所定の２以上の処理ユニットによって共有される、システムである。【０００９】
また、前記システムは、前記所定の２以上の処理ユニットに含まれる何れかの処理ユニットによる演算結果が前記記憶装置に書き込まれたこと、または前記所定の２以上の処理ユニットに含まれる何れかの処理ユニットによって、前記所定の２以上の処理ユニットに含まれる他の処理ユニットの演算結果が前記記憶装置から読み出されたことを、前記所定の２以上の処理ユニットに含まれる他の処理ユニットに通知する通知部を更に備えてもよい。【００１０】
また、前記通知部は、前記演算結果が前記記憶装置に書き込まれた場合、または前記演算結果が前記記憶装置から読み出された場合に、前記他の処理ユニットに対する割込を発生させることで、前記他の処理ユニットに通知してもよい。【００１１】
また、前記記憶装置は、前記他の処理ユニットに対する割込を行う割込部を備え、前記通知部は、前記演算結果が前記記憶装置に書き込まれた場合、または前記演算結果が前記記憶装置から読み出された場合に、前記割込部に、前記他の処理ユニットに対する割込を行わせることで、前記他の処理ユニットに通知してもよい。【００１２】
また、前記通知部は、前記記憶装置に対して所定の指示を行うことで、前記割込を行わせてもよい。【００１３】
また、前記複数の処理ユニットは、各処理ユニットがノードとなるメッシュを論理上構成するように、前記記憶装置を介して接続され、前記所定の２以上の処理ユニットは、前記複数の処理ユニットのうち、前記メッシュにおいて隣同士に配置された処理ユニットであってもよい。【００１４】
また、前記複数の処理ユニットは、論理上１次元または多次元のトーラスを構成するように、前記記憶装置を介して接続され、前記所定の２以上の処理ユニットは、前記複数の処理ユニットのうち、前記トーラスにおいて隣同士に配置された処理ユニットであってもよい。【００１５】
また、前記複数の処理ユニットの夫々は、自身と前記記憶装置を共有する他の処理ユニットによる演算結果を、前記記憶装置から読み出すことで取得する、演算結果取得手段と、前記演算結果取得手段によって取得された演算結果を用いて演算を行う演算手段と、前記演算手段による演算結果を、前記記憶装置に書き込むことで、該演算結果を前記他の処理ユニットに渡し、該演算結果を用いた演算を該他の処理ユニットに行わせる、演算結果引渡手段と、を備えてもよい。【００１６】
また、本発明は、記憶装置の発明としても把握することが出来る。例えば、本発明は、２以上の処理ユニットによって共有可能な記憶装置であって、前記２以上の処理ユニットから書き込まれた演算結果を記憶する記憶部と、前記記憶部に前記演算結果を書き込んだ処理ユニットまたは前記記憶部から前記演算結果を読み出した処理ユニットからの指示を受けて、前記２以上の処理ユニットに含まれる他の処理ユニットに対して割込を行う割込部と、を備える記憶装置である。【００１７】
なお、本発明は、コンピューターシステム、情報処理装置、コンピューターによって実行される方法、またはコンピューターに実行させるプログラムとして把握することが可能である。また、本発明は、そのようなプログラムをコンピューターその他の装置、機械等が読み取り可能な記録媒体に記録したものとしても把握できる。ここで、コンピューター等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピューター等から読み取ることができる記録媒体をいう。
【発明の効果】
【００１８】
本発明によれば、複数の処理ユニットを備えるシステムにおいて、処理ユニット間での演算結果の受け渡しをより高速にし、システム全体の性能を向上させることが可能となる。
【図面の簡単な説明】
【００１９】
【図１】実施形態に係るシステムの概略を示す図である。
【図２】実施形態に係るシステムの詳細を示す図である。
【図３】実施形態に係る演算結果受渡処理の流れを示すフローチャート（Ａ）である。
【図４】実施形態に係る演算結果受渡処理の流れを示すフローチャート（Ｂ）である。
【図５】実施形態において、ＣＰＵが２次元トーラス状に接続されたシステムを示す図である。
【図６】実施形態において、ＣＰＵが３次元トーラス状に接続されたシステムを示す図である。
【図７】実施形態に係るシステムにおいて、ＣＰＵ間にメモリをインターコネクトするバリエーションその１を示す図である。
【図８】実施形態に係るシステムにおいて、ＣＰＵ間にメモリをインターコネクトするバリエーションその２を示す図である。
【図９】従来のＣＰＵの接続態様の概略を示す図である。
【発明を実施するための形態】
【００２０】
以下、本開示に係るシステム、記憶装置および方法の実施の形態を、図面に基づいて説明する。但し、以下に説明する実施の形態は、実施形態を例示するものであって、本開示に係るシステム、記憶装置および方法を以下に説明する具体的構成に限定するものではない。実施にあたっては、実施形態に応じた具体的構成が適宜採用され、また、種々の改良や変形が行われてよい。
【００２１】
＜システム構成＞
図１は、本実施形態に係るシステムの概略を示す図である。本実施形態に係るシステムは、ＣＰＵ１１ａ、１１ｂおよびメモリ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ、ＲＡＭ）１２を備える。そして、メモリ１２は、ＣＰＵ１１ａ、１１ｂの夫々に、読み書き可能に直接接続されることで、ＣＰＵ１１ａ、１１ｂによって共有される。本実施形態では、メモリ１２とＣＰＵ１１ａ、１１ｂとの接続方法として、各ＣＰＵが備えるポート（処理ユニット側ポート）と、メモリ１２が備えるポート（記憶装置側ポート）とが、シリアル接続される方法が採用される。このため、メモリ１２には、ＣＰＵと接続可能なポートを複数備えるメモリが用いられる。また、ＣＰＵ側も、メモリと接続可能なポートを複数備えてよい（後述するバリエーションを参照）。但し、メモリ１２とＣＰＵ１１ａ、１１ｂとの接続方法には、ＣＰＵ−メモリ間通信管理用のプロセッサー等をＣＰＵの外部に必要としない、ＣＰＵとメモリとが論理上１対１で接続される方式であれば、本実施形態における例以外の接続方法が採用されてもよい。例えば、接続には、その一部または全部に光接続が採用されてもよい。また、ポートは論理上１対１で接続されていればよい。このため、ＣＰＵ１１ａまたは１１ｂとメモリ１２との間の接続は、物理的にはバス等を用いて共有されていてもよい。また、本実施形態では、メモリ１２が２つのＣＰＵ１１ａ、１１ｂによって共有される例について説明しているが、１のメモリ１２は、３以上のＣＰＵによって共有されてもよい。
【００２２】
本実施形態に係るシステムでは、ＣＰＵ１１ａ、１１ｂとメモリ１２とが上記のように接続されることで、ＣＰＵ１１ａとＣＰＵ１１ｂとの間での演算結果の受け渡しをより高速にし、システム全体の性能を向上させることが出来る。
【００２３】
図２は、本実施形態に係るシステムの詳細を示す図である。ＣＰＵ１１ａ、１１ｂは、自身に直接接続されたメモリ１２ａまたは１２ｂに展開されたプログラムを解釈および実行することで、演算結果取得部１１１ａ、１１１ｂ、演算部１１２ａ、１１２ｂ、演算結果引渡部１１３ａ、１１３ｂ、通知部１１４ａ、１１４ｂを備えるコンピューターとして機能する。また、本実施形態に係るＣＰＵ１１ａ、１１ｂは、夫々が備えるレジスタに、書込可フラグおよび読出可フラグを有する。これらのフラグは、演算結果の書き込み／読み出しタイミングを制御するために用いられる。
【００２４】
演算結果取得部１１１ａ、１１１ｂは、メモリ１２を共有する他のＣＰＵ１１ａまたは１１ｂによる演算結果を、メモリ１２から読み出すことで取得する。
【００２５】
演算部１１２ａ、１１２ｂは、演算結果取得部１１１ａ、１１１ｂによって取得された演算結果を用いて演算を行う。
【００２６】
演算結果引渡部１１３ａ、１１３ｂは、演算部１１２ａ、１１２ｂによる演算結果を、メモリ１２に書き込むことで、当該演算結果を、メモリ１２を共有する他のＣＰＵ１１ａまたは１１ｂに渡し、当該演算結果を用いた演算をＣＰＵ１１ａまたは１１ｂに行わせる。この際、他のＣＰＵ１１ａまたは１１ｂは、演算結果取得部１１１ａ、１１１ｂによって、演算結果を取得する。
【００２７】
通知部１１４ａ、１１４ｂは、ＣＰＵ１１ａまたは１１ｂによる演算結果がメモリ１２に書き込まれたこと／メモリ１２から読み出されたことを、メモリ１２を共有する他のＣＰＵ１１ａまたは１１ｂに通知する。なお、本実施形態において、通知部１１４ａ、１１４ｂは、メモリ１２に対して、ＣＰＵ１１ａまたは１１ｂへの割込を指示する所定のメッセージを送信することで、演算結果がメモリ１２に書き込まれたこと／メモリ１２から読み出されたことを通知する。本実施形態では、演算結果引渡部１１３ａ、１１３ｂによる、演算結果の書き込みまたは読み出しを指示するメッセージと共に、通知部１１４ａ、１１４ｂによる、ＣＰＵ１１ａまたは１１ｂへの割込を指示する所定のメッセージが送信される。このようにして、通知部１１４ａ、１１４ｂは、メモリ１２を共有する他のＣＰＵ１１ａまたは１１ｂに対する割込を発生させる（所謂ドアベル割込）ことで、演算結果がメモリ１２に書き込まれたこと／メモリ１２から読み出されたことを、他の処理ユニットＣＰＵ１１ａまたは１１ｂに通知する。
【００２８】
このため、メモリ１２は、ＣＰＵ１１ａとＣＰＵ１１ｂに対して割込を行うための割込部１２１を備えている。
【００２９】
メモリ１２は、演算結果の書き込みを行ったＣＰＵ１１ａまたは１１ｂから、他のＣＰＵ（メモリ１２を共有しているＣＰＵのうち、書き込み／読み出しを行ったＣＰＵ以外のＣＰＵ）への割込を指示する所定のメッセージを受け取った場合に、ＣＰＵ１１ａまたは１１ｂに対する割込を発生させる。このようにすることで、通知部１１４ａ、１１４ｂは、演算結果が書き込まれたこと／読み出されたことを、メモリ１２を共有するＣＰＵに対して通知する。より具体的には、メモリ１２は、受け取ったメッセージの内容、またはメッセージを受信したポートが何れのポートであるかによって、割込指示を行ったＣＰＵを特定することが出来、割込指示を行ったＣＰＵ以外のＣＰＵに対して、割込を行う。
【００３０】
図２に示した例では、ＣＰＵ１１ａ用の演算結果書込領域１２２ａに演算結果が書込まれ、ＣＰＵ１１ａからメモリ１２に対して割込指示が行われると、割込部１２１は、ＣＰＵ１１ｂに対して割込を行い、ＣＰＵ１１ａによる演算結果が書き込まれたことを、ＣＰＵ１１ｂに対して通知する。そして、ＣＰＵ１１ａ用の演算結果書込領域１２２ａから演算結果が読み出され、ＣＰＵ１１ｂからメモリ１２に対して割込指示が行われると、割込部１２１は、ＣＰＵ１１ａに対して割込を行い、ＣＰＵ１１ｂによって演算結果が読み出されたことを、ＣＰＵ１１ａに対して通知する。
【００３１】
また、ＣＰＵ１１ｂ用の演算結果書込領域１２２ｂに演算結果が書き込まれ、ＣＰＵ１１ｂからメモリ１２に対して割込指示が行われると、割込部１２１は、ＣＰＵ１１ａに対して割込を行い、ＣＰＵ１１ｂによる演算結果が書き込まれたことを、ＣＰＵ１１ａに対して通知する。そして、ＣＰＵ１１ｂ用の演算結果書込領域１２２ｂから演算結果が読み出され、ＣＰＵ１１ａからメモリ１２に対して割込指示が行われると、割込部１２１は、ＣＰＵ１１ｂに対して割込を行い、ＣＰＵ１１ａによって演算結果が読み出されたことを、ＣＰＵ１１ｂに対して通知する。なお、メモリ１２が３以上のＣＰＵによって共有されている場合、通知先のＣＰＵは２以上となる。この場合、割込部１２１は、これら２以上のＣＰＵに対して、略同時にまたは連続して割込を行う。
【００３２】
但し、本開示に係るシステム、記憶装置および方法を実施するにあたって、通知はその他の方法で行われてもよく、メモリ１２は上記説明したような割込部１２１を備えなくてもよい。例えば、演算結果を受け取る側のＣＰＵ１１ａまたは１１ｂが、書き込み／読み出しを行った側のＣＰＵによってメモリ１２に設定される書込完了フラグ／読出完了フラグ（後述する書込可フラグおよび読出可フラグとは異なる）を繰り返し確認する（所謂スピンロック）方法で通知が行われてもよい。
【００３３】
また、演算結果書込領域１２２ａまたは１２２ｂに演算結果の書き込み／読み出しを行ったＣＰＵ１１ａまたは１１ｂが、通知先のＣＰＵに対して直接割込を発生させてもよい。この場合、ＣＰＵ同士が、相手ＣＰＵの割込コントローラに接続されている必要がある。なお、このような方法が採用される場合、ＣＰＵとメモリとの間の信号線の長さや混雑状況、割込を行うタイミングによっては、演算結果書込領域１２２ａまたは１２２ｂへの実際の書き込み／読み出しが完了する前に割込が行われ、演算結果の書き込みが完了していない記憶領域を相手方ＣＰＵが読みに行ってしまう可能性や、演算結果の読み出しが完了していない記憶領域に相手方ＣＰＵが書き込んでしまう可能性があるため、書き込み完了／読み出し完了を確実に検知した後に割込を行う等の対処が行われてもよい。
【００３４】
また、本実施形態では、ＣＰＵ１１ａ、１１ｂによって相手方ＣＰＵに通知する演算結果が書き込まれる領域が、演算結果書込領域１２２ａ、１２２ｂとして固定されている場合について説明したが、演算結果が書き込まれる領域は、固定されていなくてもよい。演算結果が書き込まれる領域が固定されていない場合、ＣＰＵ１１ａ、１１ｂは、相手の装置に、演算結果が書き込まれたアドレスを通知する。この通知は、上記説明した割込と同時に行われてもよいし、書き込まれたアドレスをメモリ１２の所定の箇所に書き込むことで行われてもよい。
【００３５】
＜処理の流れ＞
図３および図４は、本実施形態に係る演算結果受渡処理の流れを示すフローチャートである。本フローチャートに示された処理は、本実施形態に係るシステムが、複数のＣＰＵ間で演算結果を受け渡しながら行う並列処理を行う間、繰り返し実行される。本実施形態に係る演算結果受渡処理は、本実施形態に係るシステムに属するＣＰＵの夫々によって実行されるが、以下、演算結果受渡処理の実行主体をＣＰＵ１１ａとして、処理の流れについて説明する。
【００３６】
なお、夫々のＣＰＵには、メモリ１２から書込通知割込を受けた場合に実行される書込通知割込ハンドラと、メモリ１２から読出通知割込を受けた場合に実行される読出通知割込ハンドラと、が設定されている。
【００３７】
書込通知割込ハンドラは、書込通知割込を受けると、読出可フラグを立て（ＴＲＵＥに設定し）、ＣＰＵがスリープしている場合にはＣＰＵのスリープを解除し、処理を戻すハンドラである（図示は省略する）。読出可フラグは、演算結果受渡処理において、他のＣＰＵによる演算結果が書き込まれたが自身による演算が完了していない等の場合に、演算結果の読み出しを遅延させるために用いられるフラグである。なお、本実施形態において、読出可フラグは、ＣＰＵ１１上に（例えば、ＣＰＵ１１が備えるレジスタに）保持される。
【００３８】
一方、読出通知割込ハンドラは、読出通知割込を受けると、書込可フラグを立て（ＴＲＵＥに設定し）、ＣＰＵがスリープしている場合にはＣＰＵのスリープを解除し、処理を戻すハンドラである（図示は省略する）。書込可フラグは、演算結果受渡処理において、他のＣＰＵによる演算結果の読み出しが完了したが、自身による演算が完了していない等の場合に、演算結果の書き込みを遅延させるために用いられるフラグである。なお、本実施形態において、書込可フラグは、ＣＰＵ１１上に（例えば、ＣＰＵ１１が備えるレジスタに）保持される。
【００３９】
ＣＰＵ１１ａは、並列処理において自身に割り当てられた演算を行う（ステップＳ１０１）。１周目の処理において、ＣＰＵ１１ａは、予め与えられたデータに基づいて演算を行う。但し、２周目以降の処理では、ＣＰＵ１１ａは、後述するステップＳ１１３において取得された、他のＣＰＵ（例えば、ＣＰＵ１１ｂ）による演算結果に基づいて演算を行う。
【００４０】
演算が完了すると、ＣＰＵ１１ａは、演算結果書込領域１２２ａへの書き込みが可能か否かを判定するための書込可フラグの状態を確認し、書込可フラグが、演算結果書込領域１２２ａへの書き込みが可能であることを示している（ＴＲＵＥである）場合、これを、演算結果書込領域１２２ａへの書き込みが許可されないことを示す値（ＦＡＬＳＥ）に設定する（ステップＳ１０２）。
【００４１】
ステップＳ１０２において書込可フラグが立っていた（ＴＲＵＥであった）ことが確認された場合、ＣＰＵ１１ａは、演算結果を、メモリ１２の演算結果書込領域１２２ａに書き込む（ステップＳ１０３およびステップＳ１０４）。ここで、ＣＰＵ１１ａは、メモリ１２に対して、メモリ１２を共有するＣＰＵ１１ａ以外のＣＰＵ（ここでは、ＣＰＵ１１ｂ）に対する書込通知割込指示を行う（ステップＳ１０５）。なお、ステップＳ１０３およびステップＳ１０４に示された処理は、ＣＰＵ１１ａからメモリ１２に対して指示が送信されることで行われるが、書込指示と割込指示は、別々に送信されてもよいし、１つのメッセージとして同時に送信されてもよい。
【００４２】
メモリ１２の割込部１２１は、ＣＰＵ１１ａからの書込通知割込指示を受けて、ＣＰＵ１１ｂに対して、ＣＰＵ１１ａによる演算結果の書き込みが完了したことを通知する書込通知割込を行う。このようにして、演算結果がメモリ１２に書き込まれたことが、ＣＰＵ１１ｂに通知される。
【００４３】
メモリ１２から書込通知割込を受けたＣＰＵ１１ｂは、上述した書込通知割込ハンドラを実行する。その後、ＣＰＵ１１ａと同様に演算結果受渡処理を実行するＣＰＵ１１ｂは、複数の処理ユニットのうち、メモリ１２を自身と共有するＣＰＵ１１ａによる演算結果を、メモリ１２の演算結果書込領域１２２ａから取得する。即ち、上記処理が実行されることで、ＣＰＵ１１ａは、演算結果を他の処理ユニット（ここでは、ＣＰＵ１１ｂ）に渡し、該演算結果を用いた演算を他の処理ユニットに行わせることが出来る。
【００４４】
一方、ステップＳ１０２において書込可フラグが立っていなかった（ＦＡＬＳＥであった）ことが確認された場合、ＣＰＵ１１ｂ等の他のＣＰＵによる演算結果書込領域１２２ａからの読み出しが完了していない可能性があり、演算結果の書き込みを行うことが出来ない。このため、ＣＰＵ１１ａは、自身をスリープさせる（ステップＳ１０７）。なお、上述した割込ハンドラにおけるＣＰＵのスリープ状態の判定に、スリープ状態を示すフラグを用いる場合、ＣＰＵ１１ａは、スリープに入る直前にスリープフラグを立てる。この際、ステップＳ１０２に示す処理からＣＰＵがスリープフラグを立ててスリープに入る処理までの一連の処理は、アトミックであることが好ましい。
【００４５】
スリープに入ったＣＰＵ１１ａは、ＣＰＵ１１ｂ等の他のＣＰＵからの割込を受けて、上述の書込通知割込ハンドラまたは読出通知割込ハンドラを実行する。ここで、受けた割込が読出通知割込であった場合、読出通知割込ハンドラによってＣＰＵが起こされ（スリープ状態が解除され）、書込可フラグが立つため、演算結果の書き込みが行われる（ステップＳ１０４）。なお、スリープ状態の判定にスリープフラグを用いる場合、スリープ状態の解除後にスリープフラグを倒す処理を行うが、スリープ状態を解除しスリープフラグを倒す一連の処理は、アトミックであることが好ましい。
【００４６】
次に、ＣＰＵ１１ａは、演算結果書込領域１２２ｂからの読み出しが可能か否かを判定するための読出可フラグの状態を確認し、読出可フラグが、演算結果書込領域１２２ｂからの読み出しが可能であることを示している（ＴＲＵＥである）場合、これを、演算結果書込領域１２２ｂからの読み出しが許可されないことを示す値（ＦＡＬＳＥ）に設定する（ステップＳ１１１）。
【００４７】
ステップＳ１１１において読出可フラグが立っていた（ＴＲＵＥであった）ことが確認された場合、ＣＰＵ１１ａは、複数の処理ユニットのうち、メモリ１２を自身と共有するＣＰＵ１１ｂによる演算結果を、メモリ１２の演算結果書込領域１２２ｂから読み出す（ステップＳ１１２およびステップＳ１１３）ことで取得する。ここで読み出される演算結果は、ＣＰＵ１１ａによる演算結果受渡処理と並行してＣＰＵ１１ｂによって行われた演算結果受渡処理の結果メモリ１２に書込まれた演算結果である。
【００４８】
ＣＰＵ１１ａは、演算結果の読み出しが完了したことをＣＰＵ１１ｂに通知するために、読出が完了したことを通知するためのＣＰＵ１１ｂへの割込を行うよう、メモリ１２に指示する（読出通知割込指示。ステップＳ１１４）。なお、ステップＳ１１３およびステップＳ１１４に示された処理は、ＣＰＵ１１ａからメモリ１２に対して指示が送信されることで行われるが、読出指示と割込指示は、別々に送信されてもよいし、１つのメッセージとして同時に送信されてもよい。
【００４９】
メモリ１２の割込部１２１は、ＣＰＵ１１ａからの読出通知割込指示を受けて、ＣＰＵ１１ｂに対して、ＣＰＵ１１ａによる読み出しが完了したことを通知する読出通知割込を行う。このようにして、演算結果がメモリ１２から読み出されたことが、ＣＰＵ１１ｂに通知される。読出通知割込を受けたＣＰＵ１１ｂは、先述した読出通知割込ハンドラを実行する。
【００５０】
一方、ステップＳ１１１において読出可フラグが立っていなかった（ＦＡＬＳＥであった）ことが確認された場合、ＣＰＵ１１ｂ等の他のＣＰＵによる演算結果書込領域１２２ｂへの書き込みが完了していない可能性があり、演算結果の読み出しを行うことが出来ない。このため、ＣＰＵ１１ａは、自身をスリープさせる（ステップＳ１１６）。なお、上述した割込ハンドラにおけるＣＰＵのスリープ状態の判定に、スリープ状態を示すフラグを用いる場合、ＣＰＵ１１ａは、スリープに入る直前にスリープフラグを立てる。この際、ステップＳ１１１に示す処理からＣＰＵがスリープフラグを立ててスリープに入る処理までの一連の処理は、アトミックであることが好ましい。
【００５１】
スリープに入ったＣＰＵ１１ａは、ＣＰＵ１１ｂ等の他のＣＰＵからの割込を受けて、上述の書込通知割込ハンドラまたは読出通知割込ハンドラを実行する。ここで、受けた割込が書込通知割込であった場合、書込通知割込ハンドラによってＣＰＵが起こされ（スリープ状態が解除され）、読出可フラグが立つため、演算結果の読み出しが行われる（ステップＳ１１３）。なお、スリープ状態の判定にスリープフラグを用いる場合、スリープ状態の解除後にスリープフラグを倒す処理を行うが、スリープ状態を解除し、スリープフラグを倒す一連の処理は、アトミックであることが好ましい。その後、処理はステップＳ１０１へ戻る。
【００５２】
なお、図３および図４のフローチャートでは、ＣＰＵ１１ａの処理について説明したが、本実施形態に係る並列処理では、上記説明したＣＰＵ１１ａによる演算結果受渡処理と並行して、メモリ１２を共有する他のＣＰＵ（ここでは、ＣＰＵ１１ｂ）も、演算結果受渡処理を行う。但し、処理主体がＣＰＵ１１ｂである点、演算結果が書き込まれるメモリ１２上の領域が演算結果書込領域１２２ｂである点、および割込が行われる対象がＣＰＵ１１ａ（メモリ１２を共有するＣＰＵ１１ｂ以外のＣＰＵ）である点で、図３および図４に示した演算結果受渡処理と異なる。
【００５３】
なお、本実施形態では、演算結果が１回書き込まれる毎に割込が行われ、相手方ＣＰＵに演算結果が渡される例について説明したが、割込は、複数回の演算結果書き込みに対して１回行われてもよい。即ち、図３および図４に示した処理のうち、演算処理が所定回数繰り返された後に、演算結果書込処理が行われることとしてもよい（図示は省略する）。
【００５４】
＜バリエーション＞
本開示に係るシステムは、複数の処理ユニットおよび少なくとも１の記憶装置を備えていればよく、２つのＣＰＵと１つのメモリを例示した図１および図２の構成に限定されない。以下に、本開示に係るシステムの構成のバリエーションを示す。
【００５５】
例えば、有限要素解析等において解析対象のデータが立方体（所謂ボクセル）を積層したものである場合、解析対象の夫々は、隣接する６つの他の解析対象と影響し合っている。このため、従来、解析を行うＣＰＵをトーラス状またはメッシュ状に接続し、並列に動作するＣＰＵ間で演算結果を送受信しながら解析を行うことが行われている。本実施形態に係るシステムにおいても、複数のＣＰＵは、論理上１次元または多次元のトーラスを構成するように、メモリを介して接続されてもよい。また、複数のＣＰＵは、各ＣＰＵがノード（交点）となるメッシュを論理上構成するように、メモリを介して接続されてもよい（即ち、トーラスでなくてもよい）。しかし、このようなシステムでは、処理のステップ毎に隣接ノード（ＣＰＵ）とデータを交換する必要があるため、このデータ交換にかかる時間が、システム全体の性能に大きく影響する。特に、従来の、トーラス状またはメッシュ状に接続された並列処理システムでは、ＣＰＵ同士を繋ぐ接続線が長くなり、遅延が増大する。このため、本開示に係るシステム、記憶装置および方法は、ＣＰＵがトーラス状またはメッシュ状に接続されたシステムにおいても、ＣＰＵ間での演算結果の受け渡しをより高速にし、効果を発揮する。但し、本実施形態に係るシステムにおいて、複数のＣＰＵの接続態様には、トーラス状またはメッシュ状以外の態様が採用されてもよい。
【００５６】
図５は、本実施形態において、ＣＰＵが２次元トーラス状に接続されたシステムの概略を示す図である。また、図６は、本実施形態において、ＣＰＵが３次元トーラス状に接続されたシステムの概略を示す図である。なお、上述の通り、本システムにおいてＣＰＵはメモリを共有することで互いに通信可能に接続されるが、図５および図６においては、ノードとしてのＣＰＵの論理上の位置関係のみを図示しており、ＣＰＵ間に配置されるメモリについては図示を省略している。
【００５７】
図５によれば、マトリクス状に配置された各ＣＰＵのうち、隣同士に配置されたＣＰＵが通信可能に接続され、更に一端に配置されたＣＰＵと他端に配置されたＣＰＵとが通信可能に接続されることで、トーラスを構成していることが分かる。また、図６によれば、図５に示された２次元トーラスが積層され、更に、積層方向において隣同士に配置されたＣＰＵが通信可能に接続され、積層方向において一端に配置されたＣＰＵと他端に配置されたＣＰＵとが通信可能に接続されることで、３次元トーラスを構成していることが分かる。なお、本実施形態では、２次元および３次元のトーラスについて例示したが、トーラスの次数はこの例示に限定されない。
【００５８】
トーラス状のシステム（図５および図６を参照）やメッシュ状のシステム（図示は省略する）において、メモリは、ＣＰＵとＣＰＵとの間（但し、論理上の位置であって物理的な位置ではない）に配置される。そして、各々のメモリは、トーラスまたはメッシュにおいて隣同士に配置された２以上のＣＰＵによって共有される。即ち、図１に示す構成が繰り返されることで、トーラス状またはメッシュ状のシステムが構築され、ＣＰＵ１１ａは、システムに含まれる複数のＣＰＵのうち、トーラスまたはメッシュにおいて隣に配置されたＣＰＵ１１ｂとメモリ１２を共有する。
【００５９】
図７および図８は、本実施形態に係るシステムにおいて、ＣＰＵ間にメモリをインターコネクトするバリエーションを示す図である。
【００６０】
図７に示す態様では、メモリは、２つのＣＰＵによって共有される。換言すれば、トーラスまたはメッシュにおいて隣同士に位置する２つのＣＰＵは、演算結果のやり取りのために、専用のメモリを用いることが出来る。図５に示す２次元トーラスにこのメモリーインターコネクト態様を適用した場合、１のＣＰＵは４つのメモリに接続される。図６に示す３次元トーラスにこのメモリーインターコネクト態様を適用した場合、１のＣＰＵは図７に示した４つの他に上下２つを加えた合計６つのメモリに接続される（図示は省略する）。
【００６１】
図８に示す態様では、メモリは、３以上（図８の例では、４つ）のＣＰＵによって共有される。図５に示す２次元トーラスにこのメモリーインターコネクト態様を適用した場合、１のＣＰＵは４つのメモリに接続される。図６に示す３次元トーラスにこのメモリーインターコネクト態様を適用した場合、メモリは、あるＣＰＵの位置を中心とする立方体の頂点の位置（８つ）に配置されるため、１のＣＰＵは８つのメモリに接続される（図示は省略する）。
【００６２】
上記説明した実施形態によれば、複数のＣＰＵを備えるシステムにおいて、ＣＰＵ間での演算結果の受け渡しをより高速にし、システム全体の性能を向上させることが出来る。なお、上述の通り、上記に説明した実施の形態は、例示であって、本開示に係るシステム、記憶装置および方法を具体的構成に限定するものではない。実施にあたっては、実施形態に応じた具体的構成が適宜採用され、また、種々の改良や変形が行われてよい。
【図１】
2015121986.tif 000003
【図２】
2015121986.tif 000004
【図３】
2015121986.tif 000005
【図４】
2015121986.tif 000006
【図５】
2015121986.tif 000007
【図６】
2015121986.tif 000008
【図７】
2015121986.tif 000009
【図８】
2015121986.tif 000010
【図９】
2015121986.tif 000011
【国際調査報告】
2015121986.tif 000012
2015121986.tif 000013
2015121986.tif 000014
2015121986.tif 000015