(57)【要約】【課題】双極子間の相互作用を高速に演算できる技術を提案する。【解決手段】高速演算装置を構成する複数の演算装置のそれぞれが、独立かつ並列に演算を実行できるように記述された動作ユニットに基づいて動作する仕組みを提案する。この動作ユニットは、各動作ユニットがデータの読み書きに使用するアドレス範囲をアクセス不可領域として他の動作ユニットに通知する仕組みを提案する。【選択図】図１
2010218398.tif 000002
【特許請求の範囲】
【請求項１】
双極子−双極子行列データ及び磁化ベクトルデータの集合を保持する第１の記憶装置と、
演算結果を格納する第２の記憶装置と、
演算器と、数値データ及びそのアドレス情報を格納するキャッシュメモリと、前記第１の記憶装置のアクセス可能領域を指定する第１のリストと、前記第２の記憶装置のアクセス不可領域を指定する第２のリストを格納するリストメモリとをそれぞれが有する複数の演算装置と、
前記第１の記憶装置と、前記第２の記憶装置と、前記複数の演算装置とを相互に接続するバスを有し、
双極子−双極子行列データと磁化ベクトルデータとの行列積演算を実行する第１のステップにおいて、
前記複数の演算装置のそれぞれが、独立かつ並列に、
演算装置を特定することなく事前に発生された複数の動作ユニットのうちの一つを読み込んで、当該動作ユニットに記述された磁化ベクトルデータのアドレス範囲と双極子−双極子行列データのアドレス範囲を前記第１のリストに追加すると共に、次に当該２つのアドレス範囲に基づいて演算対象としての磁化ベクトルデータと双極子−双極子行列データを前記第１の記憶装置から読み出して前記キャッシュメモリに書き込み、次に書き込まれた磁化ベクトルデータと双極子−双極子行列データの積演算を前記演算器で実行し、その演算結果である行列積データを動作ユニットで指定された前記第２の記憶装置のアドレス範囲に書き込む処理動作を実行し、
算出された前記行列積データの和演算を実行する第２のステップにおいて、
前記複数の演算装置のそれぞれが、独立かつ並列に、
１つ目の処理として、前記第１のステップによって算出された行列積データの集合に基づいて、全ての行列積データ対間で要素の重複が排除されるように行列積データ対の個数分だけ発生される動作ユニットの一つを読み込み、当該動作ユニットによる数値データの読み書きが終了するまでの間、数値データの読み書きを行うアドレス範囲を前記アクセス不可アドレスとして他の全ての動作ユニット置に通知し、次に動作ユニットで指定された行列積データ対を構成する２つの行列積データの各アドレス範囲を前記第１のリストに追加すると共に、次に指定された行列積データ対を構成する行列積データを前記第２の記憶装置の各アドレス範囲から読み出して前記キャッシュメモリに書き込み、次に書き込まれた２つの行列積データの和演算を前記演算器で実行し、その演算結果である行列積和データを動作ユニットで指定された前記第２の記憶装置のアドレス範囲に書き込む動作を実行し、
引き続き２つ目の処理として、算出された行列積和データの集合に基づいて、全ての行列積和データ対間で要素の重複が排除されるように行列積和データ対の個数分だけ発生される動作ユニットのうちの一つを読み込み、当該動作ユニットで指定された行列積和データ対を構成する２つの行列積和データの各アドレス範囲を前記第１のリストに追加すると共に、当該動作ユニットによる演算結果の書き込み動作が終了するまでの間、演算結果の書き込み先を与える１つのアドレス範囲を他の全ての動作ユニットに対して前記第２のリストに書き込むように通知し、次に指定された行列積和データ対を構成する行列積和データを前記第２の記憶装置の各アドレス範囲から読み出して前記キャッシュメモリに書き込み、次に書き込まれた２つの行列積和データの和演算を前記演算器で実行し、その演算結果である行列積和データを動作ユニットで指定された前記第２の記憶装置のアドレス範囲に書き込む動作を実行し、
以後、前記２つ目の処理を、演算結果が１つの行列積和データに統合されるまで繰り返し実行する
ことを特徴とする双極子相互作用の高速演算装置。
【請求項２】
個々の演算装置に実行させる動作内容を記述する各動作ユニットには、それぞれに固有の認識番号が付されており、各演算装置は、当該認識番号に基づいて自他の演算装置が実行する動作ユニットを識別する
ことを特徴とする請求項１に記載の高速演算装置。
【請求項３】
前記第２のステップにおける前記１つ目又は前記２つ目の処理で実行される各動作ユニットにおいては、
和演算の対象としての行列積データ又は行列積和データの集合のうち、各行列積データ又は行列積和データの認識番号の並び順に取り出された２つの行列積データ又は行列積和データが和演算の対象として指定される
ことを特徴とする請求項２に記載の高速演算装置。
【請求項４】
前記第２のステップにおいて、
各動作ユニットは、和演算の対象に指定された２つの行列積データ又は行列積和データのいずれか一方を読み出したアドレス範囲を、演算結果の書き込み先のアドレス範囲に使用する
ことを特徴とする請求項３に記載の高速演算装置。
【請求項５】
前記第２のステップにおける前記１つ目の処理で和演算の対象となる行列積データの総数が２のべき乗数と一致しない場合、
前記行列積データの集合を、前記総数を超えない最大の２のべき乗数で表される個数分の部分集合に処理範囲を分割し、その後、残りの行列積データの集合に対して、その総数を超えない最大の２のべき乗数で表される個数分の部分集合に処理範囲を分割する処理を、全ての行列積データがいずれかの部分集合に割り当てられるまで繰り返し、
生成された個々の部分集合を対象として、前記１つ目の処理及び前記２つ目の処理を適用し、
それぞれの部分集合についてそれぞれ１つの行列積和データが得られると、それらを対象として前記２つ目の処理を実行する
ことを特徴とする請求項４に記載の高速演算装置。
【請求項６】
数値データの集合を保持する第１の記憶装置と、
演算結果を格納する第２の記憶装置と、
演算器と、数値データ及びそのアドレス情報を格納するキャッシュメモリと、前記記憶装置のアクセス可能領域を指定する第１のリストと、前記記憶装置のアクセス不可領域を指定する第２のリストを格納するリストメモリとをそれぞれが有する複数の演算装置と、
前記第１の記憶装置と、前記第２の記憶装置と、前記複数の演算装置とを相互に接続するバスとを有し、
前記演算装置を特定することなく発生される動作ユニットの少なくとも一部が、
処理対象として前記第１の記憶装置から読み出す数値データのアドレス範囲と、
演算結果を書き込むアドレス範囲と、
読み出された数値データに対する演算動作を指定する処理内容と、
数値データの読み出し又は書き込み先を与えるアドレス範囲を、前記アクセス不可領域として他の演算装置に通知させる処理と、
読み出し又は書き込みの終了を他の演算装置に通知して前記第２のリストから削除させる処理と
を記述内容として有する
ことを特徴とする双極子相互作用の高速演算装置。
【請求項７】
双極子−双極子行列データ及び磁化ベクトルデータの集合を保持する第１の記憶装置と、演算結果を格納する第２の記憶装置と、演算器と、数値データ及びそのアドレス情報を格納するキャッシュメモリと、前記第１の記憶装置のアクセス可能領域を指定する第１のリストと、前記第２の記憶装置のアクセス不可領域を指定する第２のリストを格納するリストメモリとをそれぞれが有する複数の演算装置と、前記第１の記憶装置と、前記第２の記憶装置と、前記複数の演算装置とを相互に接続するバスを有する高速演算装置において実行される双極子相互作用の高速演算方法であって、
双極子−双極子行列データと磁化ベクトルデータとの行列積演算を実行する第１のステップにおいて、
前記複数の演算装置のそれぞれが、独立かつ並列に、
演算装置を特定することなく事前に発生された複数の動作ユニットのうちの一つを読み込んで、当該動作ユニットに記述された磁化ベクトルデータのアドレス範囲と双極子−双極子行列データのアドレス範囲を前記第１のリストに追加すると共に、次に当該２つのアドレス範囲に基づいて演算対象としての磁化ベクトルデータと双極子−双極子行列データを前記第１の記憶装置から読み出して前記キャッシュメモリに書き込み、次に書き込まれた磁化ベクトルデータと双極子−双極子行列データの積演算を前記演算器で実行し、その演算結果である行列積データを動作ユニットで指定された前記第２の記憶装置のアドレス範囲に書き込む処理動作を実行し、
算出された前記行列積データの和演算を実行する第２のステップにおいて、
前記複数の演算装置のそれぞれが、独立かつ並列に、
１つ目の処理として、前記第１のステップによって算出された行列積データの集合に基づいて、全ての行列積データ対間で要素の重複が排除されるように行列積データ対の個数分だけ発生される動作ユニットの一つを読み込み、当該動作ユニットによる数値データの読み書きが終了するまでの間、数値データの読み書きを行うアドレス範囲を前記アクセス不可アドレスとして他の全ての動作ユニットに通知し、次に動作ユニットで指定された行列積データ対を構成する２つの行列積データの各アドレス範囲を前記第１のリストに追加すると共に、次に指定された行列積データ対を構成する行列積データを前記第２の記憶装置の各アドレス範囲から読み出して前記キャッシュメモリに書き込み、次に書き込まれた２つの行列積データの和演算を前記演算器で実行し、その演算結果である行列積和データを動作ユニットで指定された前記第２の記憶装置のアドレス範囲に書き込む動作を実行し、
引き続き２つ目の処理として、算出された行列積和データの集合に基づいて、全ての行列積和データ対間で要素の重複が排除されるように行列積和データ対の個数分だけ発生される動作ユニットのうちの一つを読み込み、当該動作ユニットで指定された行列積和データ対を構成する２つの行列積和データの各アドレス範囲を前記第１のリストに追加すると共に、当該動作ユニットによる演算結果の書き込み動作が終了するまでの間、演算結果の書き込み先を与える１つのアドレス範囲を他の全ての動作ユニットに対して前記第２のリストに書き込むように通知し、次に指定された行列積和データ対を構成する行列積和データを前記第２の記憶装置の各アドレス範囲から読み出して前記キャッシュメモリに書き込み、次に書き込まれた２つの行列積和データの和演算を前記演算器で実行し、その演算結果である行列積和データを動作ユニットで指定された前記第２の記憶装置のアドレス範囲に書き込む動作を実行し、
以後、前記２つ目の処理を、演算結果が１つの行列積和データに統合されるまで繰り返し実行する
ことを特徴とする双極子相互作用の高速演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、双極子相互作用の高速演算技術に関する。例えば永久磁石、磁気センサ、磁気記録媒体その他の磁性材料の集合体における磁化分布の解析処理や磁化曲線の解析処理の高速化を実現する技術に関する。
【背景技術】
【０００２】
永久磁石、磁気センサ、磁気記録媒体等は、磁化を帯びる性質を有する材料（磁性材料）を主に含んでいる。一般に磁性材料の磁化特性は、マイクロマグネティクスに基づいた数値計算により定量的な評価がなされている。このマイクロマグネティクスに基づく解析方法には、ブラウン方程式（Brown’s equation）を用いて磁気エネルギーの平衡状態を探索する方法と、ランダウ-リフシッツ-ギルバート方程式（Landau-Lifshitz-Gilbert equation）を用いて磁化の動的過程から磁化集団の平衡状態を求める方法の２方法がある。どちらの方法においても、解析対象の磁性体を多数のセルに分割し、各セルに微小磁化ベクトルを与え、磁化ベクトルの状態（向き）と磁気エネルギーを計算する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１０−１２４４７９号公報
【特許文献２】特開平８−２８２７４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
以上のように、磁化分布や磁化曲線の解析では、多数のセル上に配置した磁化ベクトルの状態と対応した磁気エネルギーの計算が必要である。磁気エネルギーの計算は、磁化間の双極子相互作用エネルギー、磁化に働く交換相互作用エネルギー、磁化の異方性エネルギー、そして、外部から印加した磁場との相互作用エネルギーの４種の計算が必要である。
【０００５】
これらの計算のうち磁化間の双極子相互作用の計算は、全ての磁化ベクトル間のペア（組）に対して計算を行う必要があり、最も多くの計算量を必要とする。このため、セル数の規模が大きい場合、ベクトル型スーパーコンピュータに代表される高性能な逐次処理型コンピュータを用いても非常に長い計算時間を必要としてしまう。
【０００６】
この大規模系に対する磁化分布や磁化曲線の解析の高速化の課題に対して、高速フーリエ変換を利用する方法、磁位を利用する方法、方程式全体の並列処理化（特許文献１参照）などの幾つかの提案がなされている。
【０００７】
しかしながら、高速フーリエ変換を利用した方法は、周期的で十分に滑らかな磁化にしか適用できない欠点がある。また、磁位を利用した方法は、磁位を求めるのにポワソン方程式又はラプラス方程式を解く必要があり、任意の形状や形状変化に対して汎用的に扱えない欠点がある。
【０００８】
また、方程式全体を並列処理化して解析を高速化する方法（特許文献２参照）では、最も計算時間のかかる反磁界を、メモリ分散型のマルチプロセッサ型コンピュータシステムで直接法により計算すると示されているが、高速化の要に関しては言及されていない。また、特許文献１の開示内容はブラウン方程式の解析に関するもののみであり、磁化の動的過程の解析を行うための情報が記載されていない。
【課題を解決するための手段】
【０００９】
そこで、発明者は、双極子間の相互作用を高速に演算できる技術を提案する。具体的には、高速演算装置（計算機システム）を構成する複数の演算装置のそれぞれが、独立かつ並列に演算を実行できるように記述された動作ユニットに基づいて動作する技術を提案する。また、発明者は、各動作ユニットがデータの読み書きに使用するアドレス範囲をアクセス不可領域として他の動作ユニットに通知する仕組みを提案する。
【発明の効果】
【００１０】
本発明は、演算装置の数ではなく、動作ユニットを基準として並列処理動作を実現する。このため、高速演算装置を構成する演算装置の並列数の制約を受けることがなく、解析対象とする磁化ベクトルの数を自由に与えることができる。また、本発明の場合、各動作ユニットがデータの読み書きを行うアドレス範囲を、相互にアクセス不可領域として通知し合うことにより、各演算装置と外部の記憶装置との間のアクセスを最小化できる。すなわち、バス上での待ち時間を最小化することができる。結果として、高速演算装置全体としての処理能力を高めることができる。
【図面の簡単な説明】
【００１１】
【図１】形態例に係る演算システムの全体構成を例示する図である。
【図２】演算装置の形態例を示す図である。
【図３】ＬＬＧ解析フローと高速演算装置上で実行される処理動作の関係を説明する図である。
【図４】ベクトル和の算出動作例を説明する図である。
【発明を実施するための形態】
【００１２】
以下、図面に基づいて、双極子の相互作用を高速演算する装置の形態例を説明する。
（１）形態例
（１−１）演算システムの全体構成
図１に、形態例に係る演算システムの全体構成例を示す。演算システムは、高速演算装置１００と外部計算機１６０で構成され、これらの協働動作によって磁化エネルギーの計算動作が実行される。すなわち、高速演算装置１００と外部計算機１６０の協働動作により、(1) 磁化間の双極子相互作用エネルギーの計算、(2) 磁化に働く交換相互作用エネルギーの計算、(3) 磁化の異方性エネルギーの計算、(4) 外部から印加した磁場との相互作用エネルギーの計算が実行される。
【００１３】
この４つの計算のうち、磁化間の双極子相互作用エネルギーの計算（特に、双極子相互作用力の計算）を高速演算装置１００が実行し、他の３つの計算は外部計算機１６０が実行する。
【００１４】
なお、高速演算装置１００は、複数個の演算装置２００と、双極子−双極子行列、磁化ベクトルを格納する記憶装置１３０（以下、「メモリＧ」という。）と、演算結果を格納する記憶装置１４０（以下、「メモリＳ」という。）と、これらを相互に接続するバス１２０で構成される。すなわち、高速演算装置１００は、並列プロセッサ構造を有している。
【００１５】
因みに、メモリＧは、特許請求の範囲における第１の記憶装置に対応する。また、メモリＳは、特許請求の範囲における第２の記憶装置に対応する。また、バス１２０の一端はコネクタ１５０を介して外部計算機１６０と接続されている。
【００１６】
一方、外部計算機１６０は、バス１６２と、中央演算装置１６４と、メモリ１６６とで構成されている。
【００１７】
（１−２）演算装置２００の内部構成
図２に、演算装置２００の内部構成例を示す。この明細書において、この演算装置２００は、ＡＵＰ（Action Unit Processor）ともいう。形態例に係る演算装置２００は、演算器２１０、キャッシュメモリ２２０、リストメモリ２３０で構成される。演算器２１０は、数値データの演算を実際に実行する部分である。キャッシュメモリ２２０は、データやアドレスを格納する記憶領域である。リストメモリ２３０は、読み書きできるメモリ領域を特定するアドレスの情報（アドレス範囲）を格納する記憶領域である。
【００１８】
この形態例の場合、リストメモリ２３０には、２つのリストが格納される。１つは、メモリＧ上でのアクセス可能領域を指定するアクセス許可リスト（以下、「allowリスト」という。）２４０である。他の１つは、メモリＳ上でのアクセス不可領域を指定するアクセス不可リスト（以下、「denyリスト」という。）２５０である。なお、allowリストは特許請求の範囲における第１のリストに対応し、denyリストは特許請求の範囲における第２のリストに対応する。
【００１９】
（１−３）動作ユニットの構造
続いて、演算装置２００の動作を規定する動作ユニットＡＵ（Action Unit）の内容を説明する。動作ユニットＡＵは、数値データを指定されたメモリからの読み込み、指定される演算、指定されたメモリに対する演算結果の書き込みそれぞれの任意回数の組合せとして記述されている。なお、動作ユニットＡＵの内容は、外部計算機１６０又はメモリＧに格納されたプログラム内に記述されている。すなわち、プログラムには、複数の動作ユニットＡＵの内容が記述されている。
【００２０】
演算装置２００は、この動作ユニットＡＵを読み込み、独立に実行する。このため、高速演算装置１００の全体では、動作ユニットＡＵが並列に実行される。また、この形態例の場合、各動作ユニットＡＵには、固有の数字（認識番号）が付されている。演算装置２００は、この認識番号を用いて動作ユニットＡＵを識別する。
【００２１】
動作ユニットＡＵ間におけるデータの受け渡しは、各動作ユニットＡＵがメモリＳを介して実行する。動作ユニットＡＵがメモリＳ上にデータを書き込む場合又は読み込む場合、動作ユニットＡＵは、前述した認識番号とメモリアドレスの情報を、他の演算装置２００で動作している動作ユニットＡＵに通知する。演算装置２００上で動作している他の動作ユニットＡＵは、通知された認識番号とメモリアドレスの情報の組を、リストメモリ２３０のdenyリスト２５０に格納する。このdenyリスト２５０に存在するアドレスに対しては、その通知を受けた他の動作ユニットＡＵはアクセスすることができない。なお、動作ユニットＡＵによるメモリＳに対する書き込み動作又は読み込み動作が終了する場合、自身の認識番号を他動作ユニットＡＵに対して通知する。通知を受けた動作ユニットＡＵ側では、通知された認識番号に関連する全てのメモリアドレスの組をdenyリスト２５０から全て削除するように動作する。
【００２２】
（１−４）ＬＬＧ解析動作
図３に、ＬＬＧ解析法に基づいて、演算システム（図１）において実行される計算動作例を説明する。
【００２３】
（初期動作）
最初に、ＬＬＧ解析フローの初期動作１０００が実行される。この初期動作では、双極子−双極子行列Ｇijが外部計算機１６０において計算される。計算された双極子−双極子行列Ｇijのデータは、外部計算機１６０からコネクタ１５０及びバス１２０を通じ、高速演算装置２００内のメモリＧに書き込まれる。
【００２４】
ここで、磁化ベクトルの数をＮとすると、双極子−双極子行列Ｇijの書き込みに必要なメモリ容量は、Ｎ×Ｎ×３×３×Ｗバイトで与えられる。ここでのＷは、１つの浮動小数点実数を記録するのに必要なバイト数である。好適な例として、単精度実数（Ｗ＝４バイト）と倍精度実数(Ｗ＝８バイト)が挙げられる。
【００２５】
また、この初期動作において、各動作ユニットＡＵがアクセスするメモリ上のアドレス範囲も決定される。すなわち、初期動作において、一連の演算に必要な動作ユニットＡＵが発生される。ここで、動作ユニットＡＵは、磁化ベクトルの数Ｎ又はその整数倍の数だけ発生される。後述する動作は、この動作ユニットＡＵの記述に従って実行される。
【００２６】
（磁化に働く力の計算）
次に、外部計算機１６０と高速演算装置２００の協働動作により、磁化に働く力の計算１１００が実行される。なお、双極子相互作用の力の計算以外は、外部計算機１６０で計算される。以下では、双極子相互作用の力の計算で実行される処理動作の内容を説明する。
【００２７】
（ａ）磁化ベクトルの転送
まず、磁化ベクトル転送２１００が実行される。この動作では、更新された磁化ベクトルの集合が、外部計算機１６０からコネクタ１５０及びバス１２０を通じてメモリＧに書き込まれる。磁化ベクトルの数をＮとすると、磁化ベクトルの集合の格納に必要なメモリ容量はＮ×３×Ｗバイトである。ここでのＷは、１つの浮動小数点実数を記録するのに必要なバイト数である。好適な例として、単精度実数（Ｗ＝４バイト）と倍精度実数(Ｗ＝８バイト)とが挙げられる。
このとき、各動作ユニットＡＵが計算に使用する磁化ベクトルＭのデータが、対応する演算装置２００のキャッシュメモリ２２０に格納される動作も実行される。
【００２８】
（ｂ）ベクトル行列積の演算
次に、ベクトル行列積の演算２２００が実行される。この動作は、特許請求の範囲における第１のステップの動作に対応する。ここでは、Ｎ個の磁化集合の中から２個の磁化を取り出し、この２つの磁化の番号をｉ，ｊとして説明する。また、２つの磁化ｉ，ｊ間の双極子−双極子行列はＧijで与えられるものとする。この場合、各動作ユニットＡＵは、Ｇij×Ｍj で表現される行列演算を実行する。また、算出結果である３次元ベクトルＶijは、バス１２０を通じてメモリＳに書き込まれる。
【００２９】
以下では、この動作の詳細内容を説明する。この形態例の場合、各動作ユニットＡＵは、ベクトル行列積の演算動作が演算装置２００において並列かつ独立に実行されるように記述されている。例えば、各動作ユニットＡＵには、演算動作で使用する数値データのアドレス情報が予め指定されている。例えば双極子−双極子行列Ｇij（メモリＧ上に存在する。）のアドレス情報は、ｉ，ｊの２つの整数値と、１つの３×３行列に必要なメモリサイズＷ_33（９個の浮動小数点実数のサイズ)を用いて以下のように記述される。
【００３０】
ここでは、ｉ，ｊをゼロから始まる整数とする。その場合、双極子−双極子行列Ｇijの開始アドレスＧij_startと、終了アドレスＧij_endは、次式により与えられる。
Ｇij_start＝ｉ×（Ｎ−１）×Ｗ_33＋ｊ×Ｗ_33＝｛ｉ×（Ｎ−１）＋ｊ｝×Ｗ_33
Ｇij_end＝Ｇij_start＋Ｗ_33
従って、このステップで使用される動作ユニットＡＵには、(i) 認識番号、(ii)磁化を指定する整数値（ｉ，ｊ）、（iii） 双極子−双極子行列Ｇijのアドレス範囲（Ｇij_start，Ｇij_end）、（iv）磁化ベクトルＭjのアドレス及びベクトル値のいずれか、（ｖ）３次元ベクトルＶijを格納するアドレスが設定されている。
【００３１】
これらの情報に基づき、各演算装置２００は、独立かつ並列に、双極子−双極子行列データと磁化ベクトルを読み込み、キャッシュメモリ２２０に格納する。また、各演算装置２００は、磁化ベクトル（３次元）と双極子-双極子行列（３×３次元）の積演算を演算器２１０で実行し、演算結果をメモリＳ上に確保された３次元ベクトルＶij用のアドレス領域に格納する。
【００３２】
このステップ１に対応する全ての動作ユニットＡＵの実行が終了すると、Ｎ個の磁化集合中の全ての２つの磁化の組合せに対する双極子−双極子行列と磁化ベクトル間の積演算が完了することになる。
【００３３】
（ｃ）ベクトル和の演算
次に、ベクトル和の演算２３００が実行される。この動作は、特許請求の範囲における第２のステップの動作に対応する。算出された３次元ベクトルＶijを、ある添字ｊについてのみ加算すると、磁化ｉに作用する双極子相互作用力Ｆi （＝ΣＶij）となる。ただし、ｉ≠ｊである。更に、この双極子相互作用力Ｆi と磁化Ｍi の内積を求め、全てのｉに関する和を求めると、双極子エネルギーになる。従って、添字ｊについてのベクトル和を効率良く算出することが計算速度の向上にとって重要である。以下では、その好適な計算例を示す。
【００３４】
（ｃ−１）基本動作
ここでは、磁化ベクトルの集合中の磁化ベクトルの数をＮとし、Ｎを超えない最大の２のベキ数をＬとする。この基本動作では、Ｎ＝Ｌの場合を考える。さて、Ｌ＝２Ｐ を満たす整数Ｐを最大とする整数の集合｛１,２,…,Ｐ｝を用意する。この集合の要素ｐを１からＰまで順番に取り出し、その都度、以下の処理動作を実行する。
【００３５】
まず、認識番号が２p＊n＋２(p-1)（ただし、ｎ＝０，１，２…）で与えられる動作ユニットＡＵだけを動作させる。このとき、動作した動作ユニットＡＵは、自身がメモリＳに書き込んだ３次元ベクトルＶijと、自身の認識番号から整数２p を引いた認識番号の動作ユニットＡＵが書き込んだ３次元ベクトルＶijとを読み込み、これらのデータ間の和演算を実行する。このとき、この和演算で用いられる２つの３次元ベクトル（特許請求の範囲における「ベクトル行列積」又は「ベクトル行列積和」に対応する。）は、他の動作ユニットＡＵとの間で排他的に選択された動作になる。なお、動作ユニットは、和演算によって得られた結果をメモリＳ上に確保された特定の格納領域に書き込む。例えば加算演算の対象である２つの認識番号の大きい方の認識番号に対応する格納領域に書き込まれる。この格納領域は、要素ｐが１つ繰り上がった場合に読み出し領域として再び使用される。
【００３６】
この処理動作を繰り返しにより、認識番号が２P-1 の動作ユニットＡＵの処理結果としてＬ（＝Ｎ）個の３次元ベクトルＶijの総和（＝ΣＶij）が算出される。そして、この総和である双極子相互作用力Ｆi がメモリＳに書き込まれる。
【００３７】
なお、以上の動作を全ての添字ｉについて実行すると、全ての磁化に作用する双極子相互作用力Ｆi を算出することができる。
【００３８】
（ｃ−２）変形動作
ところで、前述の基本動作ではＮ＝Ｌの場合について説明したが、必ずしもそのような条件を満たすとは限らない。そのような場合は、以下の動作を実行する。ＮとＬが等しくならない場合には、まず、Ｎを超えない最大のべき乗数Ｌを求める。そして、この整数Ｌで与えられる範囲を（ｃ−１）項の基本動作を適用する部分集合に設定する。
【００３９】
次に、整数Ｑ（＝Ｎ−Ｌ）を超えない最大の２ベキ乗数ＬＬで与えられる個数の３次元ベクトルの部分集合について、（ｃ−１）項のＬをＬＬに入れ替えた動作を適用する。この場合は、整数Ｌまでの範囲に属する３次元ベクトルの集合に対して求められた部分総和と、整数Ｌを越えて整数ＬＬまでの範囲に属する３次元ベクトルの集合に対して求められた部分総和との和演算を実行することにより、３次元ベクトルの総和（＝ΣＶij）を算出することができる。
【００４０】
更に、ＮとＬ＋ＬＬとが等しくならない場合には、同様に部分集合を設定し、その範囲について（ｃ−１）項の処理を適用する。例えば、整数の部分集合Ｒ＝｛Ｎ−Ｌ−ＬＬ＋１，Ｎ−Ｌ−ＬＬ＋２，…，Ｎ｝に認識番号が属する動作ユニットＡＵによって、当該整数範囲に対応する３次元ベクトルの和演算が実行される。以上の処理イメージを図４に示す。図４は、２のべき乗で与えられる３つの範囲についてそれぞれ（ｃ−１）項の基本動作が実行され、その演算結果が更に加算される様子を表している。
【００４１】
（ｄ）双極子相互作用力の転送
次に、算出された双極子相互作用力の転送２４００が実行される。この動作では、３次元ベクトルのＮ個の集合データである双極子相互作用力Ｆi が外部計算機１６０に転送される。
【００４２】
（次の磁化状態の決定）
ここまでの作業により、外部計算機１６０上には磁化に働く全ての双極子相互作用力Ｆiが求まる。次の磁化状態の決定１２００の中で、これらの双極子相互作用力Ｆi をＬＬＧ方程式の定める方法に適用し、時間刻み幅だけ進んだときの磁化状態を求める。
【００４３】
（終了判断）
その後、計算が所定の回数まで実行したかの判断（すなわち、終了判断１３００）が実行され、所定回数に満たない場合には磁化の時間発展の繰返し起点１０１０に戻る。
【００４４】
（終了処理）
そして、計算が所定回数に達した場合には、終了処理１４００（２５００）を行い、終了する。
【００４５】
（１−５）まとめ
以上説明したように、この形態例によれば、プロセッサの数ではなく、プロセッサ上で動作する作業単位（動作ユニットＡＵ）による並列分割を行っているので、ハードウエア的な並列数に制約されることなく、解析する磁化ベクトルの数を変化させることができる。従って、膨大な数の磁化ベクトルの解析においても、非常に容易に対応することが可能である。
【００４６】
また、この形態例の場合には、計算負荷の最も重い双極子双極子相互作用部分を実行し、それ以外の計算を外部計算機に委ねることができるので、解析方程式や手法の拡張へ柔軟に対応することが可能である。
【００４７】
また、この形態例によれば、磁性体の磁化の動的過程（スピン反転）や磁化分布や磁化曲線の解析において、磁性体形状由来の反磁場効果などを近似的に取り入れることなく、高速かつ高精度に解析することができる。従って、ナノサイズ磁性体上のスピン反転特性、複雑な界面形状を有する磁性体での磁化反転特性、３次元的な多層構造磁性体の磁気特性だけでなく、２次元磁性体膜などの特性解析に有効である。
【００４８】
（２）他の形態例
（２−１）前述の形態例においては、ベクトル和の演算２３００において、認識番号が２p＊n＋２(p-1) で与えられる動作ユニットＡＵと、この数値よりも２p を引いた認識番号で与えられる動作ユニットＡＵで算出された３次元ベクトル同士を加算し、その加算結果を２p＊n＋２(p-1) で与えられる認識番号を有する動作ユニットＡＵのメモリ領域に書き込む場合について説明した。しかし、２p＊n＋２(p-1) よりも２p を引いた認識番号を有する動作ユニットＡＵのメモリ領域に書き込んでも良い。
また、全ての３次元ベクトルが重複することなく全て加算した結果が得られれば、加算演算の対象とする２つの３次元ベクトル対の与え方は任意である。
【００４９】
（２−２）前述した形態例の場合には、各動作ユニットＡＵが使用するメモリＳ上の記憶領域をアクセス不可領域として他の動作ユニットＡＵに通知する場合について説明した。しかし、各動作ユニットＡＵが使用するメモリＧ上の記憶領域をアクセス不可領域として通知しても良い。例えばベクトル行列積の演算２２００を実行する場合、各動作ユニットＡＵは、全く任意の磁化についてベクトル行列積を演算する。この場合において、演算対象である２つの磁化ベクトルを指定する整数値（ｉ，ｊ）のいずれか一方が、他の動作ユニットＡＵとの間で競合することも考えられる。すなわち、複数の動作ユニットが同じ磁化ベクトルＭｊの読み出しを行う可能性がある。しかし、実行中の動作ユニットＡＵがこれらのアドレスをアクセス不可アドレスとして通知し合っていれば、各動作ユニットＡＵはメモリＧにアクセスを開始する前に、当該アドレスに対する読み出しを停止することができる。
【００５０】
（２−３）前述した形態例の場合には、高速演算装置１００が、双極子相互作用力の演算のみを分担する場合について説明した。しかしながら、演算装置２００において、その他の演算処理を実行しても良い。
【００５１】
（２−４）前述した形態例の場合には、演算システムが全体として磁気エネルギーを計算する場合について説明した。しかし、形態例で説明した技術は、その他の汎用演算にも応用することができる。なお、高速演算装置１００の構成は形態例１と同じものを想定する。このとき、演算装置２００を特定することなく発生される動作ユニットの少なくとも一部に、処理対象として記憶装置から読み出す数値データのアドレス範囲と、演算結果を書き込むアドレス範囲と、読み出された数値データに対する演算動作を指定する処理内容と、数値データの読み出し又は書き込み先を与えるアドレス範囲を、アクセス不可領域として他の演算装置に通知させる処理と、読み出し又は書き込みの終了を他の演算装置に通知して第２のリストから削除させる処理とが記述されていれば良い。
【符号の説明】
【００５２】
１００…高速演算装置
１２０…バス
１３０…記憶装置（メモリＧ）
１４０…記憶装置（メモリＳ)
１５０…コネクタ
１６０…外部計算機
１６２…バス
１６４…中央演算装置
１６６…メモリ
２００…演算装置
２１０…演算器
２２０…キャッシュメモリ（レジスタ）
２３０…リストメモリ
２４０…allowリスト
２５０…denyリスト
２６０…内部バス
【図１】
2010218398.tif 000003
【図２】
2010218398.tif 000004
【図３】
2010218398.tif 000005
【図４】
2010218398.tif 000006