(57)【要約】【課題】専用計算機を用いた粒子動力学シミュレーションの処理を高速化する装置等を提供することを課題とする。【解決手段】空間内に配置される複数の粒子のそれぞれの粒子データを記憶する粒子データメモリと、空間を分割した各セルのセル番号に対応付けて、粒子データメモリにおける、当該セル内の粒子の粒子データを格納するために割り当てられた記憶位置を示すセル情報を記憶するセル情報メモリと、空間を分割したセルに含まれる粒子の粒子データを、セル番号を指定してアクセスする処理ユニットと、セル番号を指定した粒子データへのアクセスを受けたことに応じて、指定されたセル番号に対応付けられたセル情報を用いて粒子データメモリにおけるアクセス対象の粒子データの記憶位置を特定するメモリコントローラとを備える処理装置、処理システム、プログラム、及び、記録媒体を提供する。【選択図】図３
2020064560.tif 000002
【特許請求の範囲】
【請求項１】
空間内に配置される複数の粒子のそれぞれの粒子データを記憶する粒子データメモリと、
前記空間を分割した各セルのセル番号に対応付けて、前記粒子データメモリにおける、当該セル内の粒子の粒子データを格納するために割り当てられた記憶位置を示すセル情報を記憶するセル情報メモリと、
前記空間を分割したセルに含まれる粒子の粒子データを、セル番号を指定してアクセスする処理ユニットと、
セル番号を指定した粒子データへのアクセスを受けたことに応じて、指定されたセル番号に対応付けられたセル情報を用いて前記粒子データメモリにおけるアクセス対象の粒子データの記憶位置を特定するメモリコントローラと
を備える処理装置。
【請求項２】
前記処理ユニットは、指定したセル番号のセルに粒子を追加することを指示する追加要求を前記メモリコントローラへと送信し、
前記メモリコントローラは、前記追加要求を受け取ったことに応じて、前記粒子データメモリにおける、指定されたセル番号に対応付けられたセル情報によって示される記憶位置に、当該粒子の粒子データを追加する請求項１に記載の処理装置。
【請求項３】
前記メモリコントローラは、複数の前記処理ユニットから同一セルに対して競合する複数の前記追加要求を受信した場合に、前記複数の追加要求のそれぞれをアトミックに処理する請求項２に記載の処理装置。
【請求項４】
前記処理ユニットは、セル番号およびセル内の粒子番号を指定して粒子データに対する書き込みを要求する書込要求を前記メモリコントローラへと送信し、
前記メモリコントローラは、前記書込要求を受け取ったことに応じて、前記粒子データメモリにおける、指定されたセル番号に対応付けられたセル情報および指定されたセル内の粒子番号によって示される記憶位置の粒子データに対して書込データを書き込む請求項１から３のいずれか一項に記載の処理装置。
【請求項５】
前記セル情報メモリは、各セルのセル番号に対応付けて、前記粒子データメモリ内の複数のメモリブロックを示す前記セル情報を記憶する請求項１から４のいずれか一項に記載の処理装置。
【請求項６】
前記粒子データメモリ内における、使用済みのメモリブロックまたは未使用のメモリブロックを管理するためのメモリブロック情報を記憶するメモリブロック情報メモリを更に備え、
前記メモリコントローラは、セルにメモリブロックを割り当てる場合に、前記メモリブロック情報を用いて未使用のメモリブロックを選択する
請求項１から５のいずれか一項に記載の処理装置。
【請求項７】
前記セル情報メモリは、複数のセルに対応付けた第１セットの複数の前記セル情報と、前記複数のセルに対応付けた第２セットの複数の前記セル情報とを記憶し、
前記処理ユニットは、前記空間内に前記複数の粒子の移動に伴って前記複数の粒子を各セルに再配置する処理において、前記第１セットの複数のセル情報によって記憶位置が指定される各粒子の粒子データを、前記第２セットの複数のセル情報によって指定される記憶位置に再割当する
請求項１から６のいずれか一項に記載の処理装置。
【請求項８】
各粒子の前記粒子データおよび各粒子に対応する前記セル情報の少なくとも１つは、前記複数の粒子のそれぞれに対応付けて、各粒子の前記粒子データ中の予め定められたデータが現シミュレーション時刻に更新されたか否かを示すアトリビュートを保持し、
前記メモリコントローラは、一の粒子の前記粒子データ中における前記予め定められたデータがアクセスされたことに応じて、前記アトリビュートに基づいて、前記予め定められたデータに記録されている値を使用するか、初期値を使用するかを選択する
請求項１から７のいずれか一項に記載の処理装置。
【請求項９】
前記処理ユニットは、前記予め定められたデータを演算により更新することを指示する更新要求を前記メモリコントローラへと送信し、
前記メモリコントローラは、前記更新要求を受け取ったことに応じて、前記予め定められたデータが現シミュレーション時刻に更新されている場合は前記予め定められたデータに記録されている値に対して演算を施して更新し、前記予め定められたデータが現シミュレーション時刻に更新されていない場合は初期値に対して演算を施して前記予め定められたデータを更新する
請求項８に記載の処理装置。
【請求項１０】
各々が空間を複数の次元方向のそれぞれにおいて分割した分割空間を担当し、前記空間内に配置された複数の粒子の間に働く力を計算する複数の処理ノードと、
前記複数の処理ノードを相互接続するネットワークと
を備え、
前記複数の処理ノードのそれぞれは、前記空間内に設けた格子点のうち担当する前記分割空間に含まれる格子点にアサインされた前記複数の粒子の電荷から、担当する前記分割空間内に含まれる格子点の電荷を補間演算により算出する長距離ユニットと、
格子点の電荷から格子点の電位を畳み込み演算により算出するコンボリューションユニットを有し、
前記複数の処理ノードの前記コンボリューションユニットは、相互に通信して、各格子点の電荷に応じた値を前記複数の次元の各次元方向に順に畳み込んでいく
処理システム。
【請求項１１】
前記複数の処理ノードの前記コンボリューションユニットは、前記複数の次元内における格子点間の距離に応じた係数を算出する関数を、前記複数の次元のそれぞれに分離したカーネル関数の組み合わせによって近似することにより、前記複数の次元における前記畳み込み演算を各次元方向の畳み込みに分離する請求項１０に記載の処理システム。
【請求項１２】
前記複数の処理ノードのそれぞれの前記コンボリューションユニットは、
担当する格子点に割り当てられた値を、前記複数の次元のうち第１次元方向における予め定められた範囲の格子点を担当する他の処理ノードに送信し、
前記第１次元方向における予め定められた範囲の格子点を担当する他の処理ノードから受信した値に応じた値を担当する格子点に畳み込み、
前記予め定められた範囲の格子点を担当する他の処理ユニットからの受信回数が、予め定められた数に達したことに応じて前記第１次元方向における畳み込みの終了を判定する
請求項１０または１１に記載の処理システム。
【請求項１３】
前記複数の処理ノードの前記コンボリューションユニットは、
前記空間を第１単位で分割した各第１格子点にアサインされた電荷を、各第１格子点から第１範囲内で畳み込むことで、空間を前記第１単位よりも大きな第２単位で分割した第２格子点の電荷を算出し、
各前記第２格子点で求めた電位から第１範囲内で畳みこむことで、第１格子点の電位を算出する、
請求項１０から１２のいずれか一項に記載の処理システム。
【請求項１４】
空間内に配置される複数の粒子のそれぞれについて、他の各粒子から働く力を計算する処理ユニットと、
計算対象の粒子に働く力の計算において、他の粒子のそれぞれを高排除および低排除の少なくとも一方の対象とすべきか否かを指定する複数のマスクパターンを記憶するマスクパターンメモリと、
前記複数の粒子のそれぞれについて、前記複数のマスクパターンのうち各粒子に働く力の計算において使用するマスクパターンを識別するマスクパターン識別情報を含む粒子データを記憶する粒子データメモリと
を備える処理装置。
【請求項１５】
前記複数のマスクパターンのそれぞれは、計算対象の粒子の粒子番号に対して予め定められた相対粒子番号を有する他の粒子のそれぞれを高排除および低排除の少なくとも一方の対象とすべきか否かを指定する請求項１４に記載の処理装置。
【請求項１６】
前記複数のマスクパターンのそれぞれは、予め定められた長さのマスクビット列と、前記マスクビット列のうち計算対象の粒子に働く計算における高排除すべき他の粒子の指定および低排除すべき他の粒子の指定に割り当てるビット数を設定するための設定値とを含む請求項１４または１５に記載の処理装置。
【請求項１７】
前記マスクパターンでカバーされない粒子番号の離れた２つの粒子群の粒子間で高排除および低排除の少なくとも一方を指定するマスクテーブルを記憶するマスクテーブルメモリを更に備える請求項１４から１６のいずれか一項に記載の処理装置。
【請求項１８】
前記マスクテーブルに記憶する高排除および低排除の少なくとも一方を指定する情報が、粒子番号の離れた２つの粒子群のどの粒子同士の組み合わせ方に対応するのかを予め定めた対応関係によって指定可能である請求項１７に記載の処理装置。
【請求項１９】
粒子データメモリが、空間内に配置される複数の粒子のそれぞれの粒子データを記憶する段階と、
セル情報メモリが、前記空間を分割した各セルのセル番号に対応付けて、前記粒子データメモリにおける、当該セル内の粒子の粒子データを格納するために割り当てられた記憶位置を示すセル情報を記憶する段階と、
処理ユニットが、前記空間を分割したセルに含まれる粒子の粒子データを、セル番号を指定してアクセスする段階と、
メモリコントローラが、セル番号を指定した粒子データへのアクセスを受けたことに応じて、指定されたセル番号に対応付けられたセル情報を用いて前記粒子データメモリにおけるアクセス対象の粒子データの記憶位置を特定する段階と
を備える処理方法。
【請求項２０】
各々が空間を複数の次元方向のそれぞれにおいて分割した分割空間を担当し、前記空間内に配置された複数の粒子の間に働く力及び電位を計算する複数の処理ノードと、
前記複数の処理ノードを相互接続するネットワークと
を備える処理システムにおいて、
前記複数の処理ノードのそれぞれが有するコンボリューションユニットが、前記空間内に設けた格子点のうち担当する前記分割空間に含まれる格子点にアサインされた前記複数の粒子の電荷から、担当する前記分割空間内に含まれる格子点の電位を畳み込み演算により算出する段階と、  前記複数の処理ノードの前記コンボリューションユニットが、相互に通信して、各格子点の電荷に応じた値を前記複数の次元の各次元方向に順に畳み込んでいく段階と、
を有する処理方法。
【請求項２１】
処理ユニットが、空間内に配置される複数の粒子のそれぞれについて、他の各粒子から働く力を計算する段階と、
マスクパターンメモリが、計算対象の粒子に働く力の計算において、他の粒子のそれぞれを高排除および低排除の少なくとも一方の対象とすべきか否かを指定する複数のマスクパターンを記憶する段階と、
粒子データメモリが、前記複数の粒子のそれぞれについて、前記複数のマスクパターンのうち各粒子に働く力の計算において使用するマスクパターンを識別するマスクパターン識別情報を含む粒子データを記憶する段階と、
を備える処理方法。
【請求項２２】
各々が空間を複数の次元方向のそれぞれにおいて分割した分割空間を担当し、前記空間内に配置された複数の粒子の間に働く力を計算する複数の処理ノードと、
前記複数の処理ノードを相互接続するネットワークと
を備え、
前記複数の処理ノードのそれぞれは、コンボリューションユニットを有する処理システムにおいて、
実行されると、前記コンボリューションユニットのそれぞれに、
前記空間内に設けた格子点のうち担当する前記分割空間に含まれる格子点にアサインされた前記複数の粒子の電荷から、担当する前記分割空間内に含まれる格子点の電位を畳み込み演算により算出させ、
相互に通信して、各格子点の電荷に応じた値を前記複数の次元の各次元方向に順に畳み込ませる、
プログラム。
【請求項２３】
処理ユニットと、
計算対象の粒子に働く力の計算において、他の粒子のそれぞれを高排除および低排除の少なくとも一方の対象とすべきか否かを指定する複数のマスクパターンを記憶するマスクパターンメモリと、
複数の粒子のそれぞれについて、前記複数のマスクパターンのうち各粒子に働く力の計算において使用するマスクパターンを識別するマスクパターン識別情報を含む粒子データを記憶する粒子データメモリと
を備える処理装置において、
実行されると、前記処理ユニットに、
空間内に配置される複数の粒子のそれぞれについて、他の各粒子から働く力を計算させる、
プログラム。
【請求項２４】
請求項２２に記載のプログラムを記録した記録媒体。
【請求項２５】
請求項２３に記載のプログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理装置、処理システム、処理方法、プログラム、及び、記録媒体に関する。
【背景技術】
【０００２】
分子動力学シミュレーションを行うための専用計算機が知られており、専用計算機による種々のシミュレーション高速化手法が開発されている。例えば、巨大分子等を含むシミュレーション空間を複数のセルに分割して管理する手法が知られている（特許文献１）。しかし、従来の手法によってもシミュレーションの処理速度は必ずしも十分ではなく、更なる高速化が望まれている。一例として、従来の手法によると複数のセル間の粒子移動等の処理をソフトウエアにより行っており、オーバーヘッドが依然大きかった。
特許文献１  特開２００６−２３６２５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００３】
専用計算機を用いた粒子動力学シミュレーションの処理を高速化する装置等を提供することを課題とする。
【課題を解決するための手段】
【０００４】
上記課題を解決するために、本発明の第１の態様においては、空間内に配置される複数の粒子のそれぞれの粒子データを記憶する粒子データメモリと、空間を分割した各セルのセル番号に対応付けて、粒子データメモリにおける、当該セル内の粒子の粒子データを格納するために割り当てられた記憶位置を示すセル情報を記憶するセル情報メモリと、空間を分割したセルに含まれる粒子の粒子データを、セル番号を指定してアクセスする処理ユニットと、セル番号を指定した粒子データへのアクセスを受けたことに応じて、指定されたセル番号に対応付けられたセル情報を用いて粒子データメモリにおけるアクセス対象の粒子データの記憶位置を特定するメモリコントローラとを備える処理装置、処理システム、プログラム、及び、記録媒体を提供する。
【０００５】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではない。また、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【図面の簡単な説明】
【０００６】
【図１】本実施形態における空間のノード分担の一例を示す。
【図２】本実施形態における分割空間のセル分割の一例を示す。
【図３】本実施形態における処理装置１０のブロック図を示す。
【図４】本実施形態におけるメモリ１００の記憶内容の一例を示す。
【図５】本実施形態におけるメモリ処理の一例を示す。
【図６】本実施形態におけるメモリ処理の別の一例を示す。
【図７】本実施形態におけるメモリ処理の更に別の一例を示す。
【図８】本実施形態における遠距離力の処理方法の一例を示す。
【図９】本実施形態における遠距離力の処理方法の一例を示す。
【図１０】本実施形態における遠距離力の処理方法の一例を示す。
【図１１】本実施形態における遠距離力の処理方法の一例を示す。
【図１２】本実施形態における遠距離力の処理方法の一例を示す。
【図１３】排除粒子機能のマスクパターンの一例を示す。
【図１４】本実施形態におけるマスクパターン識別情報の一例を示す。
【図１５】本実施形態におけるマスクパターンの一例を示す。
【図１６Ａ】本実施形態における高排除のマスクテーブルの一例を示す。
【図１６Ｂ】本実施形態における低排除のマスクテーブルの一例を示す。
【図１７Ａ】本実施形態における高排除のマスクテーブル斜方モードの一例を示す。
【図１７Ｂ】本実施形態における低排除のマスクテーブル斜方モードの一例を示す。
【発明を実施するための形態】
【０００７】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【０００８】
本実施形態の処理システムは、空間内に配置された複数の粒子の間に働く力を計算することで、空間内の粒子の運動をシミュレーションする。例えば、処理システムは、多数の原子を含む巨大分子等に生じる古典力学的な力やポテンシャルエネルギー等を、複数の処理ノードにより計算する。
【０００９】
本実施形態において、複数の処理ノードの各々は、空間を複数の次元方向のそれぞれにおいて分割した分割空間を担当し、担当する分割空間内の力やポテンシャルエネルギーを計算する。処理システムが扱う空間は、シミュレーションさせる粒子が配置される空間（例えば、３次元空間）であり、予め定められた大きさの立体領域として定義される。
【００１０】
粒子は、分子動力学シミュレーションの対象となる原子、原子群、分子、それらのイオン、又は電子であってよい。粒子には、質量、座標、速度、加速度、及び、電荷の１以上の数値が、粒子データとして付与されていてよい。分子動力学シミュレーションにおいて、粒子には複数の力が作用する。
【００１１】
例えば、粒子には、共有結合力、クーロン力、及び、ファンデルワールス力等が作用する。処理システムは、複数の処理ノードを用いて、複数の粒子に作用する力の計算と、複数の粒子の位置の更新と交互に繰り返し行ってよい。処理システムは、分子動力学シミュレーションに代えて、重力多体シミュレーションを行ってもよく、この場合は、粒子は天体等の大きな質量を有する質点となり、粒子に作用する力は重力等となる。
【００１２】
図１は、本実施形態における空間の処理ノードによる分担の一例を示す。処理システムにおける複数の処理ノードの各々は、専用に設計された専用チップ（以下、単にチップともいう）により実装されてよい。例えば、図１に示すように、処理システムは８処理ノード（８チップ）×８処理ノード（８チップ）×８処理ノード（８チップ）の５１２処理ノード（５１２チップ）を備えてよい。そして、空間を５１２分割した分割空間のそれぞれの処理を、各処理ノード（各チップ）が担当してよい。
【００１３】
各処理ノードは、担当する分割空間に存在する粒子の力と位置の計算を担当してよい。複数の処理ノードはネットワークで相互接続されて、系全体の計算処理に必要な通信を行ってよい。複数の処理ノードは、ボードに搭載されてよい。例えば、８チップを搭載したボードを６４台設けることで、５１２チップの処理システムを構築してよい。
【００１４】
図２は、本実施形態における分割空間のセル分割の一例を示す。処理システムは、セルインデックス法を用いて、複数のセルに分割された空間を管理してよい。セルは、各処理ノードが管理する分割空間を更に分割した空間であってよい。例えば、図示するように、処理ノードは、担当する分割空間を２×２×２＝８セルに分割して管理してよい。これにより、処理システムは、空間内の電荷や電位を、粒子単位ではなくセル単位で少なくとも部分的に管理し、計算効率を高めることができる。
【００１５】
一例として、処理システムは、１００〜１００万原子を有する分子又は分子群の動力学シミュレーションを実行してよい。セルの一辺は１〜１００ｎｍの範囲であってよい。
【００１６】
図３は、本実施形態における処理装置１０のブロック図を示す。処理システムにおける処理ノード（及びチップ）は、図３に示す処理装置１０により実現されてよい。処理装置１０は、メモリ１００、処理ユニット２００、メモリコントローラ３００、ネットワークインタフェース４００、及び、コンボリューションユニット６００を有する。
【００１７】
メモリ１００は、粒子データ、及び、粒子データのメモリ１００内の記憶位置に関する情報等を記憶する。メモリ１００は、粒子データメモリ１１０、セル情報メモリ１２０、メモリブロック情報メモリ１３０、マスクパターンメモリ１４０、及び、マスクテーブルメモリ１５０を含む。
【００１８】
粒子データメモリ１１０、セル情報メモリ１２０、メモリブロック情報メモリ１３０、マスクパターンメモリ１４０、及び、マスクテーブルメモリ１５０は、単一の物理メモリにより実装されてよく、又は、複数の物理メモリにより実装されてもよい。
【００１９】
粒子データメモリ１１０は、空間内に配置される複数の粒子のそれぞれの粒子データを記憶する。粒子データは、粒子の物理状態を示すデータであってよい。例えば、粒子データメモリ１１０は、複数の粒子について、粒子番号、座標、質量、及び、電荷の情報を粒子データとして記憶してよい。粒子番号は、粒子が属するセル内における相対的な番号を含んでよい。これに加えて／代えて、粒子番号は、空間内における絶対的な番号を含んでよい。
【００２０】
粒子データメモリ１１０は、複数の粒子について、更に速度、及び／又は、加速度等の情報を粒子データとして記憶してもよい。また、粒子データは、後述するマスクパターン識別情報を含んでよい。また、粒子データは、後述するアトリビュートを含んでよい。更に、粒子データメモリ１１０は、粒子以外のデータを記憶してもよい。
【００２１】
セル情報メモリ１２０は、処理装置１０が担当する各セルのセル番号に対応付けて、粒子データメモリ１１０における、当該セル内の粒子の粒子データを格納するために割り当てられた記憶位置を示すセル情報を記憶する。例えば、セル情報は、各セルのセル番号に対応付けて、粒子データメモリ１１０内の複数のメモリブロックを示すものであってよい。一例として、セル情報は、セル番号を粒子データメモリ１１０内のアドレスに変換するアドレス変換テーブルであってよい。
【００２２】
これにより、対象粒子のセル番号とセル内の粒子番号とを指定することで、粒子データメモリ１１０の対象粒子の粒子データを格納する記憶位置が取得可能になる。セル情報メモリ１２０は、セル中の粒子数をセル情報として記憶してよい。また、セル情報は、後述するアトリビュートを含んでよい。
【００２３】
メモリブロック情報メモリ１３０は、粒子データメモリ１１０内における、使用済みのメモリブロックまたは未使用のメモリブロックを管理するためのメモリブロック情報を記憶する。例えば、メモリブロック情報メモリ１３０は、粒子データメモリ１１０のメモリブロックに対応するアドレスと、使用／未使用を示すインジケータとの組をメモリブロック情報として記憶してよい。
【００２４】
マスクパターンメモリ１４０は、計算対象の粒子に働く力及び／又はポテンシャルの計算において、他の粒子のそれぞれを高排除および低排除の少なくとも一方の対象とすべきか否かを指定する複数のマスクパターンを記憶する。例えば、分子中における隣り合う原子同士は共有結合で結合するが、このような原子間のクーロン力、ファンデルワールス力等の効果は、共有結合に取り込まれている場合がある。
【００２５】
このような場合に、処理装置１０は、隣接原子同士に作用するクーロン力等の効果をマスクパターンにより排除し、同一の力が実質的に二重に考慮されないようにする。ここで、クーロン力、ファンデルワールス力等の効果の排除は、高い水準（例えば、完全に排除）で行ってよく（「高排除」の指定）、又は、これよりも低い水準（例えば、一部のみ排除）で行ってもよく（「低排除」の指定）、いずれを行うかはマスクパターンにより指定されてよい。
【００２６】
各粒子がどのマスクパターンを使用するかは、粒子データメモリ１１０に格納される粒子データ中のマスクパターン識別情報で識別されてよい。マスクパターンの詳細は後述する。
【００２７】
マスクテーブルメモリ１５０は、計算対象の２以上の粒子と、他の２以上の粒子との間で高排除および低排除の少なくとも一方を指定するマスクテーブルを記憶する。マスクパターンメモリ１４０が記憶するマスクパターンによれば、粒子番号が比較的近い粒子間の力の排除を考慮することができるが、環状分子中の隣接原子や巨大タンパク質中でジスルフィド結合する原子間等、空間的には近接するが粒子番号が離れた粒子間の力の排除を考慮できない場合がある。
【００２８】
そこで、処理装置１０は、マスクテーブルメモリ１５０により、粒子番号が離れた複数の粒子又は粒子群間の高排除及び低排除などの指定を個別に記憶し、空間的には近接するが粒子番号が離れた粒子間の力の排除を考慮することができる。マスクテーブルの詳細は後述する。
【００２９】
処理ユニット２００は、空間内に配置される複数の粒子のそれぞれについて、他の各粒子から働く力及び電位を計算し、粒子の位置を計算、更新する。処理ユニット２００は、当該計算を複数種類の演算回路に分担して実行してよい。例えば、処理ユニット２００は、複数のパイプライン２１０、複数のコア２２０、及び、長距離ユニット２３０を含んでよい。処理ユニット２００は、必要に応じて、汎用プロセッサ、ローカルメモリ、その他の回路等を含んでよい。
【００３０】
複数のパイプライン２１０は、協働して複数の粒子間に働く力及び／又はポテンシャルの一部を計算する。例えば、複数のパイプライン２１０は、協働して粒子間に作用する短距離のクーロン力、及び、粒子間に作用するファンデルワールス力を計算する。ここで、短距離のクーロン力とは、１つのセル及び近傍セルの空間内で作用するクーロン力であってよい。なお、以降の説明では「短距離のクーロン力及び／又はファンデルワールス力、及び／又はこれらのポテンシャル」を「短距離クーロン力等」ともいう。
【００３１】
複数のパイプライン２１０は、マスクパターンメモリ１４０に格納されるマスクパターンを利用して、一部の粒子間の短距離クーロン力等の計算を省略してよい。例えば、「高排除」が全部排除を意味する場合、複数のパイプライン２１０は、「高排除」と指定される粒子間の短距離クーロン力等の計算を行わないか、これらの計算結果を０としてよい。例えば、「高排除」が一部の排除を意味する場合、複数のパイプライン２１０は、「高排除」と指定される粒子間の短距離クーロン力等の計算に所定の係数を乗じてよい。
【００３２】
また、複数のパイプライン２１０は、マスクパターンメモリ１４０に格納されるマスクパターンを利用して、一部の粒子間の短距離クーロン力等を減殺してよい。例えば、複数のパイプライン２１０は、「低排除」と指定される粒子間の短距離クーロン力等の計算に「高排除」に用いた係数よりも大きい所定の係数（例えば、１／２又は１／４）を乗じてよい。例えば、処理ユニット２００は８個のパイプライン２１０を含んでよい。
【００３３】
コア２２０は、複数の粒子間に働く力の他の一部を計算する。例えば、コア２２０は、共有結合力を計算する。コア２２０は、ＳＲＡＭ等の専用メモリを命令メモリ等の用途で有してもよい。
【００３４】
コア２２０は、各粒子に作用する力を統合し、統合された力及び質量から各粒子の加速度及び速度を計算し、更に次のシミュレーション時刻における各粒子の位置（例えば、３次元座標）を計算してよい。ここで、コア２２０は、自身が計算する共有結合力、複数のパイプライン２１０が計算する短距離クーロン力等に加えて、後述するコンボリューションユニット６００が計算する長距離クーロン力を統合してよい。また、コア２２０は、各粒子の電位を計算してよい。
【００３５】
複数のコア２２０は、処理装置１０が担当するセルを分担してよい。例えば、処理ユニット２００は、８個のコア２２０を含んでよく、各コアが図２に示す空間における１又は複数のセルの処理を担当してよい。複数のコアが１セルの処理を担当してもよい。例えば、あるコア２２０が図２のセルＡに含まれる粒子に作用する力及び粒子の位置の計算を行い、別のあるコア２２０が図２のセルＢに含まれる粒子に作用する力及び粒子の位置の計算を行いよい。また、処理ユニット２００は、各セルを担当するコア２２０に加えて、パイプライン２１０制御用のコア２２０を別途含んでよい。
【００３６】
処理ユニット２００のパイプライン２１０及びコア２２０は、メモリコントローラ３００を介して、粒子データメモリ１１０に記憶された粒子データにアクセスする。処理ユニット２００は、空間を分割したセルに含まれる粒子の粒子データを、セル番号を指定してアクセスしてよい。
【００３７】
例えば、コア２２０は、メモリコントローラ３００を介して、粒子データメモリ１１０に記憶された粒子データに書き込みを行ってよい。一例として、コア２２０は、セル番号およびセル内の粒子番号を指定して粒子データに対する書き込みを要求する書込要求をメモリコントローラ３００へと送信してよい。
【００３８】
また、コア２２０は、粒子の位置の更新（例えば、粒子のセル間の移動）に伴い、メモリコントローラ３００を介して、指定したセル番号のセルに粒子を追加してよい。例えば、コア２２０は、指定したセル番号のセルに粒子を追加することを指示する追加要求をメモリコントローラ３００へと送信してよい。なお、コア２２０は、ハードウェアにより実現されてよく、又は、ソフトウエア（すなわちプログラム）により実現されてもよい。後者の場合、ソフトウエア（プログラム）は、記録媒体（例えば、揮発性又は不揮発性メモリ）に記録されてよい。
【００３９】
長距離ユニット２３０は、粒子間に働く力のうち処理ユニット２００で計算されないものを計算する。例えば、長距離ユニット２３０は、コンボリューションユニット６００と協働して粒子間に作用する長距離クーロン力を計算する。一例として、長距離ユニット２３０は、空間内に設けた格子点のうち処理装置１０が担当する分割空間に含まれる格子点にアサインされた複数の粒子の電荷から、担当する分割空間内に含まれる格子点の電荷を補間演算により算出してよい。また、格子点の電位から粒子位置の力とポテンシャルエネルギーを補間演算により算出してよい。長距離ユニット２３０の動作の詳細については、後述する。
【００４０】
メモリコントローラ３００は、処理ユニット２００からの、メモリ１００に記憶された粒子データ等へのアクセスを仲介する。メモリコントローラ３００は、セル番号を指定した粒子データへのアクセスを受けたことに応じて、指定されたセル番号に対応付けられたセル情報を用いて粒子データメモリ１１０におけるアクセス対象の粒子データの記憶位置を特定する。例えば、メモリコントローラ３００は、セル情報メモリ１２０のセル情報を参照することで、アクセス対象の粒子データの記憶位置を特定してよい。
【００４１】
また、メモリコントローラ３００は、処理ユニット２００からの要求に応じ、粒子データメモリ１１０の粒子データに書き込みしてよい。例えば、メモリコントローラ３００は、処理ユニット２００から書込要求を受け取ったことに応じて、粒子データメモリ１１０における、指定されたセル番号に対応付けられたセル情報および指定されたセル内の粒子番号によって示される記憶位置の粒子データに対して書込データを書き込んでよい。
【００４２】
また、メモリコントローラ３００は、処理ユニット２００からの要求に応じ、粒子データメモリ１１０に粒子データを追加してよい。例えば、メモリコントローラ３００は、処理ユニット２００から追加要求を受け取ったことに応じて、粒子データメモリ１１０における、指定されたセル番号に対応付けられたセル情報によって示される記憶位置に、当該粒子の粒子データを追加してよい。
【００４３】
また、メモリコントローラ３００は、セルに粒子データメモリ１１０の未使用のメモリブロックを割り当ててよい。例えば、メモリコントローラ３００は、セルにメモリブロックを割り当てる場合に、メモリブロック情報メモリ１３０に格納されたメモリブロック情報を用いて、粒子データメモリ１１０が使用できるメモリブロックのうち未使用のメモリブロックを選択してよい。なお、粒子データメモリ１１０が粒子以外のデータを記憶する場合、メモリコントローラ３００は、粒子以外のデータを記憶するメモリブロックをセルへの割り当てから除外してよい。
【００４４】
さらに、メモリコントローラ３００は、複数の処理ユニットから同一セルに対して競合する処理を実行してよい。例えば、メモリコントローラ３００は、複数の処理ユニットから同一セルに対して競合する複数の追加要求を受信した場合に、複数の追加要求のそれぞれをアトミックに処理してよい。
【００４５】
ネットワークインタフェース４００は、処理装置１０と外部（例えば、他の処理装置１０）との通信を仲介する。これにより、処理装置１０は、自身が担当しない担当外セルを担当する他の処理装置１０と通信し、担当外セル中の粒子の粒子データ等を他の処理装置１０から取得することができる。
【００４６】
コンボリューションユニット６００は、粒子間に働く力のうち処理ユニット２００で計算されないものを計算する。例えば、コンボリューションユニット６００は、長距離ユニット２３０と協働して、粒子間に作用する長距離クーロン力を計算する。例えば、コンボリューションユニット６００は、格子点の電荷から格子点の電位を畳み込み演算により算出し、長距離ユニット２３０に提供する。コンボリューションユニット６００は、長距離クーロン力の計算量及び計算時間を削減するために、粒子の電荷を格子点上にアサインする手法を用いてよい。コンボリューションユニット６００の動作の詳細については後述する。
【００４７】
例えば、コンボリューションユニット６００は、空間内に設けた格子点のうち処理装置１０が担当する分割空間に含まれる格子点にアサインされた複数の粒子の電荷から、担当する分割空間内に含まれる格子点の電位を畳み込み演算により算出してよい。複数の処理装置１０におけるコンボリューションユニット６００は、相互に通信して、各格子点の電荷に応じた値を複数の軸の各軸方向に順に畳み込んでいってよい。コンボリューションユニット６００は、ハードウェアにより実現されてよく、又は、ソフトウエア（すなわちプログラム）により実現されてもよい。後者の場合、ソフトウエア（プログラム）は、記録媒体（例えば、揮発性又は不揮発性メモリ）に記録されてよい。コンボリューションユニット６００の処理の詳細は後述する。
【００４８】
このように、複数の処理装置１０は、互いに通信しながら、パイプライン２１０及びコア２２０等の専用ハードウェアにより粒子に作用する力や粒子位置等を演算し、メモリ１００の所定の記憶位置に演算結果を格納する。各粒子の記憶位置は、セル情報メモリ１２０等により管理されるので、粒子がセル間を移動した場合や粒子が追加された場合であっても、粒子データメモリ１１０を書き換えずに処理を完了することも可能である。
【００４９】
本実施形態によれば、メモリコントローラ３００が処理ユニット２００のメモリ１００へのアクセスを管理するので、複数のパイプライン２１０やコア２２０間の同期をソフトウエアでとることなく、複数の粒子をセル上で管理することができる。また、本実施形態によれば、セル番号により、粒子データの読み出しが可能になるので、粒子がセル間を移動した場合であっても同じパイプラインコマンド及びネットワークコマンドを再利用することができる。
【００５０】
図４は、本実施形態におけるメモリ１００の記憶内容の一例を示す。図４には、最大６４粒子を格納するセルＡとセルＤが示される。粒子データメモリ１１０は、多数のメモリブロック（以下、ＭＢともいう）を有し、そのうちのメモリブロック１〜メモリブロック４でセルＡの６４粒子の粒子データを記憶し得る。ここで、各メモリブロックは最大１６粒子分の粒子データを記憶してよい。また、粒子データメモリ１１０は、メモリブロック１６でセルＤの最大１６粒子分の粒子データを記憶してよい。
【００５１】
セル情報メモリ１２０は、粒子データメモリ１１０における粒子の記憶位置をセル番号に対応づけて記憶する。例えば、セル情報メモリ１２０は、セルＡに対応付けてメモリブロック１〜４に対応するアドレス（例えば、メモリブロック１の先頭アドレス）をセル情報として記憶する。
【００５２】
これにより、セルＡに属する粒子のうち１〜１６番目までのものは粒子データメモリ１１０のメモリブロック１に対応し、１７〜３２番目までのものは粒子データメモリ１１０のメモリブロック２に対応し、３３〜４８番目までのものは粒子データメモリ１１０のメモリブロック３に対応し、４９〜６４番目までのものは粒子データメモリ１１０のメモリブロック４に対応することが示される。
【００５３】
ここで、粒子データメモリ１１０及びセル情報メモリ１２０は、二重化された粒子データを記憶してよい。例えば、粒子データメモリ１１０は、複数の粒子について現在のシミュレーション時刻の粒子データを記憶する第１領域と、当該複数の粒子について次の時刻の粒子データを記憶する第２領域とを備えてよい。そして、粒子の移動に伴って各セルに粒子の再配置を行う場合、第１領域において記憶位置が指定される粒子データを第２領域の記憶位置に再割り当てしてよい。
【００５４】
ここで、セル情報メモリ１２０も、粒子データメモリ１１０の第１領域と第２領域に対応して、第１セット及び第２セットを有してよい。例えば、セル情報メモリ１２０は、複数のセルに対応付けた第１セットの複数のセル情報と、複数のセルに対応付けた第２セットの複数のセル情報とを記憶してよい。そして、空間内に複数の粒子の移動に伴って複数の粒子を各セルに再配置する処理において、処理ユニット２００は、第１セットの複数のセル情報によって記憶位置が指定される各粒子の粒子データを、第２セットの複数のセル情報によって指定される記憶位置に再割当してよい。
【００５５】
図４では、セル情報メモリ１２０の第１セットにおいて、セルＡに属する現在の粒子データが粒子データメモリ１１０のＭＢ１〜４に記憶され、セルＢに属する現在の粒子データが粒子データメモリ１１０のＭＢ５〜８に記憶されることが示される。また、セル情報メモリ１２０の第２セットにおいて、セルＡに属する次時刻の粒子データが粒子データメモリ１１０のＭＢ１'〜４'に記憶され、セルＢに属する次時刻の粒子データが粒子データメモリ１１０のＭＢ５'〜８'に記憶されることが示される。ここで、ＭＢ１'〜４'はＭＢ１〜４と異なるブロックであり、ＭＢ５'〜８'はＭＢ５〜８とは異なるブロックである。
【００５６】
セル情報メモリ１２０は、セル中の粒子数を記憶してよい。例えば、図示するようにセル情報メモリ１２０は、セルＡの粒子数が１１であり、セルＢの粒子数が１６であることを記憶する。メモリブロック情報メモリ１３０は、メモリブロック１、メモリブロック２等が使用済であるか、未使用であるかを示す。
【００５７】
図５から図７において、本実施形態におけるメモリ処理の例を示す。
【００５８】
図５は、メモリコントローラ３００によるアトミックなセルへの粒子追加の例を示す。あるセルに粒子Ａのみが含まれる場合を想定する。ここで、コア１（図３に示すコア２２０の１つに対応）が、メモリコントローラ３００に粒子追加命令（Ａｐｐｅｎｄ命令）を送信する。これに応じて、メモリコントローラ３００が粒子データメモリ１１０にアクセスして当該セルに新しい粒子Ｂを追加する。
【００５９】
また、コア２（図３に示すコア２２０の別の１つに対応）が、メモリコントローラ３００に粒子追加命令（Ａｐｐｅｎｄ命令）を送信する。これに応じて、メモリコントローラ３００が、粒子データメモリ１１０にアクセスして当該セルに新しい粒子Ｃを追加する。メモリコントローラ３００は、このようなメモリアクセス処理を一度（アトミック）に行ってよい。
【００６０】
このようにメモリコントローラ３００が、メモリへの粒子の追加を制御する。各コアがメモリコントローラ３００を介さず、それぞれでメモリにアクセスして粒子を追加した場合は、処理の競合が生じ得るが、本実施形態によればメモリコントローラ３００により、そのような競合は避けられる。
【００６１】
図６は、メモリコントローラ３００によるアトミックな演算処理の例を示す。あるセル（例えば、特定の粒子）に対して演算処理（例えば、複数種類の力の合算）を行う場合を想定する。ここで、処理ユニットのコア１（図３に示すコア２２０の１つに対応）が、予め定められたデータを演算により更新することを指示する更新要求（例えば、積算を指示するＡＣＣＵＭ命令）を、メモリコントローラ３００に送信する。更新要求を受け取ったことに応じて、メモリコントローラ３００が粒子データメモリ１１０にアクセスして演算処理（例えば、Ａ＋Ｂ）を実行し、演算結果でデータを更新する。
【００６２】
また、コア２（図３に示すコア２２０の別の１つに対応）が、メモリコントローラ３００に更新要求（例えば、ＡＣＣＵＭ命令）を送信する。これに応じて、メモリコントローラ３００が粒子データメモリ１１０にアクセスして演算処理（Ａ＋Ｂ＋Ｃ）を実行する。このような演算処理を一度（アトミック）に行ってよい。
【００６３】
このようにメモリコントローラ３００が、メモリ上での演算処理を制御する。各コアがメモリコントローラ３００を介さず、それぞれでメモリに読出及び書込を行って演算した場合は、処理の競合が生じ得るが、本実施形態によればメモリコントローラ３００により、そのような競合は避けられる。
【００６４】
図７は、メモリコントローラ３００によるアトミックな積算処理の別の例を示す。メモリ１００は、各粒子の粒子データが現シミュレーション時刻で更新されたか否かを示すアトリビュートを記憶してよい。例えば、アトリビュートは、複数の粒子のそれぞれに対応付けられて、各粒子の粒子データ中の予め定められたデータが現シミュレーション時刻に更新されたか否かを示すものであってよい。アトリビュートは、粒子データメモリ１１０が記憶する各粒子の粒子データ、及び、セル情報メモリ１２０が記憶する各粒子に対応するセル情報の少なくとも１つに保持されてよい。
【００６５】
メモリコントローラ３００は、一の粒子の粒子データ中における予め定められたデータがアクセスされたことに応じて、アトリビュートに基づいて、予め定められたデータに記録されている値を使用するか、初期値を使用するかを選択してよい。
【００６６】
例えば、図７の例では、最初に、粒子データメモリ１１０において、対象粒子についてデータＡとアトリビュートＴ−１が記憶されている。次の時刻Ｔで、コア１（図３に示すコア２２０の１つに対応）が、メモリコントローラ３００に更新要求（例えば、ＡＣＣＵＭ命令）を送信する。
【００６７】
メモリコントローラ３００は、更新要求を受け取ったことに応じて、予め定められたデータが現シミュレーション時刻に更新されている場合は予め定められたデータに記録されている値に対して演算を施して更新する。メモリコントローラ３００は、予め定められたデータが現シミュレーション時刻に更新されていない場合は初期値に対して演算を施して予め定められたデータを更新する。
【００６８】
例えば、メモリコントローラ３００が、対象粒子のアトリビュートＴ−１と現在の時刻Ｔとを比較し、一致しないと判断する。これに応じて、メモリコントローラ３００は、粒子データメモリ１１０にアクセスして、対象粒子についてデータＡを破棄し、ＡＣＣＵＭ命令に含まれる初期値Ｂで更新する。メモリコントローラ３００は、同時に対象粒子のアトリビュートをＴ−１からＴに更新する。
【００６９】
更にコア２（図３に示すコア２２０の別の１つに対応）が、メモリコントローラ３００に更新要求（例えば、ＡＣＣＵＭ命令）を送信する。メモリコントローラ３００が、対象粒子のアトリビュートＴと現在の時刻Ｔとを比較し、一致すると判断する。これに応じて、メモリコントローラ３００は、対象粒子の記憶されているデータＢを使用し、粒子データメモリ１１０にアクセスして積算処理（Ｂ＋Ｃ）を実行する。
【００７０】
図７に示した実施形態によれば、メモリコントローラ３００がアトリビュートの値に応じて、演算結果を初期値（例えば、０）にする。各コア２２０がメモリ１００にアクセスして積算処理（例えば、複数種類の力の合算）を行う場合、最初に、メモリ１００にアクセスしたコア２２０が初期値０を書き込む必要があるが（０クリアともいう）、このような処理には時間がかかる。一方で、本実施形態によれば、メモリコントローラ３００が０クリアをメモリに対して行う必要がなく、アトリビュートの値に応じて初期値を０にした積算処理を行うことができる。なお、アトリビュートは、粒子データメモリ１１０が粒子以外のデータを記憶する場合、粒子データだけでなく、当該粒子以外のデータにも適用してよい。
【００７１】
図８から図１２において、本実施形態における遠距離力（例えば、遠距離のクーロン力）の処理方法の例を示す。例えば、処理装置１０は、（１）空間中の各粒子が有する電荷を、空間に設けられた比較的少数の格子点に近似的にアサインするチャージアサインを実行し、（２）格子点上の電位を計算する電位計算を実行し、（３）その後、格子点上の電位を元に各粒子への力を計算するパックインターポレーションを実行する。このような手法は、Ｐａｒｔｉｃｌｅ  Ｍｅｓｈ  Ｅｗａｌｄ（ＰＭＥ）としても知られている。本実施形態において、長距離ユニット２３０は（１）と（３）を実行し、コンボリューションユニット６００は（２）を実行する。
【００７２】
ここで、（２）電位計算は、格子電荷を含むポアソン方程式を解くことにより行われる。ポアソン方程式は、格子点の電荷値に格子点間の距離に応じた係数（カーネル）を乗じ、予め定められた範囲内の全ての格子点からの寄与を畳み込みにより加算することにより、解かれる。ここで、畳み込みは、密で近距離の畳み込みと、疎で長距離の畳み込みの結果を足し合わせることにより行ってよい。このような手法はＭｕｌｔｉｌｅｖｅｌ  Ｓｕｍｍａｔｉｏｎ  Ｍｅｔｈｏｄ（ＭＳＭ：Ｓｋｅｅｌ等、２００２、Ｈａｒｄｙ等、２０１６）として知られている。
【００７３】
図８は、ＭＳＭによる解法の一例を示す。以降の図では説明のため、２次元（２軸方向）に配列された格子点を図示するが、実際には３次元（３軸方向）に配列された格子点が用いられてよい。
【００７４】
図示するように、コンボリューションユニット６００は、例えば、レベル１〜３の３段階の粗密レベルで畳み込みを実行してもよい。対象となる格子点（図中、Ｔで示す）の電位を算出するのに、コンボリューションユニット６００は、まず最も密なレベル１における近接格子点６６からの対象格子点Ｔへの寄与を計算する。
【００７５】
次にコンボリューションユニット６００は、中間の粗密レベルのレベル２における近接格子点６４からの対象格子点Ｔへの寄与を計算する。更にコンボリューションユニット６００は、最も疎なレベル３における近接格子点６２からの対象格子点Ｔへの寄与を計算する。コンボリューションユニット６００は、これらのレベル１〜３における寄与を合算することにより、対象格子点Ｔの電位を算出してよい。
【００７６】
レベル１〜３のいずれかのレベルにおける格子点のそれぞれは、セルに対応するものであってよい。例えば、レベル３の各格子点は、各セルの中心点又は頂点に対応するものであってよい。また、例えば、レベル３の所定の個数の格子点（例えば、８個の格子点）は、セルごとに設けられてよい。
【００７７】
図９は、１つのレベルにおける畳み込み処理の概要を示す。この図の例では、各処理ノード（チップ）は、４個の格子点を担当する。格子点はセルに対応するものであってよい。一例として、１個の格子点は１個のセルに対応する。
【００７８】
コンボリューションユニット６００は、対象格子点Ｔから一方向にカットオフ範囲内（例えば隣接２個）の格子点までの電荷を考慮して畳み込みを行う。図９の例では、チップ５が担当する対象格子点Ｔの電位は、チップ１が担当する１個の隣接格子点、チップ２〜４及びチップ７が担当する２個の隣接格子点、及び、チップ５〜６及びチップ８〜９が担当する４個の隣接格子点（対象格子点自身も含んでよい）の電荷の畳み込みに少なくとも部分的に基づいて決定する。
【００７９】
ここで、チップ５は、チップ１〜４及びチップ６〜９と個別に通信して各隣接格子点の電荷を取得してもよいが、その場合、演算時間よりも通信よるオーバーヘッドが処理時間のボトルネックとなる場合がある。そこで、本実施形態においては、格子点を軸方向に分離し、各軸における畳み込みを別個に行うことで、チップ間の通信時間を削減し、全体的な処理時間を減少させる。
【００８０】
例えば、複数の処理ノードのコンボリューションユニット６００は、複数の軸内における格子点間の距離に応じた係数を算出する関数を、複数の軸のそれぞれに分離したカーネル関数の組み合わせによって近似することにより、複数の軸における畳み込み演算を各軸方向の畳み込みに分離してよい。
【００８１】
例えば、コンボリューションユニット６００は、各軸について、
ｘ'ｎ＝ａ−２ｘｎ−２＋ａ−１ｘｎ−１＋ａ０ｘｎ＋ａ１ｘｎ＋１＋ａ２ｘｎ＋２  …式１
を計算することで畳み込み演算を実行してよい。ここで、ｘ'ｎは対象格子点Ｔにおける電位であり、ａ−２〜ａ２は格子点間の距離に応じた係数であり、ｘｎ−２〜ｘｎ＋２は各格子点の電荷である。
【００８２】
コンボリューションユニット６００は、第１軸方向における予め定められた範囲の格子点を担当する他の処理ノード（チップ）から受信した電荷等の値に応じた値を担当する格子点に畳み込んでよい。例えば、コンボリューションユニット６００は、図８に示すｘ方向と図９に示すｙ方向のそれぞれについて、他の処理ノード（チップ）から電荷等の値（例えば、ｘｎ−２〜ｘｎ＋２）を受信し、上記式１を計算することで対象格子点のｘ方向の寄与分及びｙ方向の寄与分を演算してよい。
【００８３】
また、コンボリューションユニット６００は、自身の担当する格子点の電荷及び／又は自身の演算結果の情報を別のチップのコンボリューションユニット６００に対して送信する。例えば、複数の処理ノード（チップ）のそれぞれのコンボリューションユニット６００は、担当する格子点に割り当てられた電荷等の値を、複数の軸のうち第１軸方向における予め定められた範囲の格子点を担当する他の処理ノードに送信する。
【００８４】
例えば、コンボリューションユニット６００は、電荷及び／又は演算結果を、各軸方向に必要な範囲までに存在するコンボリューションユニット６００に対して、マルチキャストする。一例として、コンボリューションユニット６００は、電荷等をｙ方向及び／又はｚ方向に１又は複数チップ分隣接するコンボリューションユニット６００にマルチキャストしてよい。
【００８５】
コンボリューションユニット６００は、予め定められた範囲の格子点を担当する他の処理ユニットからの受信回数が、予め定められた数に達したことに応じて第１軸方向における畳み込みの終了を判定してよい。例えば、図１０におけるチップ５のコンボリューションユニット６００は、チップ４から１回電荷を受信し、チップ６から２回電荷を受信したこと（すなわち、計３回の電荷の受信）に応じて、Ｘ方向における畳み込みの終了を判定してよい。同様に図１１におけるチップ５のコンボリューションユニット６００は、チップ２から１回電荷を受信し、チップ８から２回電荷を受信したこと（すなわち、計３回の電荷の受信）に応じて、Ｙ方向における畳み込みの終了を判定してよい。
【００８６】
そして、コンボリューションユニット６００は、複数の粗密レベルで演算した畳み込み結果に基づいて、各格子点の電位を計算してよい。例えば、コンボリューションユニット６００は、図９〜図１１に基づいて説明した手法により、複数の処理ノードのコンボリューションユニット６００は、空間を第１単位で分割した各第１格子点（例えば、図８のレベル１に示す格子点）にアサインされた電荷を各第１格子点から第１範囲内で畳み込んでよい。
【００８７】
第１格子点の電荷を集計することで、コンボリューションユニット６００は、空間を第１単位よりも大きな第２単位で分割した各第２格子点（例えば、図８のレベル２に示す格子点）にアサインされた電荷を、算出してよい。
【００８８】
そして、コンボリューションユニット６００は、算出した電荷から第２格子点の電位を算出し、第２格子点で求めた電位から第１範囲内で畳み込むことで、各第１格子点の電位を算出してよい。コンボリューションユニット６００は、更に空間を第２単位よりも大きな第３単位で分割した各第３格子点（例えば、図８のレベル３に示す格子点）にアサインされた電荷を算出し、各第３格子点の電位を算出し、これらを更に用いて、各第１格子点の電位を算出してよい。
【００８９】
複数の粗密レベルで演算した畳み込み結果の統合は、コンボリューションユニット６００とは別個のハードウェアにより実現してもよい。例えば、処理システム又は処理装置１０は、ＦＰＧＡ等の専用回路を別途有し、当該専用回路で畳み込み結果の統合を行ってもよい。
【００９０】
図１２は、３レベルにおいて実行されるコンボリューションユニット６００による電位演算の一例を示す。図示する通り、６４格子点×６４格子点×６４格子点における電荷（６４３電荷）に基づいて、より大きな単位の３２格子点×３２格子点×３２格子点における電荷（３２３電荷）が演算される。また、３２３電荷に基づいて更に大きい単位の１６格子点×１６格子点×１６格子点における電荷（１６３電荷）が演算される。
【００９１】
そして、１６３電荷から同格子点における電位（１６３電位）が演算される。１６３電位及び３２３電荷に基づいて３２格子点×３２格子点×３２格子点における電位（３２３電位）が演算される。更に３２３電位及び６４３電荷に基づいて６４格子点×６４格子点×６４格子点における電位（６４３電位）が演算される。
【００９２】
本実施形態によれば、各レベルの各軸方向において、畳み込み演算は順不同に実行でき、各格子点の演算の終了は受信したデータ個数で判断できる。また、コンボリューションユニット６００は、演算に必要な前の軸方向のデータが揃うまで次の演算を実行しなくてよいので、同期処理を必要とせず、状態を自動的に遷移させることができる。
【００９３】
また、本実施形態によれば、ＭＳＭに必要な格子レベルの上下を繋げる補完演算も一つのハードウェア（すなわちコンボリューションユニット６００）により実現される。本実施形態によれば、ＦＦＴによりポアソン方程式を解く場合と比較して、処理ノード間の通信量を低減することで、全体的な処理時間を削減することができる。
【００９４】
図１３から図１６Ｂを用いて、本実施形態における排除粒子機能の例を示す。
【００９５】
図１３は、排除粒子機能に用いられるマスクパターンの一例を示す。マスクパターンメモリ１４０に記憶された複数のマスクパターンのそれぞれは、計算対象の粒子の粒子番号に対して予め定められた相対粒子番号を有する他の粒子のそれぞれを高排除および低排除の少なくとも一方の対象とすべきか否かを指定する。例えば、図１３では、短距離クーロン力等の計算において、粒子番号ｉ＝１の粒子が、別の粒子（粒子番号ｊ＝２、３、４…）を高排除又は低排除の対象とするかを表すマスクパターンを示している。
【００９６】
図１３のマスクパターンは「０００１１０…」の値を有している。ここで「０」は排除の対象としないことを表し、「１」は排除の対象とすることを表す。また、マスクパターンは別の粒子に対し、高排除と低排除の両方についての指定を含んでいる。例えば、当該マスクパターンは、粒子番号１の粒子が、粒子番号２の粒子に対して、マスク値「００」を有する。これは、粒子番号１の粒子は、粒子番号２の粒子を、低排除及び高排除の対象にしないことを示す。
【００９７】
また、例えば、当該マスクパターンは、粒子番号１の粒子が、粒子番号３の粒子に対して、マスク値「０１」を有する。これは、粒子番号１の粒子は、粒子番号３の粒子を、低排除の対象にすることを示す。同様に、当該マスクパターンは、粒子番号１の粒子が、粒子番号４の粒子に対して、マスク値「１０」を有する。これは、粒子番号１の粒子は、粒子番号４の粒子を、高排除の対象にすることを示す。
【００９８】
このマスクパターンの値に基づいて、処理ユニット２００のパイプライン２１０は、短距離クーロン力等の計算の一部を省略してよい。例えば、パイプライン２１０は、図１３のマスクパターンの値に基づいて、粒子番号１の粒子と粒子番号２の粒子間の短距離クーロン力等を計算し、粒子番号１の粒子と粒子番号３の粒子間の短距離クーロン力等を計算した結果を低排除所定の割合で減殺し、粒子番号１の粒子と粒子番号４の粒子間の短距離クーロン力等を高排除所定の割合で減殺してよい、例えば、高排除が全部排除を意味する場合、短距離クーロン力等を計算しないでよい（又はこれらの力等を０としてよい）。
【００９９】
ここで、粒子間の相互作用を高い精度でシミュレーションしようとすると、全ての粒子ペア間のマスクパターンを保持することになる。しかし、全ての粒子ペアのマスクパターンを保持することは、メモリ容量やマスク幅の制約から難しい場合がある。一方でマスクパターンに頼らず個別に粒子間の高排除／低排除／非排除を考慮した力の演算を個別に行うと計算時間が増大する問題が生じていた。
【０１００】
ここで、本発明者らは、分子動力学シミュレーションの対象となる巨大タンパク質等は、所定構造のアミノ酸の繰り返し等、同一／類似する部分構造が多く出現することに着目した。従って、粒子に適用すべきマスクパターンも同様のものが多く出現することになる。そこで、本実施形態によれば、マスクパターンを限られた数のパターンに限定する代わりに、マスク幅を大きくし、これにより、短距離クーロン力等のより効率的な排除を実現した。本実施形態では、限られた数のマスクパターンを指定するためにマスクパターン識別情報を用いる。
【０１０１】
図１４は、本実施形態におけるマスクパターン識別情報の一例を示す。マスクパターン識別情報は、複数の粒子のそれぞれについて、複数のマスクパターンのうち各粒子に働く力の計算において使用するマスクパターンを識別する。粒子データメモリ１１０は、粒子データの一部として、図１４に示すようなマスクパターン識別情報を記憶してよい。
【０１０２】
例えば図示するように、粒子番号１の粒子の粒子データは、パターン番号１０２３をマスクパターン識別情報として含む。この場合、粒子番号１の粒子は、パターン番号１０２３で指定されるマスクパターンを使用することが示される。同様に粒子番号２の粒子の粒子データは、パターン番号４４２をマスクパターン識別情報として含む。この場合、粒子番号２の粒子は、パターン番号４４２で指定されるマスクパターンを使用することが示される。
【０１０３】
図１５は、本実施形態において用いられるマスクパターンの一例を示す。複数のマスクパターンのそれぞれは、予め定められた長さのマスクビット列と、マスクビット列のうち計算対象の粒子に働く計算における高排除すべき他の粒子の指定および低排除すべき他の粒子の指定に割り当てるビット数を設定するための設定値とを含む。
【０１０４】
例えば、図１５に示すマスクパターンは、７７ビットのビット長さを有し、７２ビットのマスクビット列と、５ビットの設定値とを含む。５ビットの設定値は、０〜３１までの指定値を指定できる。当該指定値により、７２ビットのマスクビット列を、８〜４０ビットの第１マスクと、３２〜６４ビットの第２マスクとに分割する。例えば、設定値が１０であれば、７２ビットのマスクビット列を、１８ビットの第１マスクと５４ビットの第２マスクに分割する。
【０１０５】
第１マスクは、計算対象の粒子に働く力等の計算における高排除すべき他の粒子の指定に用いられる。例えば、粒子番号１の粒子に対して、「０１０１…」の第１マスクを使用する場合、粒子番号１の粒子と粒子番号３の粒子間の短距離クーロン力等、及び、粒子番号１の粒子と粒子番号５の粒子間の短距離クーロン力等は高排除所定の割合で減殺されてよい。高排除が全部排除を意味する場合、短距離クーロン力等を計算しないでよい（又はこれらの力等を０としてよい）。
【０１０６】
第２マスクは、計算対象の粒子に働く力等の計算における低排除すべき他の粒子の指定に用いられる。例えば、粒子番号１の粒子に対して、「００１０…」の第２マスクを使用する場合、粒子番号１の粒子と粒子番号４の粒子間の短距離クーロン力等は一部（例えば１／２又は１／４）が排除されてよい。
【０１０７】
低排除に使用される第２マスクは、高排除に使用される第１マスクよりもマスク幅が大きくてよい。これにより、高排除より遠距離まで影響する可能性のある低排除の効果を、高排除よりも遠くの原子まで考慮することができる。
【０１０８】
ここで、図１５に示すマスクパターンは、パターン番号４４２である。従って、当該マスクパターンは、粒子データのマスクパターン識別情報において４４２が指定された場合に使用される。マスクパターンメモリ１４０は、所定の数（例えば、１０２４個）のマスクパターンを記憶してよい。
【０１０９】
更に、処理装置１０は、マスクパターンメモリ１４０に記憶された所定数のマスクパターンでカバーできない粒子間の高排除／低排除の関係を更に考慮するために、マスクテーブルを用いてよい。例えば、環状分子中の隣接原子等、空間的には近接するが粒子番号が離れた粒子群間の高排除／低排除のパターンをマスクテーブルで指定することができる。
【０１１０】
図１６Ａ及び図１６Ｂに、本実施形態におけるマスクテーブルの一例を示す。マスクテーブルは、マスクテーブルメモリ１５０に記憶され、マスクパターンでカバーされない粒子番号の離れた２つの粒子群の間に働く短距離クーロン力等の高排除および低排除の少なくとも一方を指定するものであってよい。図１６Ａは高排除のマスクテーブルを示し、図１６Ｂは低排除のマスクテーブルを示す。マスクテーブルメモリ１５０に記憶されるマスクテーブルが表現する粒子群の組み合わせは、記憶するマスクテーブルの数だけ組み合わせ方（例えば１６の組み合わせ方）があってよい。
【０１１１】
例えば、図１６Ａの例では、粒子番号１０１の粒子は、粒子番号２２１、２２２、２２３の粒子に対し、「１００」の高排除のパターンを有する。また、図１６Ｂの例では、「０１０」の低排除のパターンを有する。これは、粒子番号２２１の粒子は粒子番号１０１の粒子に対して高排除（例えば、全部が排除）され、粒子番号２２２の粒子は粒子番号１０１の粒子に対して低排除（例えば、一部が排除）されることを示す。同様に粒子番号２２２の粒子は粒子番号１０２の粒子に対して高排除（例えば、全部が排除）され、粒子番号２２３の粒子は粒子番号１０３の粒子に対して低排除（例えば、一部が排除）されることが示される。
【０１１２】
ここで、マスクテーブルに記憶する高排除および低排除の少なくとも一方を指定する情報が、粒子番号の離れた２つの粒子群のどの粒子同士の組み合わせ方に対応するのかを予め定めた対応関係によって指定可能であってよい。一例として、図１７で説明する斜方モードが挙げられる。
【０１１３】
図１７Ａ及び図１７Ｂは、本実施形態における高排除のマスクテーブル斜方モードの一例を示す。本実施形態の処理装置１０は、マスクテーブルの利用に関して、例えば、図１７Ａおよび図１７Ｂに示す斜方モードを備えてよい。斜方モードが指定された場合、マスクテーブルのマスク値が示す高排除／低排除の指定範囲が、粒子番号に応じて、所定数（例えば１つ）ずつずれていく。図１７Ａの例では、粒子番号２２１の粒子は粒子番号１０１の粒子に対して高排除（例えば、全部が排除）され、粒子番号２２３の粒子は粒子番号１０２の粒子に対して高排除（例えば、全部が排除）されることが示され、図１７Ｂの例では、粒子番号２２２の粒子は粒子番号１０１の粒子に対して低排除（例えば、一部が排除）され、粒子番号２２５の粒子は粒子番号１０３の粒子に対して低排除（例えば、一部が排除）されることが示される。
【０１１４】
このように本実施形態の処理システム及び処理装置１０等によれば、従来の専用計算機を用いた場合と比較して、より高速かつ効率的に分子動力学シミュレーションを実行することができる。
【０１１５】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【０１１６】
特許請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
【符号の説明】
【０１１７】
１０  処理装置
６２  近接格子点
６４  近接格子点
６６  近接格子点
１００  メモリ
１１０  粒子データメモリ
１２０  セル情報メモリ
１３０  メモリブロック情報メモリ
１４０  マスクパターンメモリ
１５０  マスクテーブルメモリ
２００  処理ユニット
２１０  パイプライン
２２０  コア
２３０  長距離ユニット
３００  メモリコントローラ
４００  ネットワークインタフェース
６００  コンボリューションユニット
【図１】
2020064560.tif 000003
【図２】
2020064560.tif 000004
【図３】
2020064560.tif 000005
【図４】
2020064560.tif 000006
【図５】
2020064560.tif 000007
【図６】
2020064560.tif 000008
【図７】
2020064560.tif 000009
【図８】
2020064560.tif 000010
【図９】
2020064560.tif 000011
【図１０】
2020064560.tif 000012
【図１１】
2020064560.tif 000013
【図１２】
2020064560.tif 000014
【図１３】
2020064560.tif 000015
【図１４】
2020064560.tif 000016
【図１５】
2020064560.tif 000017
【図１６Ａ】
2020064560.tif 000018
【図１６Ｂ】
2020064560.tif 000019
【図１７Ａ】
2020064560.tif 000020
【図１７Ｂ】
2020064560.tif 000021