(57)【要約】【課題】ＦＤＴＤ法における更新時のメモリアクセス回数を削減できる情報処理装置、情報処理方法および情報処理プログラムを提供する。【解決手段】情報処理装置は、Ｎ次元ＦＤＴＤ法の処理を行う。情報処理装置は、更新部を有する。更新部は、Ｎ次元の所定の座標の＋１方向のセルの更新を行い、更新した値をキャッシュメモリに格納し、更新した値を格納した後に、格納した値を用いて、該所定の座標のセルの更新を行う。【選択図】図１
2019191710.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ次元ＦＤＴＤ法の処理を行う情報処理装置であって、
Ｎ次元の所定の座標の＋１方向のセルの更新を行い、更新した値をキャッシュメモリに格納し、前記更新した値を格納した後に、前記格納した値を用いて、該所定の座標のセルの更新を行う更新部、
を有することを特徴とする情報処理装置。
【請求項２】
前記更新部は、前記所定の座標のセルの電界成分を更新し、前記所定の座標のセル、および、前記所定の座標の＋１方向のセルの更新後の電界成分と、前記所定の座標のセルの更新前の磁界成分とを用いて、前記所定の座標のセルの磁界成分を更新する、
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記更新部は、解析対象の領域における座標の値が最大値であるセルから、前記座標の値が最小値であるセルに向かう順にセルの更新を行う、
ことを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
複数の前記更新部と、
更新するセルの排他制御を行うカウンタと、
セルの更新状況を管理する管理配列と、を有し、
前記更新部は、前記カウンタの値に基づいて、前記更新するセルを決定し、決定した前記セルの更新結果を前記管理配列に格納する、
ことを特徴とする請求項１〜３のいずれか１つに記載の情報処理装置。
【請求項５】
前記更新部は、ストリーミングプロセッサに対応するブロックであり、前記キャッシュメモリは、前記ストリーミングプロセッサのシェアードメモリである、
ことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記カウンタおよび前記管理配列は、複数の前記ブロックからアクセス可能なグローバルメモリに配置される、
ことを特徴とする請求項５に記載の情報処理装置。
【請求項７】
前記ブロックは、複数の前記セルを含む領域に対応し、該領域内を複数のスレッドが並列処理することで前記セルを更新する、
ことを特徴とする請求項５または６に記載の情報処理装置。
【請求項８】
Ｎ次元ＦＤＴＤ法の処理をコンピュータが実行する情報処理方法であって、
Ｎ次元の所定の座標の＋１方向のセルの更新を行い、更新した値をキャッシュメモリに格納し、前記更新した値を格納した後に、前記格納した値を用いて、該所定の座標のセルの更新を行う、
処理を前記コンピュータが実行することを特徴とする情報処理方法。
【請求項９】
Ｎ次元ＦＤＴＤ法の処理をコンピュータに実行させる情報処理プログラムであって、
Ｎ次元の所定の座標の＋１方向のセルの更新を行い、更新した値をキャッシュメモリに格納し、前記更新した値を格納した後に、前記格納した値を用いて、該所定の座標のセルの更新を行う、
処理を前記コンピュータに実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法および情報処理プログラムに関する。
【背景技術】
【０００２】
電磁場の解析やシミュレーションに用いられるＦＤＴＤ（Finite-Difference  Time-Domain  Method）法は、空間を格子状のセルに分割し、マクスウェル方程式を時間と空間について差分法で解くことで、電界と磁界を計算する手法である。ＦＤＴＤ法は、コンピュータを用いて計算される。近年のコンピュータは、例えば、キャッシュメモリとメインメモリといったように、高速小容量のメモリと低速大容量のメモリを組み合わせた階層型のメモリ構造を有する。一方、ＦＤＴＤ法では、時刻ごとに電界と磁界とを交互に更新するため、メインメモリに格納された前の時刻のデータを利用する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１３９７２３号公報
【特許文献２】特開２００９−２４５０５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、ＦＤＴＤ法では、前の時刻のデータの読み込みや更新データの書き込みが多いため、メモリアクセスがボトルネックとなる。特に、階層型のメモリ構造では、低速なメインメモリに格納された前の時刻のデータを利用する場合に、アクセス遅延が増大し、処理の高速化の妨げとなる。
【０００５】
一つの側面では、ＦＤＴＤ法における更新時のメモリアクセス回数を削減できる情報処理装置、情報処理方法および情報処理プログラムを提供することにある。
【課題を解決するための手段】
【０００６】
一つの態様では、情報処理装置は、Ｎ次元ＦＤＴＤ法の処理を行う。情報処理装置は、更新部を有する。更新部は、Ｎ次元の所定の座標の＋１方向のセルの更新を行い、更新した値をキャッシュメモリに格納し、前記更新した値を格納した後に、前記格納した値を用いて、該所定の座標のセルの更新を行う。
【発明の効果】
【０００７】
ＦＤＴＤ法における更新時のメモリアクセス回数を削減できる。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施例１の情報処理装置の構成の一例を示すブロック図である。
【図２】図２は、１次元ＦＤＴＤ法の一例を示す図である。
【図３】図３は、１次元ＦＤＴＤ法における電界と磁界の関係の一例を示す図である。
【図４】図４は、２次元ＦＤＴＤ法の一例を示す図である。
【図５】図５は、２次元ＦＤＴＤ法における電界と磁界の関係の一例を示す図である。
【図６】図６は、電界の更新後に磁界を更新する場合のコードの一例を示す図である。
【図７】図７は、階層型メモリアーキテクチャの一例を示す図である。
【図８】図８は、更新順序の制約の一例を示す図である。
【図９】図９は、セルの更新順序のパターンの一例を示す図である。
【図１０】図１０は、セルの更新順序のパターンの組み合わせの一例を示す図である。
【図１１】図１１は、電界の更新後に磁界を更新する場合のメモリ状態の遷移の一例を示す図である。
【図１２】図１２は、電界と磁界を注目セルごとに更新する場合のメモリ状態の遷移の一例を示す図である。
【図１３】図１３は、電界と磁界を注目セルごとに更新する場合のコードの一例を示す図である。
【図１４】図１４は、実施例１の更新処理の一例を示すフローチャートである。
【図１５】図１５は、実施例２の情報処理装置の構成の一例を示すブロック図である。
【図１６】図１６は、ＧＰＵの構成の一例を示す図である。
【図１７】図１７は、ＧＰＵにおける電界の更新後に磁界を更新する場合の一例を示す図である。
【図１８】図１８は、更新処理におけるメモリ状態の遷移の一例を示す図である。
【図１９】図１９は、更新処理におけるメモリ状態の遷移の一例を示す図である。
【図２０】図２０は、更新処理におけるメモリ状態の遷移の一例を示す図である。
【図２１】図２１は、更新処理におけるメモリ状態の遷移の一例を示す図である。
【図２２】図２２は、更新処理におけるメモリ状態の遷移の一例を示す図である。
【図２３】図２３は、更新処理におけるメモリ状態の遷移の一例を示す図である。
【図２４】図２４は、更新処理におけるメモリ状態の遷移の一例を示す図である。
【図２５】図２５は、更新処理におけるメモリ状態の遷移の一例を示す図である。
【図２６】図２６は、更新処理におけるメモリ状態の遷移の一例を示す図である。
【図２７】図２７は、更新処理におけるメモリ状態の遷移の一例を示す図である。
【図２８】図２８は、３次元ＦＤＴＤ法における性能評価の一例を示す図である。
【図２９】図２９は、実施例２の更新処理の一例を示すフローチャートである。
【図３０】図３０は、Ｅ，Ｈ更新処理の一例を示すフローチャートである。
【図３１】図３１は、情報処理プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、図面に基づいて、本願の開示する情報処理装置、情報処理方法および情報処理プログラムの実施例を詳細に説明する。なお、本実施例により、開示技術が限定されるものではない。また、以下の実施例は、矛盾しない範囲で適宜組みあわせてもよい。
【実施例１】
【００１０】
図１は、実施例１の情報処理装置の構成の一例を示すブロック図である。図１に示す情報処理装置１００は、Ｎ次元ＦＤＴＤ法の処理を行う情報処理装置の一例である。情報処理装置１００は、Ｎ次元の所定の座標の＋１方向のセルの更新を行い、更新した値をキャッシュメモリに格納し、更新した値を格納した後に、格納した値を用いて、該所定の座標のセルの更新を行う。これにより、情報処理装置１００は、ＦＤＴＤ法における更新時のメモリアクセス回数を削減できる。なお、以下の説明では、セルを要素とも表現する場合がある。
【００１１】
まず、図２から図６を用いて、ＦＤＴＤ法における電界と磁界の計算について説明する。図２は、１次元ＦＤＴＤ法の一例を示す図である。図２の計算順序１０に示すように、１次元ＦＤＴＤ法では、電界Ｅｘ（ｔ１）を計算するには、同じ位置の時刻が１ステップ前の電界Ｅｘ（ｔ０）および磁界Ｈｘ（ｔ０）と、時刻が１ステップ前で位置が−１方向の磁界Ｈｘ（ｔ０）とが必要となる。また、磁界Ｈｘ（ｔ１）を計算するには、同じ位置の１ステップ前の磁界Ｈｘ（ｔ０）と、同じ位置および位置が＋１方向の電界Ｅｘ（ｔ１）とが必要となる。この関係を模式的に示すと、グラフ１１のように示すことができる。
【００１２】
図３は、１次元ＦＤＴＤ法における電界と磁界の関係の一例を示す図である。図３に示す表１２は、１次元ＦＤＴＤ法における更新対象と、必要なデータとを対応付けた表である。表１２では、位置をｘ、時刻をｔで表すと、更新対象が位置ｘ，時刻ｔの電界Ｅである場合、位置ｘ，時刻ｔ−１の電界Ｅおよび磁界Ｈと、位置ｘ−１，時刻ｔ−１の磁界Ｈとが必要となることを表す。また、表１２では、更新対象が位置ｘ，時刻ｔの磁界Ｈである場合、位置ｘ，時刻ｔ−１の磁界Ｈと、位置ｘ，時刻ｔの電界Ｅと、位置ｘ＋１，時刻ｔの電界Ｅとが必要となることを表す。
【００１３】
図４は、２次元ＦＤＴＤ法の一例を示す図である。図４の依存関係１３に示すように、２次元ＦＤＴＤ法では、電界Ｅを計算するには、同じ位置の時刻が１ステップ前の電界Ｅおよび磁界Ｈと、ｘ軸ｙ軸それぞれ−１方向の時刻が１ステップ前の磁界Ｈとが必要となる。また、依存関係１４に示すように、磁界Ｈを計算するには、同じ位置の時刻が１ステップ前の磁界Ｈと、ｘ軸ｙ軸それぞれ＋１方向の電界Ｅとが必要となる。計算順序１５は、依存関係１３，１４を座標（０，０）〜（７，７）の領域に対して適用した場合を模式的に示したものである。なお、計算順序１５では、電界Ｅと磁界Ｈとの更新は、１／２ステップずれているものとする。つまり、時刻ｔ＝１では、電界Ｅの更新後に磁界Ｈを更新することを表している。
【００１４】
図５は、２次元ＦＤＴＤ法における電界と磁界の関係の一例を示す図である。図５に示す表１６は、２次元ＦＤＴＤ法における更新対象と、必要なデータとを対応付けた表である。表１６では、位置を（ｘ，ｙ）、時刻をｔで表す。このとき、更新対象が位置（ｘ，ｙ），時刻ｔの電界Ｅである場合、位置（ｘ，ｙ），時刻ｔ−１の電界Ｅおよび磁界Ｈと、位置（ｘ−１，ｙ），時刻ｔ−１の磁界Ｈと、位置（ｘ，ｙ−１），時刻ｔ−１の磁界Ｈとが必要となることを表す。また、表１６では、更新対象が位置（ｘ，ｙ），時刻ｔの磁界Ｈである場合、位置（ｘ，ｙ），時刻ｔ−１の磁界Ｈと、位置（ｘ，ｙ），時刻ｔの電界Ｅと、位置（ｘ＋１，ｙ），時刻ｔの電界Ｅと、位置（ｘ，ｙ＋１），時刻ｔの電界Ｅとが必要となることを表す。
【００１５】
図６は、電界の更新後に磁界を更新する場合のコードの一例を示す図である。図６に示すコード１７は、２次元ＦＤＴＤ法における解析対象の領域について、時刻ｔの電界Ｅを全セルについて更新した後で、時刻ｔの磁界Ｈを全セルについて更新する場合のコードの一例である。なお、コード１７において、α，β，γは定数である。コード１７では、１つのセルについて、電界Ｅの更新にデータを５回リードし１回ライトするとともに、演算を４回行う。各セルのデータが４バイトであるとすると、演算４回につき２４バイトのメモリアクセスが生じる。つまり、演算１回あたり６バイトのメモリアクセスが生じる。
【００１６】
同様に、コード１７では、１つのセルについて、磁界Ｈの更新にデータを５回リードし２回ライトするとともに、演算を８回行う。各セルのデータが４バイトであるとすると、演算８回につき２８バイトのメモリアクセスが生じる。つまり、演算１回あたり３．５バイトのメモリアクセスが生じる。これに対して、ＧＰＵ（Graphics  Processing  Unit）のメモリ性能および演算性能は、例えば、ＮＶＩＤＩＡ（登録商標）社のＰ１００では、メモリ性能が７３２ＧＢ／ｓ、演算性能が１０．６Ｔｆｌｏｐｓである。つまり、Ｐ１００では、演算１回あたり０．０６９バイトのメモリアクセスとなる。このように、ＦＤＴＤ法が要求するメモリ性能は、既存のＧＰＵと比べて遥かに大きく、ＦＤＴＤ法ではメモリアクセスがボトルネックとなる。
【００１７】
次に、図７を用いて階層型のメモリ構造について説明する。図７は、階層型メモリアーキテクチャの一例を示す図である。図７に示すように、近年のコンピュータは、コアとメインメモリとの間に複数階層のキャッシュメモリを備える。この様な階層的なメモリ構造では、各メモリのアクセス速度および容量が異なる。階層的なメモリ構造では、低速なメインメモリからデータを読み込むときに、高速なキャッシュメモリにデータが格納される。つまり、キャッシュメモリにデータがある場合には、高速にデータを読み込むことが可能である。なお、暫くの間参照されなかったキャッシュメモリのデータは、他のデータで上書きされる。図７の例では、Ｌ１キャッシュに格納されているデータは最も高速に読み込むことができるが、Ｌ１〜ＬＬキャッシュ内に格納されていないデータは、メインメモリから読み込むことになり、ボトルネックとなる。
【００１８】
続いて、情報処理装置１００の構成について説明する。図１に示すように、情報処理装置１００は、通信部１１０と、表示部１１１と、操作部１１２と、記憶部１２０と、制御部１３０とを有する。なお、情報処理装置１００は、図１に示す機能部以外にも既知のコンピュータが有する各種の機能部、例えば各種の入力デバイスや音声出力デバイス等の機能部を有することとしてもかまわない。
【００１９】
通信部１１０は、例えば、ＮＩＣ（Network  Interface  Card）等によって実現される。通信部１１０は、図示しないネットワークを介して他の情報処理装置と有線または無線で接続され、他の情報処理装置との間で情報の通信を司る通信インタフェースである。通信部１１０は、例えば、他の端末から解析対象のデータを受信する。また、通信部１１０は、他の端末に、解析結果を送信する。
【００２０】
表示部１１１は、各種情報を表示するための表示デバイスである。表示部１１１は、例えば、表示デバイスとして液晶ディスプレイ等によって実現される。表示部１１１は、制御部１３０から入力された表示画面等の各種画面を表示する。
【００２１】
操作部１１２は、情報処理装置１００のユーザから各種操作を受け付ける入力デバイスである。操作部１１２は、例えば、入力デバイスとして、キーボードやマウス等によって実現される。操作部１１２は、ユーザによって入力された操作を操作情報として制御部１３０に出力する。なお、操作部１１２は、入力デバイスとして、タッチパネル等によって実現されるようにしてもよく、表示部１１１の表示デバイスと、操作部１１２の入力デバイスとは、一体化されるようにしてもよい。
【００２２】
記憶部１２０は、例えば、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子、ハードディスクや光ディスク等の記憶装置によって実現される。記憶部１２０は、電界記憶部１２１と、磁界記憶部１２２とを有する。また、記憶部１２０は、制御部１３０での処理に用いる情報を記憶する。なお、本実施例では、電界記憶部１２１および磁界記憶部１２２は、メインメモリに格納した状態を想定して説明するが、ＦＤＴＤ法の演算が完了した後のデータは、ハードディスクやフラッシュメモリ等の記憶装置に記憶するようにしてもよい。
【００２３】
電界記憶部１２１は、ＦＤＴＤ法における解析対象の領域について、セル（要素）ごとに電界成分を記憶する。
【００２４】
磁界記憶部１２２は、ＦＤＴＤ法における解析対象の領域について、セル（要素）ごとに磁界成分を記憶する。
【００２５】
制御部１３０は、例えば、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等によって、内部の記憶装置に記憶されているプログラムがＲＡＭを作業領域として実行されることにより実現される。また、制御部１３０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路により実現されるようにしてもよい。
【００２６】
制御部１３０は、設定部１３１と、更新部１３２とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部１３０の内部構成は、図１に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
【００２７】
設定部１３１は、例えば、ユーザから入力された解析対象の空間のパラメータを更新部１３２に設定する。パラメータは、例えば、空間の透磁率、導電率、電界および磁界の初期状態、電界および磁界の発信源に対応する更新式等が挙げられる。また、設定部１３１は、電界記憶部１２１および磁界記憶部１２２の各セルに対応する配列の初期化を行う。
【００２８】
更新部１３２は、設定部１３１による配列の初期化が完了すると、解析対象の空間の各セルについて、電界成分（電界Ｅ）および磁界成分（磁界Ｈ）の更新を開始する。なお、以下の説明では、電界Ｅおよび磁界Ｈを電界成分および磁界成分ともいう。また、以下の説明では、電界成分および磁界成分を纏めて電磁界成分ともいう。ここで、図８から図１０を用いて更新順序の制約について説明する。
【００２９】
図８は、更新順序の制約の一例を示す図である。図８に示すように、１次元ＦＤＴＤ法では、座標ｘの注目セルの更新前に、座標ｘ＋１のセルを先に更新する。２次元ＦＤＴＤ法では、座標（ｘ，ｙ）の注目セルの更新前に、座標（ｘ＋１，ｙ）、座標（ｘ，ｙ＋１）のセルを先に更新する。３次元ＦＤＴＤ法では、座標（ｘ，ｙ，ｚ）の注目セルの更新前に、座標（ｘ＋１，ｙ，ｚ）、座標（ｘ，ｙ＋１，ｚ）、座標（ｘ，ｙ，ｚ＋１）のセルを先に更新する。すなわち、更新部１３２は、磁界の更新式の依存関係の順にセルを更新するように更新順序に制約を設ける。例えば、（０，０）〜（２，２）で表す領域では、（２，２）→（１，２）→（０，２）→（２，１）→（１，１）→（０，１）→（２，０）→（１，０）→（０，０）の順となる。更新部１３２は、この様に更新順序に制約を設けることで、セルごとに電界と磁界の更新を行うことができる。
【００３０】
図９は、セルの更新順序のパターンの一例を示す図である。図９に示すように、セルの更新順序のパターンは、例えば「パターン１」から「パターン５」に示すような順序が考えられる。また、「パターン３」では、同じ矢印のセルの更新に順序はなく、同じ矢印に含まれるセルであれば、どのセルから更新してもよい。すなわち、更新部１３２は、解析対象の領域における座標の値が最大値であるセルから、座標の値が最小値であるセルに向かう順にセルの更新を行う。
【００３１】
図１０は、セルの更新順序のパターンの組み合わせの一例を示す図である。図１０に示すように、図９に示すセルの更新順序のパターンは組み合わせてもよい。図１０の例は、セルを複数含む処理ブロック単位の更新順序は「パターン５」とし、処理ブロック内のセルの更新順序は「パターン２」とした場合である。
【００３２】
更新部１３２は、電磁界成分の更新を開始すると、全セルの電磁界成分の更新が完了したか否かを判定する。更新部１３２は、全セルの電磁界成分の更新が完了していないと判定した場合には、磁界の更新式の依存関係順に更新していないセルを１つ選択する。すなわち、更新部１３２は、図９に示すセルの更新順序のパターンに従って、更新していないセルを１つ選択する。更新部１３２は、図８に示すセルの更新順序の制約に従って、選択したセルの電界成分の更新を行い、その後、当該セルの磁界成分の更新を行って、全セルの電磁界成分の更新が完了したか否かの判定に戻る。
【００３３】
一方、更新部１３２は、全セルの電磁界成分の更新が完了したと判定した場合には、全ステップの計算が終了したか否かを判定する。更新部１３２は、全ステップの計算が終了していないと判定した場合には、時刻のステップを１つ進めて、次のステップについて全セルの電磁界成分の更新を行う。また、更新部１３２は、全ステップの計算が終了した場合には、電磁界成分の更新を終了する。
【００３４】
ここで、図１１および図１２を用いて、電磁界成分の更新方法ごとのメモリ状態の遷移について説明する。図１１は、電界の更新後に磁界を更新する場合のメモリ状態の遷移の一例を示す図である。つまり、図１１は、メモリアクセスがボトルネックとなっている従来の更新の手法に対応する。図１１では、ＣＰＵ２０とキャッシュメモリ２１とメインメモリ２２とを有する場合において、処理の流れに応じたメモリ状態の遷移を表す。ＣＰＵ２０は、メインメモリ２２から電界データＥｃ１および磁界データＨｃ１を読み込むと、電界データＥｃ１および磁界データＨｃ１は、キャッシュメモリ２１にキャッシュされる。ＣＰＵ２０は、キャッシュメモリ２１に更新した電界データＥｃ２を格納する。キャッシュメモリ２１の電界データＥｃ２は、メインメモリ２２の電界データＥｃ１を上書きして更新する。
【００３５】
次に、ＣＰＵ２０は、メインメモリ２２から電界データＥｃ３および磁界データＨｃ２を読み込むと、電界データＥｃ３および磁界データＨｃ２は、キャッシュメモリ２１にキャッシュされる。このとき、キャッシュメモリ２１に格納された電界データＥｃ２は、電界データＥｃ３で上書きされる。ＣＰＵ２０は、キャッシュメモリ２１に更新した電界データＥｃ４を格納する。以後、ＣＰＵ２０は、メインメモリ２２の電界データが全て更新されるまで処理を繰り返す。
【００３６】
ＣＰＵ２０は、電界成分の更新が完了すると、磁界成分の更新を開始する。ＣＰＵ２０は、メインメモリ２２から電界データＥｃ２，Ｅｃ４および磁界データＨｃ１を読み込むと、電界データＥｃ２，Ｅｃ４および磁界データＨｃ１は、キャッシュメモリ２１にキャッシュされる。すなわち、ＣＰＵ２０は、電界成分の更新時に一度キャッシュメモリ２１に格納された電界データＥｃ２，Ｅｃ４がその後の処理で上書きされるため、再度メインメモリ２２から読み込んでいる。ＣＰＵ２０は、キャッシュメモリ２１に更新した磁界データＨｃ３を格納する。キャッシュメモリ２１の磁界データＨｃ３は、メインメモリ２２の磁界データＨｃ１を上書きして更新する。このように、図１１の例では、電界の更新および磁界の更新それぞれでセルの電磁界成分を低速なメインメモリ２２から読み込むことになる。
【００３７】
図１２は、電界と磁界を注目セルごとに更新する場合のメモリ状態の遷移の一例を示す図である。図１２は、本実施例の更新の手法に対応する。図１２では、ＣＰＵ２０ａとキャッシュメモリ２１とメインメモリ２２とを有する場合において、処理の流れに応じたメモリ状態の遷移を表す。なお、ＣＰＵ２０ａは、更新部１３２と同様の処理も行うものとする。
【００３８】
ＣＰＵ２０ａは、メインメモリ２２から電界データＥｒ１および磁界データＨｒ１，Ｈｒ２を読み込むと、電界データＥｒ１および磁界データＨｒ１，Ｈｒ２は、キャッシュメモリ２１にキャッシュされる。ＣＰＵ２０ａは、キャッシュメモリ２１に更新した電界データＥｒ２および磁界データＨｒ３を格納する。キャッシュメモリ２１の電界データＥｒ２および磁界データＨｒ３は、それぞれメインメモリ２２の電界データＥｒ１および磁界データＨｒ１を上書きして更新する。つまり、ＣＰＵ２０ａは、注目セルのキャッシュされた電界成分が電界データＥｒ２に更新された直後に、キャッシュメモリ２１に格納された電界データＥｒ２を参照して磁界成分を磁界データＨｒ３に更新する。
【００３９】
次に、ＣＰＵ２０ａは、メインメモリ２２から電界データＥｒ３および磁界データＨｒ４を読み込むと、電界データＥｒ３および磁界データＨｒ４は、キャッシュメモリ２１にキャッシュされる。このとき、キャッシュメモリ２１に格納された磁界データＨｒ３は、磁界データＨｒ４で上書きされる。ＣＰＵ２０ａは、キャッシュメモリ２１に更新した電界データＥｒ４および磁界データＨｒ５を格納する。このとき、キャッシュメモリ２１に格納された電界データＥｒ３および磁界データＨｒ２は、それぞれ電界データＥｒ４および磁界データＨｒ５で上書きされる。以後、ＣＰＵ２０ａは、メインメモリ２２の電界データおよび磁界データが全て更新されるまで処理を繰り返す。このように、図１２の例では、キャッシュメモリ２１に格納された電界データおよび磁界データを参照するので、低速なメインメモリ２２へのアクセス回数を低減できる。また、図１２の例では、一度のキャッシュで電磁界成分の更新ができる。
【００４０】
図１３は、電界と磁界を注目セルごとに更新する場合のコードの一例を示す図である。図１３に示すコード２３は、２次元ＦＤＴＤ法における解析対象の領域について、時刻ｔの電界Ｅと磁界Ｈとを注目セルごとに更新する場合のコードの一例である。なお、コード２３において、α，β，γは定数である。コード２３では、１つのセルについて、図６に示すコード１７と同じ回数のメモリアクセスが発生するが、電界成分の更新時に用いたデータは、磁界成分の更新時にキャッシュメモリ２１から読み込めるので、その分のメモリアクセスが高速化できる。
【００４１】
言い換えると、更新部１３２は、Ｎ次元の所定の座標の＋１方向のセルの更新を行い、更新した値をキャッシュメモリ２１に格納し、更新した値を格納した後に、格納した値を用いて、該所定の座標のセルの更新を行う。また、更新部１３２は、所定の座標のセルの電界成分を更新し、所定の座標のセルおよび所定の座標の＋１方向のセルの更新後の電界成分と、所定の座標のセルの更新前の磁界成分とを用いて、所定の座標のセルの磁界成分を更新する。また、更新部１３２は、解析対象の領域における座標の値が最大値であるセルから、座標の値が最小値であるセルに向かう順にセルの更新を行う。
【００４２】
次に、実施例１の情報処理装置１００の動作について説明する。図１４は、実施例１の更新処理の一例を示すフローチャートである。
【００４３】
設定部１３１は、電界記憶部１２１および磁界記憶部１２２の各セルに対応する配列の初期化を行う（ステップＳ１）。
【００４４】
更新部１３２は、設定部１３１による配列の初期化が完了すると、解析対象の空間の各セルについて、電磁界成分の更新を開始する。更新部１３２は、全セルの電磁界成分の更新が完了したか否かを判定する（ステップＳ２）。更新部１３２は、全セルの電磁界成分の更新が完了していないと判定した場合には（ステップＳ２：否定）、磁界の更新式の依存関係順に更新していないセルを１つ選択する（ステップＳ３）。
【００４５】
更新部１３２は、選択したセルの電界成分を更新する（ステップＳ４）。更新部１３２は、選択したセルの磁界成分を更新し（ステップＳ５）、ステップＳ２に戻る。
【００４６】
一方、更新部１３２は、全セルの電磁界成分の更新が完了したと判定した場合には（ステップＳ２：肯定）、全ステップの計算が終了したか否かを判定する（ステップＳ６）。更新部１３２は、全ステップの計算が終了していないと判定した場合には（ステップＳ６：否定）、時刻のステップを１つ進めて、ステップＳ２に戻る。
【００４７】
更新部１３２は、全ステップの計算が終了したと判定した場合には（ステップＳ６：肯定）、解析対象の空間の各セルについて、電磁界成分の更新を終了する。これにより、情報処理装置１００は、ＦＤＴＤ法における更新時のメモリアクセス回数を削減できる。また、情報処理装置１００は、各セルの電磁界成分の更新を、メインメモリの１回のスキャン走査で行うことができる。
【００４８】
なお、上記実施例１では、キャッシュメモリ２１を１階層として説明したが、これに限定されない。例えば、Ｌ１キャッシュからＬ３キャッシュまでの３階層のキャッシュメモリのような多階層のキャッシュメモリを用いてもよい。
【００４９】
このように、情報処理装置１００は、Ｎ次元ＦＤＴＤ法の処理を行う情報処理装置である。つまり、情報処理装置１００は、Ｎ次元の所定の座標の＋１方向のセルの更新を行い、更新した値をキャッシュメモリに格納し、更新した値を格納した後に、格納した値を用いて、該所定の座標のセルの更新を行う。その結果、情報処理装置１００は、ＦＤＴＤ法における更新時のメモリアクセス回数を削減できる。
【００５０】
また、情報処理装置１００は、所定の座標のセルの電界成分を更新し、所定の座標のセル、および、所定の座標の＋１方向のセルの更新後の電界成分と、所定の座標のセルの更新前の磁界成分とを用いて、所定の座標のセルの磁界成分を更新する。その結果、情報処理装置１００は、電磁界成分の更新時に用いるデータの一部をキャッシュメモリから取得できる。
【００５１】
また、情報処理装置１００は、解析対象の領域における座標の値が最大値であるセルから、座標の値が最小値であるセルに向かう順にセルの更新を行う。その結果、情報処理装置１００は、電磁界成分の更新時に用いるデータの一部をキャッシュメモリから取得できる。
【実施例２】
【００５２】
上記実施例１では、ＣＰＵ２０ａにおける電磁界成分の更新について説明したが、ＧＰＵを用いた電磁界成分の更新に適用してもよく、この場合の実施の形態につき、実施例２として説明する。なお、実施例１の情報処理装置１００と同一の構成には同一符号を付すことで、その重複する構成および動作の説明については省略する。
【００５３】
図１５は、実施例２の情報処理装置の構成の一例を示すブロック図である。図１５に示す情報処理装置２００は、実施例１の情報処理装置１００と比較して、制御部１３０に代えて制御部２３０を有し、さらに、ＧＰＵ２４０を有する。また、制御部２３０は、制御部１３０と比較して、設定部１３１に代えて設定部２３１を有し、更新部１３２を除いている。
【００５４】
設定部２３１は、実施例１の設定部１３１と同様に、例えば、ユーザから入力された解析対象の空間のパラメータをＧＰＵ２４０に設定する。また、設定部２３１は、電界記憶部１２１および磁界記憶部１２２の各セルに対応する配列Ｅ，Ｈと時刻ｔの初期化を行う。設定部２３１は、初期化を行った電界データおよび磁界データをＧＰＵ２４０に出力する。なお、電界データおよび磁界データは、電界記憶部１２１および磁界記憶部１２２からＧＰＵ２４０にＤＭＡ（Direct  Memory  Access）転送してもよい。
【００５５】
設定部２３１は、電界データおよび磁界データをＧＰＵ２４０に出力すると、ＧＰＵ関数を呼び出して、ＧＰＵ２４０にＥ，Ｈ更新処理の実行を指示する。設定部２３１は、ＧＰＵ２４０から更新終了の通知を受け付けると、電界記憶部１２１および磁界記憶部１２２を参照し、解析結果を、例えば表示部１１１に表示する。なお、ＧＰＵ２４０におけるＥ，Ｈ更新処理後の電界データおよび磁界データは、例えばＤＭＡ転送を用いて、ＧＰＵ２４０から電界記憶部１２１および磁界記憶部１２２に格納される。
【００５６】
ここで、図１６を用いてＧＰＵの構成について説明する。図１６は、ＧＰＵの構成の一例を示す図である。図１６のＧＰＵ３０は、ＧＰＵ２４０のハードウェア構成の一例である。ＧＰＵ３０は、グローバルメモリ３１と、複数のストリーミングプロセッサ３２とを有する。ストリーミングプロセッサ３２は、複数のコア３３と、各コア３３が共有するシェアードメモリ３４とを有する。なお、グローバルメモリ３１は、オフチップメモリとも呼ばれ、低速であるが大容量のメモリである。シェアードメモリ３４は、オンチップメモリとも呼ばれ、高速であるが小容量のメモリである。
【００５７】
図１６のグリッド３５は、ＧＰＵ３０に対応する階層的なスレッド構造の一例である。グリッド３５は、例えば、ＣＵＤＡ（Compute  Unified  Device  Architecture）（登録商標）の階層的なスレッド構造の一例である。グリッド３５は、複数のブロック３６を有する。各ブロック３６は、複数のスレッド３７を有する。同じブロック３６内の各スレッド３７は、同じシェアードメモリ３４上のデータの共有と実行中の同期が可能である。なお、スレッド３７の数は、コア３３の数よりも多い。また、ブロック３６は、非同期にストリーミングプロセッサ３２に割り当てられる。このため、ブロック３６間のスレッド３７で同期をとるには、一度ＧＰＵ３０の処理を終了させることになる。すなわち、処理中のシェアードメモリ３４のデータは、アクセス出来なくなるので、複数のブロック３６からアクセス可能なグローバルメモリ３１に書き込んでおくことになる。
【００５８】
図１５の説明に戻って、ＧＰＵ２４０は、グローバルメモリ２４１と、複数のブロック２４２とを有する。グローバルメモリ２４１は、電界２４１ａと、磁界２４１ｂと、カウンタ２４１ｃと、管理配列２４１ｄといった領域を有する。グローバルメモリ２４１は、実施例１のメインメモリ２２に相当し、図１６のグローバルメモリ３１に対応する。
【００５９】
電界２４１ａには、ＧＰＵ２４０でＥ，Ｈ更新処理を行う際に、電界データが格納される。電界データは、電界成分の更新に伴って随時更新される。電界２４１ａは、複数のセルを含む処理ブロック単位で、各ブロック２４２によって更新される。
【００６０】
磁界２４１ｂには、ＧＰＵ２４０でＥ，Ｈ更新処理を行う際に、磁界データが格納される。磁界データは、磁界成分の更新に伴って随時更新される。磁界２４１ｂは、電界２４１ａと同様に、複数のセルを含む処理ブロック単位で、各ブロック２４２によって更新される。
【００６１】
カウンタ２４１ｃは、排他制御のカウンタであり、カウンタ値を用いて各ブロック２４２が更新する処理ブロックを指定する。つまり、カウンタ２４１ｃは、非同期に起動されるブロック２４２に、動的に磁界の更新式の依存関係の順に処理ブロックを割り当てるために用いる。すなわち、カウンタ２４１ｃは、全てのブロック２４２が１つのカウンタを共有する。
【００６２】
管理配列２４１ｄは、電界成分および磁界成分それぞれについて、更新状況を管理する配列である。管理配列２４１ｄは、電界２４１ａおよび磁界２４１ｂの処理ブロックごとに時刻ｔの値を持つ。つまり、管理配列２４１ｄは、他のブロック２４２の更新状況を確認し、待機できるようにするものである。すなわち、電界成分の更新では磁界成分を、磁界成分の更新では電界成分を、他のブロック２４２の担当領域（処理ブロック）から参照するため、参照先が更新されたか否かを表すフラグとして、管理配列２４１ｄを用いる。
【００６３】
ブロック２４２は、図１６のＧＰＵ３０のハードウェア構成のうち、ストリーミングプロセッサ３２に対応する。つまり、ブロック２４２は、グリッド３５の階層的スレッド構造のうち、ブロック３６に対応する。ブロック２４２は、図１６のスレッド３７に対応するスレッドＴ０〜Ｔ２と、図１６のシェアードメモリ３４に対応するシェアードメモリ２４２ａとを有する。シェアードメモリ２４２ａは、スレッドＴ０〜Ｔ２からアクセス可能なメモリであり、実施例１のキャッシュメモリ２１に相当する。
【００６４】
また、各ブロック２４２は、実施例１の更新部１３２に相当し、設定部２３１からの指示に応じて、解析対象の空間の各処理ブロックについて、電界成分および磁界成分の更新を開始する。すなわち、ブロック２４２は、複数のセルを含む処理ブロック単位で磁界の更新式の依存関係順に電磁界成分を更新する。つまり、実施例２における各処理ブロックの更新順序のパターンは、実施例１における各セルの更新順序のパターンに対応する。
【００６５】
ブロック２４２は、設定部２３１のＧＰＵ関数の呼び出しに応じて、電磁界成分の更新処理（Ｅ，Ｈ更新処理）を実行する。ブロック２４２は、カウンタ２４１ｃの排他的インクリメント操作を実行する。つまり、カウンタ２４１ｃは、あるブロック２４２がインクリメント前のカウンタ値を取得して、カウンタ２４１ｃをインクリメントするまで、他のブロック２４２からのアクセスを受け付けない。
【００６６】
ブロック２４２は、全ての処理ブロック（要素）の更新が終了したか否かを判定する。ブロック２４２は、全ての処理ブロックの更新が終了したと判定した場合には、時刻ｔをインクリメントする。ブロック２４２は、時刻ｔが所定の時刻Ｔ以下であるか否かを判定する。ブロック２４２は、時刻ｔが所定の時刻Ｔ以下であると判定した場合には、インクリメントした時刻ｔについてＥ，Ｈ更新処理を実行する。ブロック２４２は、時刻ｔが所定の時刻Ｔより大きいと判定した場合には、Ｅ，Ｈ更新処理を終了する。
【００６７】
一方、ブロック２４２は、全ての処理ブロックの更新が終了していないと判定した場合には、カウンタ２４１ｃのカウンタ値をもとに計算座標を算出する。ブロック２４２は、管理配列２４１ｄを参照し、注目処理ブロックの電界成分の更新において参照する処理ブロックの更新が完了したか否かを判定する。ブロック２４２は、参照する処理ブロックの更新が完了していないと判定した場合には、引き続き、管理配列２４１ｄを参照する。
【００６８】
ブロック２４２は、参照する処理ブロックの更新が完了したと判定した場合には、注目処理ブロックの電界成分を更新する。ブロック２４２は、注目処理ブロックの電界成分の更新が完了すると、管理配列２４１ｄを参照し、注目処理ブロックの磁界成分の更新において参照する処理ブロックの更新が完了したか否かを判定する。ブロック２４２は、参照する処理ブロックの更新が完了していないと判定した場合には、引き続き、管理配列２４１ｄを参照する。
【００６９】
ブロック２４２は、参照する処理ブロックの更新が完了したと判定した場合には、注目処理ブロックの磁界成分を更新する。ブロック２４２は、注目処理ブロックの磁界成分を更新すると、当該注目処理ブロックの電磁界成分の更新が完了したとして、次の処理ブロックのＥ，Ｈ更新処理に進む。
【００７０】
ここで、図１７を用いて、電界の更新後に磁界を更新する従来の更新手法について説明する。図１７は、ＧＰＵにおける電界の更新後に磁界を更新する場合の一例を示す図である。図１７では、ＣＰＵ３８とＧＰＵ３９とが電磁界成分の更新処理を行う。ＧＰＵ３９は、グローバルメモリ４０とブロック４１とを有する。また、図１７の説明では、処理ブロックを「ブロック０」〜「ブロック３」の４つの処理ブロックとした場合とする。
【００７１】
ＣＰＵ３８は、電磁界成分に対応する配列Ｅ，Ｈを初期化し、時刻ｔ＝０に設定する（ステップＳ１１）。ＣＰＵ３８は、初期化したデータをＧＰＵ３９に出力する。ＧＰＵ３９は、初期化したデータをグローバルメモリ４０に格納する。ＣＰＵ３８は、ＧＰＵ関数を呼び出す（ステップＳ１２）。ＧＰＵ３９は、呼び出しに応じて電界成分を更新する（ステップＳ１３）。このとき、ＧＰＵ３９は、時刻ｔの電界成分の「ブロック０」〜「ブロック３」を、それぞれブロック４１が処理し、グローバルメモリ４０の同じ領域に、時刻ｔ＋１の電界成分として格納する。
【００７２】
ＣＰＵ３８は、電界成分の更新が完了すると、再度、ＧＰＵ関数を呼び出す（ステップＳ１４）。ＧＰＵ３９は、呼び出しに応じて磁界成分を更新する（ステップＳ１５）。ＧＰＵ３９は、時刻ｔの磁界成分の「ブロック０」〜「ブロック３」を、それぞれブロック４１が処理し、グローバルメモリ４０の同じ領域に、時刻ｔ＋１の磁界成分として格納する。このとき、磁界成分の更新では、他のブロック４１が更新した電界成分の値を参照する。なお、電界成分の更新では、同様に、他のブロック４１が更新した磁界成分の値を参照する。従って、図１７の例では、データの整合性をとるために、電界成分の更新と磁界成分の更新とが別のＧＰＵ関数に分かれることになる。すなわち、図１７の例では、電界成分と磁界成分とをそれぞれ更新する２つのＧＰＵ関数を、時刻ｔ≦Ｔとなるまで繰り返すことになる（ステップＳ１６）。
【００７３】
このように、図１７の例では、電磁界成分の更新において、全ての要素（処理ブロック）に対してグローバルメモリ４０からの読み書きが必要となってくる。つまり、図１７の例では、グローバルメモリ４０（オフチップメモリ）のバンド幅に律速されることになる。これに対し、実施例２では、電磁界成分の更新を同じＧＰＵ関数内で行うことで、グローバルメモリ４０へのアクセス回数を削減して高速化する。
【００７４】
続いて、図１８から図２７を用いて、実施例２の更新処理におけるメモリ状態の遷移について説明する。図１８から図２７は、更新処理におけるメモリ状態の遷移の一例を示す図である。図１８から図２７の例では、ブロック２４２−１とブロック２４２−２の２つのブロック２４２がＥ，Ｈ更新処理を行う場合について説明する。また、管理配列２４１ｄは、電界の管理配列２４１ｄ−Ｅと、磁界の管理配列２４１ｄ−Ｈとを設ける。なお、図１８から図２７の電界２４１ａおよび磁界２４１ｂは、９つの処理ブロックを有するものとする。各処理ブロックは、一番右上の処理ブロックを「ブロック０」、「ブロック０」の左隣を「ブロック１」、「ブロック０」の下を「ブロック２」、「ブロック１」の左隣を「ブロック３」、「ブロック１」の下を「ブロック４」とする。また、各処理ブロックは、「ブロック２」の下を「ブロック５」、「ブロック３」の下を「ブロック６」、「ブロック４」の下を「ブロック７」、「ブロック６」の下を「ブロック８」とする。
【００７５】
図１８に示すように、ブロック２４２−１のスレッドＴ０は、カウンタ２４１ｃをインクリメントする（ステップＳ２１）。カウンタ２４１ｃは、カウンタ値が「０」から「１」に変わる。
【００７６】
図１９に示すように、ブロック２４２−１のスレッドＴ０は、カウンタ２４１ｃからインクリメント前のカウンタ値「０」を取得してシェアードメモリ２４２ａ−１に格納する（ステップＳ２２）。
【００７７】
図２０に示すように、ブロック２４２−１は、電界２４１ａおよび磁界２４１ｂの処理ブロックのうち、最も座標値が大きい「ブロック０」の電界データおよび磁界データをシェアードメモリ２４２ａ−１に格納する（ステップＳ２３）。また、ブロック２４２−２のスレッドＴ０は、カウンタ２４１ｃをインクリメントする（ステップＳ２４）。カウンタ２４１ｃは、カウンタ値が「１」から「２」に変わる。
【００７８】
図２１に示すように、ブロック２４２−２は、電界２４１ａおよび磁界２４１ｂの処理ブロックのうち、更新順序の制約に基づいて「ブロック０」の左隣の「ブロック１」の電界データおよび磁界データをシェアードメモリ２４２ａ−２に格納する（ステップＳ２５）。
【００７９】
図２２に示すように、ブロック２４２−１は、磁界の管理配列２４１ｄ−Ｈを参照する。ブロック２４２−１は、図中の点線で囲った処理ブロックに対応する時刻がｔ＝０である場合、「ブロック０」の時刻ｔ＝１の電界の算出の際に参照する処理ブロックの更新が完了していると判定する（ステップＳ２６）。同様に、ブロック２４２−２は、磁界の管理配列２４１ｄ−Ｈを参照する。ブロック２４２−２は、図中の破線で囲った処理ブロックに対応する時刻がｔ＝０である場合、「ブロック１」の時刻ｔ＝１の電界の算出の際に参照する処理ブロックの更新が完了していると判定する（ステップＳ２７）。すなわち、ブロック２４２−１は、磁界の管理配列２４１ｄ−Ｈの点線で囲った処理ブロックに対応する時刻がｔならば、時刻ｔ＋１の電界が計算可能となる。また、ブロック２４２−２は、磁界の管理配列２４１ｄ−Ｈの破線で囲った処理ブロックに対応する時刻がｔならば、時刻ｔ＋１の電界が計算可能となる。
【００８０】
図２３に示すように、ブロック２４２−１およびブロック２４２−２は、電界２４１ａの処理ブロック「ブロック０」および「ブロック１」について、それぞれスレッドＴ０〜Ｔ２により処理ブロック内のセルの更新を行う（ステップＳ２８）。すなわち、ブロック２４２−１およびブロック２４２−２は、複数のセルを含む領域（処理ブロック）に対応し、該領域内を複数のスレッドが並列処理することでセルを更新する。このとき、ブロック２４２−１およびブロック２４２−２は、担当領域外の処理ブロックに含まれるセルの磁界データを用いる場合、担当領域外の処理ブロックのセルから磁界データを取得する。図２３では、ブロック２４２−２のスレッドＴ０は、処理ブロック「ブロック１」の電界データのうち左下の角のセルを更新する際に、グローバルメモリ２４１の磁界２４１ｂから磁界データを取得する（ステップＳ２９）。
【００８１】
図２４に示すように、ブロック２４２−１は、電界データの計算が完了すると、シェアードメモリ２４２ａ−１からグローバルメモリ２４１の電界２４１ａの処理ブロック「ブロック０」に電界データを書き込んで更新する。同様に、ブロック２４２−２は、電界データの計算が完了すると、シェアードメモリ２４２ａ−２からグローバルメモリ２４１の電界２４１ａの処理ブロック「ブロック１」に電界データを書き込んで更新する（ステップＳ３０）。また、ブロック２４２−１は、電界の管理配列２４１ｄ−Ｅの処理ブロック「ブロック０」に対応する箇所を時刻ｔ＝１に更新する。同様に、ブロック２４２−２は、電界の管理配列２４１ｄ−Ｅの処理ブロック「ブロック１」に対応する箇所を時刻ｔ＝１に更新する（ステップＳ３１）。
【００８２】
図２５に示すように、ブロック２４２−１は、電界の管理配列２４１ｄ−Ｅを参照する。ブロック２４２−１は、図中の点線で囲った処理ブロックに対応する時刻がｔ＝１である場合、「ブロック０」の時刻ｔ＝１の磁界の算出の際に参照する処理ブロックの更新が完了していると判定する（ステップＳ３２）。同様に、ブロック２４２−２は、電界の管理配列２４１ｄ−Ｅを参照する。ブロック２４２−２は、図中の破線で囲った処理ブロックに対応する時刻がｔ＝１である場合、「ブロック１」の時刻ｔ＝１の磁界の算出の際に参照する処理ブロックの更新が完了していると判定する（ステップＳ３３）。すなわち、ブロック２４２−１は、電界の管理配列２４１ｄ−Ｅの点線で囲った処理ブロックに対応する時刻がｔ＋１ならば、時刻ｔ＋１の磁界が計算可能となる。また、ブロック２４２−２は、電界の管理配列２４１ｄ−Ｅの破線で囲った処理ブロックに対応する時刻がｔ＋１ならば、時刻ｔ＋１の磁界が計算可能となる。
【００８３】
図２６に示すように、ブロック２４２−１およびブロック２４２−２は、磁界２４１ｂの処理ブロック「ブロック０」および「ブロック１」について、それぞれスレッドＴ０〜Ｔ２により処理ブロック内のセルの更新を行う（ステップＳ３４）。このとき、ブロック２４２−１およびブロック２４２−２は、担当領域外の処理ブロックに含まれるセルの電界データを用いる場合、担当領域外の処理ブロックのセルから磁界データを取得する。図２６では、ブロック２４２−２のスレッドＴ２は、処理ブロック「ブロック１」の磁界データのうち右下の角のセルを更新する際に、グローバルメモリ２４１の電界２４１ａから電界データを取得する（ステップＳ３５）。
【００８４】
図２７に示すように、ブロック２４２−１は、磁界データの計算が完了すると、シェアードメモリ２４２ａ−１からグローバルメモリ２４１の磁界２４１ｂの処理ブロック「ブロック０」に磁界データを書き込んで更新する。同様に、ブロック２４２−２は、磁界データの計算が完了すると、シェアードメモリ２４２ａ−２からグローバルメモリ２４１の磁界２４１ｂの処理ブロック「ブロック１」に磁界データを書き込んで更新する（ステップＳ３６）。
【００８５】
また、ブロック２４２−１は、磁界の管理配列２４１ｄ−Ｈの処理ブロック「ブロック０」に対応する箇所を時刻ｔ＝１に更新する。同様に、ブロック２４２−２は、磁界の管理配列２４１ｄ−Ｈの処理ブロック「ブロック１」に対応する箇所を時刻ｔ＝１に更新する（ステップＳ３７）。すなわち、ブロック２４２−１およびブロック２４２−２は、カウンタ２４１ｃの値に基づいて、更新する処理ブロック（セル）を決定し、決定した処理ブロック（セル）の更新結果を管理配列２４１ｄに格納する。
【００８６】
ブロック２４２−１およびブロック２４２−２は、ステップＳ２１〜Ｓ３７を電界２４１ａおよび磁界２４１ｂの全ての処理ブロックについて繰り返す。ブロック２４２−１およびブロック２４２−２は、その後、所定の時刻ＴまでステップＳ２１〜Ｓ３７を繰り返すことで、所定の時刻Ｔまでの解析結果を得ることができる。
【００８７】
図２８は、３次元ＦＤＴＤ法における性能評価の一例を示す図である。図２８では、ＧＰＵとして上述のＰ１００を用いている。ｎは、入力サイズを示す。つまり、ｎ×ｎ×ｎの３次元ＦＤＴＤ法である。時刻ｔは、１００ステップとしている。図２８に示すように、従来のＧＰＵ実装である電界と磁界をそれぞれ更新する場合と比較して、実施例２のＧＰＵ実装である電界と磁界を同時に更新する場合は、１．１０〜１．２５倍の高速化を達成している。
【００８８】
続いて、実施例２の情報処理装置２００の動作について説明する。図２９は、実施例２の更新処理の一例を示すフローチャートである。
【００８９】
設定部２３１は、電界記憶部１２１および磁界記憶部１２２の各セルに対応する配列Ｅ，Ｈと時刻ｔの初期化を行う（ステップＳ５１）。設定部２３１は、初期化を行った電界データおよび磁界データをＧＰＵ２４０に出力する（ステップＳ５２）。設定部２３１は、電界データおよび磁界データをＧＰＵ２４０に出力すると、ＧＰＵ関数を呼び出して、ＧＰＵ２４０にＥ，Ｈ更新処理の実行を指示する（ステップＳ５３）。
【００９０】
ＧＰＵ２４０は、Ｅ，Ｈ更新処理を実行し（ステップＳ５４）、Ｅ，Ｈ更新処理後の電界データおよび磁界データを電界記憶部１２１および磁界記憶部１２２に格納する。ＧＰＵ２４０は、設定部２３１に対して更新終了を通知する（ステップＳ５５）。
【００９１】
設定部２３１は、ＧＰＵ２４０から更新終了の通知を受け付けると、電界記憶部１２１および磁界記憶部１２２を参照し、解析結果を、例えば表示部１１１に表示する。これにより、情報処理装置２００は、ＦＤＴＤ法における更新時のメモリアクセス回数を削減できる。
【００９２】
ここで、図３０を用いてＧＰＵ２４０におけるＥ，Ｈ更新処理を説明する。図３０は、Ｅ，Ｈ更新処理の一例を示すフローチャートである。
【００９３】
ＧＰＵ２４０のブロック２４２は、設定部２３１のＧＰＵ関数の呼び出しに応じて、Ｅ，Ｈ更新処理を実行する。ブロック２４２は、カウンタ２４１ｃの排他的インクリメント操作を実行する（ステップＳ５４１）。
【００９４】
ブロック２４２は、全ての処理ブロックの更新が終了したか否かを判定する（ステップＳ５４２）。ブロック２４２は、全ての処理ブロックの更新が終了していないと判定した場合には（ステップＳ５４２：否定）、カウンタ２４１ｃのカウンタ値をもとに計算座標を算出する（ステップＳ５４３）。ブロック２４２は、管理配列２４１ｄを参照し（ステップＳ５４４）、注目処理ブロックの電界成分の更新において参照する処理ブロックの更新が完了したか否かを判定する（ステップＳ５４５）。ブロック２４２は、参照する処理ブロックの更新が完了していないと判定した場合には（ステップＳ５４５：否定）、ステップＳ５４４に戻る。
【００９５】
ブロック２４２は、参照する処理ブロックの更新が完了したと判定した場合には（ステップＳ５４５：肯定）、注目処理ブロックの電界成分を更新する（ステップＳ５４６）。ブロック２４２は、注目処理ブロックの電界成分の更新が完了すると、管理配列２４１ｄを参照し（ステップＳ５４７）、注目処理ブロックの磁界成分の更新において参照する処理ブロックの更新が完了したか否かを判定する（ステップＳ５４８）。ブロック２４２は、参照する処理ブロックの更新が完了していないと判定した場合には（ステップＳ５４８否定）、ステップＳ５４７に戻る。
【００９６】
ブロック２４２は、参照する処理ブロックの更新が完了したと判定した場合には（ステップＳ５４８：肯定）、注目処理ブロックの磁界成分を更新し（ステップＳ５４９）、ステップＳ５４１に戻る。
【００９７】
一方、ブロック２４２は、ステップＳ５４２において、全ての処理ブロックの更新が終了したと判定した場合には（ステップＳ５４２：肯定）、時刻ｔをインクリメントする（ステップＳ５５０）。ブロック２４２は、時刻ｔが所定の時刻Ｔ以下であるか否かを判定する（ステップＳ５５１）。ブロック２４２は、時刻ｔが所定の時刻Ｔ以下であると判定した場合には（ステップＳ５５１：肯定）、ステップＳ５４１に戻り、インクリメントした時刻ｔについてＥ，Ｈ更新処理を実行する。ブロック２４２は、時刻ｔが所定の時刻Ｔより大きいと判定した場合には（ステップＳ５５１：否定）、更新処理後の電界データおよび磁界データを電界記憶部１２１および磁界記憶部１２２に格納してＥ，Ｈ更新処理を終了する。また、ブロック２４２は、設定部２３１に更新終了を通知する。これにより、情報処理装置２００は、ＦＤＴＤ法における更新時のメモリアクセス回数を削減できる。
【００９８】
なお、上記実施例２では、ＮＶＩＤＩＡ社のＧＰＵの構成を一例として説明したが、これに限定されない。例えば、シェアードメモリ２４２ａが複数の階層を有するような構成であってもよい。また、ＡＭＤ（登録商標）社のＧＰＵのように、コンピュートユニット群とＬ１キャッシュとの組を複数持つシェーダエンジンと、各コンピュートユニット群からアクセス可能なＬ２キャッシュやメインメモリを有するような構成であってもよい。なお、コンピュートユニットは、上述のシェアードメモリ２４２ａに相当するローカルデータシェアと呼ばれる高速メモリを有する。
【００９９】
このように、情報処理装置２００は、複数の更新部に対応するブロック２４２と、更新するセル（処理ブロック）の排他制御を行うカウンタと、セル（処理ブロック）の更新状況を管理する管理配列とを有する。また、情報処理装置２００は、カウンタの値に基づいて、更新するセル（処理ブロック）を決定し、決定したセル（処理ブロック）の更新結果を管理配列に格納する。その結果、情報処理装置２００は、並列処理を行う場合であってもＦＤＴＤ法における更新時のメモリアクセス回数を削減できる。
【０１００】
また、情報処理装置２００では、更新部に対応するブロック２４２は、ストリーミングプロセッサ３２に対応するブロック３６であり、キャッシュメモリ２１は、ストリーミングプロセッサ３２のシェアードメモリ２４２ａである。その結果、情報処理装置２００は、ＧＰＵを用いたＦＤＴＤ法における更新時のメモリアクセス回数を削減できる。
【０１０１】
また、情報処理装置２００では、カウンタ２４１ｃおよび管理配列２４１ｄは、複数のブロック２４２からアクセス可能なグローバルメモリ２４１に配置される。その結果、情報処理装置２００は、各ブロック２４２に適切に電磁界成分の更新処理を割り振ることができる。
【０１０２】
また、情報処理装置２００では、ブロック２４２は、複数のセルを含む領域（処理ブロック）に対応し、該領域内を複数のスレッドが並列処理することでセルを更新する。その結果、情報処理装置２００は、コア３３の利用効率を上げて処理を高速化できる。
【０１０３】
なお、図示した各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、設定部１３１と更新部１３２とを統合してもよい。また、図示した各処理は、上記の順番に限定されるものでなく、処理内容を矛盾させない範囲において、同時に実施してもよく、順序を入れ替えて実施してもよい。
【０１０４】
さらに、各装置で行われる各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ（Micro  Controller  Unit）等のマイクロ・コンピュータ）上で、その全部または任意の一部を実行するようにしてもよい。また、各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ等のマイクロ・コンピュータ）で解析実行されるプログラム上、またはワイヤードロジックによるハードウェア上で、その全部または任意の一部を実行するようにしてもよいことは言うまでもない。
【０１０５】
ところで、上記の各実施例で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することで実現できる。そこで、以下では、上記の各実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図３１は、情報処理プログラムを実行するコンピュータの一例を示す図である。
【０１０６】
図３１に示すように、コンピュータ３００は、各種演算処理を実行するＣＰＵ３０１と、データ入力を受け付ける入力装置３０２と、モニタ３０３とを有する。また、コンピュータ３００は、記憶媒体からプログラム等を読み取る媒体読取装置３０４と、各種装置と接続するためのインタフェース装置３０５と、他の情報処理装置等と有線または無線により接続するための通信装置３０６とを有する。また、コンピュータ３００は、各種情報を一時記憶するＲＡＭ３０７と、ハードディスク装置３０８とを有する。また、各装置３０１〜３０８は、バス３０９に接続される。
【０１０７】
ハードディスク装置３０８には、図１に示した設定部１３１および更新部１３２の各処理部と同様の機能を有する情報処理プログラムが記憶される。または、ハードディスク装置３０８には、図１５に示した設定部２３１、および、ＧＰＵ２４０のブロック２４２の各処理部と同様の機能を有する情報処理プログラムが記憶される。また、ハードディスク装置３０８には、図１または図１５に示した電界記憶部１２１、磁界記憶部１２２、および、情報処理プログラムを実現するための各種データが記憶される。
【０１０８】
入力装置３０２は、例えば、コンピュータ３００の管理者から操作情報等の各種情報の入力を受け付ける。モニタ３０３は、例えば、コンピュータ３００の管理者に対して表示画面等の各種画面を表示する。インタフェース装置３０５は、例えば印刷装置等が接続される。通信装置３０６は、例えば、図１または図１５に示した通信部１１０と同様の機能を有し図示しないネットワークと接続され、他の情報処理装置と各種情報をやりとりする。
【０１０９】
ＣＰＵ３０１は、ハードディスク装置３０８に記憶された各プログラムを読み出して、ＲＡＭ３０７に展開して実行することで、各種の処理を行う。また、これらのプログラムは、コンピュータ３００を図１に示した設定部１３１および更新部１３２として機能させることができる。または、これらのプログラムは、コンピュータ３００を図１５に示した設定部２３１およびブロック２４２として機能させることができる。
【０１１０】
なお、上記の情報処理プログラムは、必ずしもハードディスク装置３０８に記憶されている必要はない。例えば、コンピュータ３００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ３００が読み出して実行するようにしてもよい。コンピュータ３００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤ（Digital  Versatile  Disc）、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、ＬＡＮ等に接続された装置にこの情報処理プログラムを記憶させておき、コンピュータ３００がこれらから情報処理プログラムを読み出して実行するようにしてもよい。
【符号の説明】
【０１１１】
１００，２００  情報処理装置
１１０  通信部
１１１  表示部
１１２  操作部
１２０  記憶部
１２１  電界記憶部
１２２  磁界記憶部
１３０，２３０  制御部
１３１，２３１  設定部
１３２  更新部
２４０  ＧＰＵ
２４１  グローバルメモリ
２４１ａ  電界
２４１ｂ  磁界
２４１ｃ  カウンタ
２４１ｄ  管理配列
２４２  ブロック
２４２ａ  シェアードメモリ
Ｔ０，Ｔ１，Ｔ２  スレッド
【図１】
2019191710.tif 000003
【図２】
2019191710.tif 000004
【図３】
2019191710.tif 000005
【図４】
2019191710.tif 000006
【図５】
2019191710.tif 000007
【図６】
2019191710.tif 000008
【図７】
2019191710.tif 000009
【図８】
2019191710.tif 000010
【図９】
2019191710.tif 000011
【図１０】
2019191710.tif 000012
【図１１】
2019191710.tif 000013
【図１２】
2019191710.tif 000014
【図１３】
2019191710.tif 000015
【図１４】
2019191710.tif 000016
【図１５】
2019191710.tif 000017
【図１６】
2019191710.tif 000018
【図１７】
2019191710.tif 000019
【図１８】
2019191710.tif 000020
【図１９】
2019191710.tif 000021
【図２０】
2019191710.tif 000022
【図２１】
2019191710.tif 000023
【図２２】
2019191710.tif 000024
【図２３】
2019191710.tif 000025
【図２４】
2019191710.tif 000026
【図２５】
2019191710.tif 000027
【図２６】
2019191710.tif 000028
【図２７】
2019191710.tif 000029
【図２８】
2019191710.tif 000030
【図２９】
2019191710.tif 000031
【図３０】
2019191710.tif 000032
【図３１】
2019191710.tif 000033