(57)【要約】【課題】現在実現されている計算機を使用して、いわゆる地球計算、例えば炉心計算を今以上に精度良く、高速かつ低コストで行なう。【解決手段】各メッシュ内における各パラメータの変化を繰返し計算する描画装置を用いた計算方法であって、ＣＰＵ上で、入力行列を作成する入力行列作成ステップと、ＣＰＵ上で、シェーダプログラムを作成するシェーダプログラム作成ステップと、前記入力行列がＶＲＡＭにテクスチャとして入力され、前記シェーダプログラムがＧＰＵでテクスチャの演算を行う様にＶＲＡＭに入力行列とシェーダプログラムを送信して演算命令を行い、さらに演算結果をＣＰＵに返信して来る様に制御するオブジェクト指向プログラムをＣＰＵ上で作成するオブジェクト指向プログラム作成ステップとを有していることを特徴とする描画装置を用いた計算方法である。【選択図】図１
2008076116.tif 000002
【特許請求の範囲】
【請求項１】
各メッシュ内における各パラメータの変化を繰返し計算する描画装置を用いた計算方法であって、
ＣＰＵ上で、入力行列を作成する入力行列作成ステップと、
ＣＰＵ上で、シェーダプログラムを作成するシェーダプログラム作成ステップと、
前記入力行列がＶＲＡＭにテクスチャとして入力され、前記シェーダプログラムがＧＰＵでテクスチャの演算を行う様にＶＲＡＭに入力行列とシェーダプログラムを送信して演算命令を行い、さらに演算結果をＣＰＵに返信して来る様に制御するオブジェクト指向プログラムをＣＰＵ上で作成するオブジェクト指向プログラム作成ステップとを有していることを特徴とする描画装置を用いた計算方法。
【請求項２】
前記ＧＰＵは、ベクトル演算器であり、
前記シェーダプログラムは、前記テクスチャとして入力されている入力行列を対象にしてパイプライン処理によりストリーム演算を行なう形式で数値計算を行う様に前記ＧＰＵを制御することを特徴とする請求項１に記載の描画装置を用いた計算方法。
【請求項３】
前記入力行列作成ステップにおける入力行列の作成と、前記シェーダプログラム作成ステップにおけるシェーダプログラムの作成は、作成するプログラム相互の実装が共に独立したプログラムにより制御されており、
前記シェーダプログラムがＧＰＵ内でテクスチャ内の入力行列にシェーダによる演算を行うに際して、前記シェーダプログラムが演算を担当する入力行列を指定することとなる指定シェーダプログラムを作成する指定シェーダプログラムステップを有し、
前記オブジェクト指向プログラムは、前記指定シェーダプログラムの命令をも前記ＧＰＵに送信するものであることを特徴とする請求項１または請求項２に記載の描画装置を用いた計算方法。
【請求項４】
前記描画装置を用いた計算方法は、原子炉の炉心を解析する原子炉炉心計算方法であり、
前記入力行列作成ステップは、原子炉炉心計算の対象となっている各種のパラメータの変化の計算の内、特定のパラメータの変化の計算について入力行列を作成するものであることを特徴とする請求項１ないし請求項３のいずれかに記載の描画装置を用いた計算方法。
【請求項５】
前記特定のパラメータの変化の計算とは、中性子流応答計算または中性子束減衰計算のいずれか一方または両方を含む計算であることを特徴とする請求項４に記載の描画装置を用いた計算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は描画装置を用いた計算方法に関し、特に原子炉炉心計算の様に、同じ処理を多数、並列的に、かつ繰返して行なうことがなされる場合に、それらを描画装置により画像処理技術的に行うことにより、全体の計算を高速化する描画装置を用いた計算方法に関する。
【背景技術】
【０００２】
以下、本発明の計算方法を、主に原子炉炉心計算を例に挙げて説明する。
軽水炉の運転は、化石燃料を使用するボイラや内燃機関と比較したとき、以下の様な特徴がある。
一旦運転が開始されれば、当該運転サイクル（約１年）中は運転を停止することは困難である。
運転中に炉内の燃料を取出したり、交換したりすることは不可能である（ボイラ等であれば、運転中は化石燃料と空気が絶えず外部から供給されている）。
運転に伴い、炉内に装荷された各燃料（ウラン２３５等）やバーナブルポイズン（中性子を吸収する物質）が減少していくため、炉内の反応度、各燃料棒の反応度とも低下する。
【０００３】
運転に伴い、核分裂により生じた各種の物質が炉内に蓄積されていき、蓄積の如何が炉内の反応度と各燃料棒の反応度に大きな影響を与える。
例えば、運転に伴い、新たな核燃料となるプルトニウム２３９が蓄積されてくるだけでなく、炉内の反応度と燃料棒の反応度に影響を与える。
また、炉内の位置により中性子密度が相違する（中心部ほど密度が高くなる）ため、反応度が、ひいては各燃料棒の燃焼（厳密には「核分裂」であり、化石燃料の「燃焼」とは相違するが、慣行として「燃焼」を使用する）度や発熱量が炉内の位置によって相違する。
【０００４】
運転の開始時、終了時、夏季の電力の負荷変動に対応するための部分負荷運転時等における炉内温度の低下等の各種の要因も、炉内の反応度と燃料棒の反応度に影響を与える。
燃料棒については、累積燃焼度と単位時間当たりの燃焼度の両方に制限がある。
中性子の拡散、減速を通じて、近隣にある燃料棒相互が燃焼に影響を及ぼしあう。
安全性に対する要求が、ことのほか厳しい。
【０００５】
これらの特徴のため、原子炉への燃料の装荷については、水平断面が正方形であり、さらに燃料棒が例えば１７×１７の正方行列状に配列された燃料集合体を単位として、炉内への搬入そして所定の位置への配置（装荷）、炉外への搬出がなされるだけでなく、以下の様なことを行い、それらによりサイクル運転を通じて、場所的にも、時間的にも炉内の中性子分布が平坦であり、各燃料集合体や各燃料棒の燃焼度も一様である様になされている。
【０００６】
炉内へ装荷される燃料を、燃料集合体を単位として３、４のバッチ（グループ）に分け、各バッチについて、炉内への搬入そして装荷、炉外への搬出等の管理を行なう。
１サイクルの運転終了毎に、古い（燃焼の進んだ）燃料集合体は炉内から取去り、新しい燃料集合体を搬入する。
【０００７】
新しい燃料集合体は反応度が高いため、原則として中性子密度が低い炉心の外周側に配置する。
同じく、新しい燃料集合体は原則として４の倍数を単位として装荷し（古い燃料集合体の取去りは、必ずしも４の倍数を単位とはしない）、原子炉の中心を原点とするＸ軸とＹ軸で定まる各象限（第１から第４象限）に配置して、いわゆる１／４対称性を崩さない様にする。
【０００８】
同じく、燃料集合体の１７×１７の正方行列状に配列されている燃料棒の一部に、燃料棒に換えてバーナブルポイズン等を配置する。
古い燃料集合体は、反応度が低いため、原則として中性子密度が高い炉心の中心寄りに配置する。
次の運転サイクルでも継続して燃やす燃料集合体は、炉心内の中性子分布を平坦とし、併せてその燃焼度を適切にするために、適切な位置に配置変え（シャッフリング）する。
【０００９】
従って、原子炉の安全な運転を確保するためにはもちろんのこと、経済的な運転を達成するためには、予め数サイクル先までの原子炉の炉心計算（以下、「炉心計算」と記す）を行って、各サイクルの運転開始時における新しい燃料集合体の装荷や継続して燃やす燃料集合体の配置等を求めておくことが必要不可欠となる。
もし、そうしなければ、例えば、会計処理上廃却可能な燃焼度には到達していないが、次のサイクルに継続して使用すれば、サイクルの途中で許容最高燃焼度を超えてしまうため、次のサイクルに継続して使用することができない中途半端な燃焼度の燃料集合体、燃料集合体の各燃料棒の燃焼度の平均値は許容燃焼度に対してかなり余裕があるが、ごく一部の燃料棒は許容燃焼度に対して余裕がなく、このため実際には使用することが出来ない不経済な燃料集合体等が多数発生することとなりかねない。
【００１０】
原子炉の炉心計算であるが、これは例えば以下の様な方法で行われている。
水平に設置され、ほぼ円筒形の炉心およびその近傍を、真空領域、水反射体流域、燃料領域のいずれかの領域に分類する。
各領域を水平な面で上下方向に分割し、さらに各水平面を燃料集合体の境界線に平行な縦方向と横方向の線で分割することにより、３次元のメッシュを作成する。
特に、燃料領域については、各メッシュに対応する位置の燃料集合体についての詳細なデータを、具体的にはウラン２３５の濃度、各エネルギー群の中性子密度、温度等の燃料の燃焼に関係する各種の変数（パラメータ）の初期値等を、入力（インプット）する。
【００１１】
次いで、運転サイクルを幾つかの短い時間間隔（単位時間）に分割し、各単位時間における各メッシュ内でのパラメータがどの様に変化していくかを計算する。
具体的には、最初の単位時間では、（リスタートファイル等から）インプットされたデータを基に、各メッシュ内でのパラメータの変化、例えばウラン２３５の核分裂による熱と中性子の発生、各エネルギー群の中性子の流入、流出、減速等が計算される。次いで、上下、縦横等にある隣接するメッシュと、必要な計算結果を相互に遣り取りして、初期値の書換え等を行う。
【００１２】
次の単位時間では、最初の単位時間の計算結果に基づいて必要な書換えがなされたデータを基に、最初の単位時間と同じ内容の計算が行われ、さらに隣接するメッシュと必要な計算結果を相互に遣り取りし、最初の単位時間での計算終了後書換えたデータの再度の書換えを行う。
以降の単位時間についても、１サイクルの期間が終了するまで、同様の処理を繰返し行なう。
１サイクルの期間についての計算が終了すると、各燃料集合体、各燃料棒の燃焼度等の評価を行う。
【００１３】
例えばシャッフリング計算においては、経験に基づいて各燃料集合体の炉内での配置替えを決める場合には、好ましいと思われる各燃料集合体の炉内での配置を幾ケースか作成し、実際に各ケースについて炉心計算を行い、計算結果を比較評価して最終決定を行うこととなる。
但し、シャッフリング計算等、試行錯誤が伴う内容の炉心計算においては、近似を多く用いた計算コードを使用して大まかに最適値や最適な条件を求め、最終確認として精密な計算がなされることが多い（非特許文献１）。
【非特許文献１】Ｍａｓａｈｉｒｏ  Ｔａｔｓｕｍｉ  ａｎｄ  Ａｋｉｏ  Ｙａｍａｍｏｔｏ  “Ｏｂｊｅｃｔ−Ｏｒｉｅｎｔｅｄ  Ｔｈｒｅｅ−Ｄｉｍｅｎｓｉｏｎａｌ  Ｆｉｎｅ−Ｍｅｓｆ  Ｔｒａｎｓｐｏｒｔ  Ｃａｌｃｕｌａｔｉｏｎ  ｏｎ  Ｐａｒａｌｌｅｌ／Ｄｉｓｔｒｉｂｕｔｅｄ  Ｅｎｖｉｒｏｎｍｅｎｔｓ  ｆｏｒ  Ａｄｖａｎｃｅｄ  Ｒｅａｃｔｏｒ  Ｃｏｒｅ  ａｎａｌｙｓｅｓ”  Ｎｕｃｌｅａｒ  Ｓｃｉｅｎｃｅ  ａｎｄ  Ｅｎｇｉｎｅｅｒｉｎｇ，１４１，１９０−２１７（２００２）
【発明の開示】
【発明が解決しようとする課題】
【００１４】
しかしながら、近年のユーザからの厳しいコストダウンへの要請は、原子力発電においても例外ではない。また、原子力の安全性に対する要求も、ますます厳しくなってきている。
これらのため、従来以上の精度で各種の原子炉の炉心計算を行うことが必要となってきている。具体的には、輸送計算モデル化、非均質化、メッシュ詳細化等である。
さらに、近年の使用済み核燃料の再処理に伴い、再処理をも考慮した中性子経済、ＭＯＸ燃料（プルトニウム２３９を含む混合酸化物燃料）を燃やす場合の安全性の検討や最適な燃料集合体の炉心配置の決定等、計算すべき対象、課題も増加しつつある。
その上、計算コストの削減に対する要求も厳しくなっている。
【００１５】
これらの炉心計算に使用するＣＰＵ（メインメモリに記憶されたプログラムを実行する汎用的なチッププロセッサ）であるが、１９６５年にムーアが提唱したその名で示される法則で予想された様に、半導体の集積密度は１８から２４ヶ月毎に倍増し続けており、また並列計算等の新たな技術も開発されており、これらに伴い計算能力も大きく向上している。しかし、この様な計算能力の向上をもってしても、近年の原子炉炉心計算に要求される処理を、高速、低コストで行なうためには、まだまだ不十分である。
【００１６】
即ち、現在なされている炉心計算でも、メッシュ数は数百万に達し、パラメータの１つである中性子エネルギーも１０群程度ある。従って、例えばメッシュ分割やパラメータの個数や単位時間を今以上に詳細化して計算を行うこと、あるいはそれらのパラメータは現状通りであっても今以上に長期にわたるサイクルでの炉心の解析を精密に行うこと等は、時間とコストが掛り過ぎ、実行は現実には困難である。
【００１７】
このため、現在実現されている計算機（ハード）を使用して、低コストしかも高速で、従来と同等レベル以上に精度良い炉心計算を行うこと、あるいは今以上に長期にわたる炉心解析を行なうことが可能となる技術の開発が求められていた。
【００１８】
さらに、同様の課題は、将来にわたっての長期の気象を予測するための計算等のいわゆる地球計算、具体的には、計算対象を細かくメッシュ分割し、各メッシュで並列、独立的に同じ様な計算を行い、さらに各メッシュは計算結果を隣接するメッシュ等と交換し合って次の計算のために境界条件的あるいは初期値的なデータを作成し、そのデータを使用して再度同じ計算を行う様な処理を何度も繰返す計算、にも生じていた。
【課題を解決するための手段】
【００１９】
本発明は、以上の課題を解決することを目的としてなされたものであり、画像描画装置（３Ｄグラフィックスの表示に必要な計算処理を行う、単機能的な半導体チップやその様なチップを組み込んだ装置。以下、原則として「ＧＰＵ」と記す）を、ある種の炉心計算あるいは炉心計算の一部に使用するものである。即ち、３次元グラフィックスの発展に伴いＧＰＵの半導体集積密度は６ヶ月で倍増し続け、現在はＣＰＵを遥に凌ぐ性能を有しており、その内部構成は公開されていないが、単精度浮動小数点演算への対応やシェーダと呼ばれるグラフィックス演算の制御が可能となると共に、これらの制御プログラム言語環境が整理され始めている。
【００２０】
この下で、
イ．描画プログラムは画面内の各画素に一定の規則に法って、あるいは一定のプログラム命令に従って陰影付け、明度や色彩を施す処理等の画像を表示するための処理が繰返しなされるものであり、原子炉炉心計算における各メッシュ内におけるある種のパラメータ（物理量）についてなされる計算、処理の内容と、即ちソフト面が似ていること、あるいは共通性が多いことと、
ロ．各表示画面における各画素への処理は並列、独立的であり、原子炉炉心解析における各メッシュ内での処理と似ていること、
ハ．計算は、主に四則演算と指数計算であり、これまた共通性があること、
ニ．ＧＰＵはＣＰＵがメインメモリを有している様にＶＲＡＭ（ディスプレイに表示されるデータを記憶するメモリ。描画用速読出記憶装置。Ｖｉｄｅｏ  Ｒａｎｄｕｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を有していること、即ちハード面も似ていること、
に着目し、従来ＣＰＵで行なっていた計算、あるいはその特定の一部を、ＧＰＵで行なう様にしたものである。以下、各請求項の発明を説明する。
【００２１】
請求項１に記載の発明は、
各メッシュ内における各パラメータの変化を繰返し計算する描画装置を用いた計算方法であって、
ＣＰＵ上で、入力行列を作成する入力行列作成ステップと、
ＣＰＵ上で、シェーダプログラムを作成するシェーダプログラム作成ステップと、
前記入力行列がＶＲＡＭにテクスチャとして入力され、前記シェーダプログラムがＧＰＵでテクスチャの演算を行う様にＶＲＡＭに入力行列とシェーダプログラムを送信して演算命令を行い、さらに演算結果をＣＰＵに返信して来る様に制御するオブジェクト指向プログラムをＣＰＵ上で作成するオブジェクト指向プログラム作成ステップとを有していることを特徴とする描画装置を用いた計算方法である。
【００２２】
本請求項の発明においては、ＣＰＵで作成された入力行列とシェーダプログラム（ＧＰＵを制御するプログラム）がＣＰＵに比較して処理速度が遥に早いＧＰＵに送信され、ＧＰＵ内でシェーダプログラムの作用、制御の下でシェーダがテクスチャ内の入力行列に対して演算を含む処理を行い、さらに演算結果をフレームバッファメモリに一次記憶した後、さらにその演算結果あるいはそのうちの必要なもののみを、ＣＰＵに返送してくる。ＣＰＵは、返送されて来た演算結果を基に次の演算を行なう。そして、以上の処理が繰返される。この際、ＣＰＵにとって計算負荷が高く、かつ並列計算となる内容、種類の計算がＧＰＵでなされる様に入力行列が作成されている。このため、現在実現されている計算機（ハード）を使用して、低コストしかも高速で、従来と同等レベル以上に精度良い炉心計算を行うこと、あるいは今以上に長期にわたる炉心解析を行なうことが可能となる。
【００２３】
ここに、「入力行列」とは、ＶＲＡＭに入力される行列状のデータであり、所定のエネルギー範囲内の中性子束、所定の方向への中性子流等の評価対象であるパラメータについてのデータからなる行列、それらのパラメータに作用する核反応断面積等のデータからなる行列等であり、掛け算、割り算、足し算、引き算がなされることとなる。
また、２次元化してベクトル演算が可能な様にすることが出来る限り、メッシュに依存しない定数、一次元に配列されたデータをも含む。
【００２４】
「ＣＰＵ上で、入力行列を作成する」とは、ＧＰＵがベクトル演算器であり、ストリーム演算のみ扱えるため、入出力データは行列の形（後で説明するテクスチャと言われる格子状に展開されたデータ）となっていることが必要であるからであり、従来はＣＰＵでなされていた計算がＧＰＵにてなされる様にする限り、純粋にＣＰＵ上のプログラムで作成されても良いし、オブジェクト指向プログラムでＣＰＵに作成指示がなされる様にされていても良い。シェーダプログラムの作成についても、同様である。
なお、各メッシュのデータは、例えば４個のメッシュのあるパラメータを２×２に配列する等の方法により、行列状のデータとなされる。
また、「ベクトル演算」とは、配列データ（ベクトル）に対して、同一演算を繰返し実行する命令（ベクトル命令）について、Ｄｏループを処理する演算をさす。
【００２５】
また、「テクスチャ」とは、コンピュータ上の２次元画像のことであり、１画素あたり、位置情報（ｘ、ｙ、ｚ、ｗ。即ち、３次元射影による同時座標情報）及び色情報（ｒ、ｇ、ｂ、ａ：赤、緑、青、不透明度）が数値データとして保存されている。
入力行列の作成は、例えば各メッシュのあるエネルギー群の中性子束の密度を、２×２の行列状に配列したりする様な処理によりなされる。
【００２６】
請求項２に記載の発明は、前記の描画装置を用いた計算方法であって、
前記ＧＰＵは、ベクトル演算器であり、
前記シェーダプログラムは、前記テクスチャとして入力されている入力行列を対象にしてパイプライン処理によりストリーム演算を行なう形式で数値計算を行う様に前記ＧＰＵを制御することを特徴とする描画装置を用いた計算方法である。
【００２７】
本請求項の発明においては、ＧＰＵにおいて、テクスチャとして入力されている画像データの２次元に並んだ各画素の４つの数値情報についてのストリーム演算がパイプライン処理でされて行く様に、各メッシュ内の所定の炉心計算が、テクスチャ内に記憶されている入力行列形式のデータを使用して高速で行なわれる。
【００２８】
ここに、「ベクトル演算器」とは、同時に複数の処理が可能な演算器であり、４演算を同時に処理することが可能である。また、ＧＰＵは、複数の段階の処理が直列で同時に複数段の処理が可能な構造（パイプライン構造）を持つストリーム演算器（ある段階での値が次の段階の値に依存する様な演算器）である。そして、シェーダプログラム言語は、この様な環境に適したストリーム言語であり、行列の形の位置情報および色情報を動的に変化させる数値計算を、極めて高速に行なうことが可能となる。
【００２９】
請求項３に記載の発明は、前記の描画装置を用いた計算方法であって、
前記入力行列作成ステップにおける入力行列の作成と、前記シェーダプログラム作成ステップにおけるシェーダプログラムの作成は、作成するプログラム相互の実装が共に独立したプログラムにより制御されており、
前記シェーダプログラムがＧＰＵ内でテクスチャ内の入力行列にシェーダによる演算を行うに際して、前記シェーダプログラムが演算を担当する入力行列を指定することとなる指定シェーダプログラムを作成する指定シェーダプログラムステップを有し、
前記オブジェクト指向プログラムは、前記指定シェーダプログラムの命令をも前記ＧＰＵに送信するものであることを特徴とする描画装置を用いた計算方法である。
【００３０】
本請求項の発明においては、入力行列の作成と、シェーダプログラムの作成は、相互の実装は共に依存性がなく、さらに少なくとも一方は複数個作成され、１つのシェーダプログラムが複数の入力行列を演算に使用したり、１の入力行列が複数のシェーダプログラムに使用されたりする。丁度、描画において、複数の光源の３原色毎の強度（輝度）に関するデータが、各画素の陰影の付加や明度と彩度の計算に使用される様なものである。
このため、１つのシェーダプログラムに対して複数の入力行列セットを連続的に変化させる、あるいは逆に１つの入力行列セットに対して複数のシェーダプログラムを連続的に変化させる様にすることも可能となり、計算の汎用性が増す。
なお、指定プログラムは、オブジェクト指向プログラムの一部であっても良い。
【００３１】
また、実装（プログラムしアプリケーションに適用すること）に依存性が無い様にするために、プログラミングによりそれぞれ独立にＶＲＡＭへ実装する関数を作成し、それぞれの行列セット、シェーダプログラムにＩＤをつけておき、演算実行時に目的の行列セット、シェーダプログラムのＩＤにリンクする様にしている。
【００３２】
請求項４に記載の発明は、前記の描画装置を用いた計算方法であって、
前記描画装置を用いた計算方法は、原子炉の炉心を解析する原子炉炉心計算方法であり、
前記入力行列作成ステップは、原子炉炉心計算の対象となっている各種のパラメータの変化の計算の内、特定のパラメータの変化の計算について入力行列を作成するものであることを特徴とする描画装置を用いた計算方法である。
【００３３】
本請求項の発明においては、前記描画装置を用いた計算方法は、原子炉の炉心を解析する原子炉炉心計算方法であり、さらに原子炉炉心計算の対象となっている全ての計算をＧＰＵで行なうのではなく、ＣＰＵにとって計算負荷が高く、しかもＧＰＵで処理し易い特定の計算のみがＧＰＵでなされる（処理される）ため、計算効率が上がり、プログラムの作成も楽になる。
なお、特定の計算は、実装対象プログラムの実行時の計算時間（計算負荷）の配分を調査し、その負荷が大きいプログラムの部分を読み、ＧＰＵへの実装が可能な箇所に実装することがなされる。
【００３４】
請求項５に記載の発明は、前記の描画装置を用いた計算方法であって、
前記特定のパラメータの変化の計算とは、中性子流応答計算または中性子束減衰計算のいずれか一方または両方を含む計算であることを特徴とする描画装置を用いた計算方法である。
【００３５】
本請求項の発明においては、多くの四則演算、指数計算を含むためＣＰＵにとって計算負荷が高く、しかもそれぞれのメッシュ位置について並列処理を行なうことが可能であるためＧＰＵで処理し易い中性子流応答計算または中性子束減衰計算のいずれか一方または両方を含む計算が、ＧＰＵでなされる。このため、ベクトル演算が有効であり、ストリーム計算が可能であるというＧＰＵ計算の効果が、ひいては請求項１から請求項４の発明の効果が最も発揮される。
【発明の効果】
【００３６】
本発明においては、ＣＰＵで作成された入力行列とシェーダプログラムが、ＣＰＵに比較して処理速度が遥に速いＧＰＵに送信され、ＧＰＵ内でシェーダプログラムの作用、制御の下でシェーダがテクスチャ内の入力行列に対して処理を行い、さらに演算結果をＣＰＵに返送し、返信されて来た演算結果を基にＣＰＵは次の演算を行なうことが繰返される。このため、現在実現されている計算機（ハード）を使用して、低コストしかも高速で、従来と同等レベル以上に精度良い炉心計算を行うこと、あるいは今以上に長期にわたる炉心解析を行なうことが可能となる。
【発明を実施するための最良の形態】
【００３７】
以下、本発明をその最良の実施の形態に基づいて説明する。なお、本発明は、以下の実施の形態に限定されるものではない。本発明と同一および均等の範囲内において、以下の実施の形態に対して種々の変更を加えることが可能である。
【００３８】
（計算プロセス）
本実施の形態における計算プロセスでは、実装箇所について、以下の４段階に分けられる処理がなされる。
イ．ＣＰＵにより入力行列と演算命令を作成する。ここに、入力行列とは、例えば計算対象の炉心内の各メッシュ内の１のパラメータ、例えばあるエネルギー群の中性子束や中性子吸収に関する巨視的核断面積等を２×２の行列状に記述したデータである。
ロ．作成した行列と演算命令をテクスチャ（描画装置における計算処理の対象）としてバスを通してＶＲＡＭに送信する。
ハ．ＧＰＵは、プログラムされたシェーダ（基本的には、位置情報の制御および色、陰影をつけるプログラム）で描画プロセスによる計算処理を実行する。
ニ．ＣＰＵ上からの演算命令に基づいて（シェーダプログラムがその様に作成されている）、演算結果や演算結果のうち必要なものをＶＲＡＭから取出し、ＣＰＵに送信する。
【００３９】
（ＣＰＵとＧＰＵの接続関係）
図１に、本実施の形態のＣＰＵとＧＰＵの接続関係を、概念的に示す。図１において、１００はＣＰＵであり、１５０はそのメインメモリであり、１９０はメインメモリ内の行列であり、２００はＧＰＵであり、２５０はそのＶＲＡＭであり、２９０はその内部のテクスチャであり、３００はＣＰＵ１００とＧＰＵ２００間のバスである。
なお、本実施の形態に使用したＣＰＵとＧＰＵは、市販のものであり、特にハード面の工夫はしていない。
【００４０】
ＣＰＵ上ではＬｉｎｕｘやＷｉｎｄｏｗｓ（登録商標）等のＯＳの下、Ｃ＋＋等のプログラム言語により処理対象のパラメータを並べ、Ｍ×Ｍの２次元行列化し、これをＤｉｒｅｃｔＸやＯｐｅｎＧＬ等のグラフィックインターフェイスにてテクスチャとし、ＶＲＡＭに転送する。また、ＧＰＵにて演算後の計算結果により構成されたテクスチャは、グラフィックインターフェイスにてメインメモリに転送され、ＣＰＵ上で取り扱われることとなる。
また、ＧＰＵ上では、「描画せよ！」という命令の下、演算のみ実行される。なお、演算を行う命令言語としては、シェーダ言語ＧＬＳＬ、Ｃｇ等がある。
【００４１】
（数値計算の様子）
図２に、ＧＰＵ２００のシェーダによる数値計算の様子を、概念的に示す。図２において、２９１はＶＲＡＭ内に保持されているテクスチャとしての入力行列であり、２９２はシェーダによる演算がなされている入力行列であり、２９３は演算が終了した入力行列、即ち出力行列である。なお、図２ではＭ×Ｍの行列としているが、これは、例えばＭ／４×１という単位でＭ×Ｍまで計算される。
図３に、２×２の行列の足し算を例に採って、具体的に演算の様子を示す。
【００４２】
（シェーダ）
本実施の形態におけるＧＰＵは、ベクトル長４のベクトル演算器であり、描画時にはＧＰＵ内部がパイプライン構造になっていることによりストリーム演算を行なうことができる。このストリーム演算を、シェーダプログラムにより制御することで、数値計算を行うことが可能になる。
但し、本来配列のデータに同じ処理を施すベクトル演算器によるストリーム計算という制限があるため、入出力されるデータには、データが複数並んで配列されている行列状のデータという制限が果たされることとなる。
【００４３】
（適用する原子炉炉心計算）
ベクトル演算が有効であり、ストリーム計算が可能であるため、ＧＰＵで計算を行うことが効果的となる原子炉炉心計算としては、中性子流応答計算と中性子束減衰計算を、挙げることができる。これら２つの計算は、いずれも原子炉炉心計算の負荷の大部分を占めており、ＧＰＵで処理することにより、低コスト、高速計算が可能となる。以下、その内容を説明する。
【００４４】
（中性子流応答計算）
本計算は、以下の式で表現される。
Ｊ＋＝μＪ−＋ηφ＋Ｃ…(１)
ここに、Ｊ＋は放出部分中性子流であり、Ｊ−は流入部分中性子流であり、φは中性子束であり、μとηとＣは係数であり、多くの四則計算、指数計算を含む評価関数により求められる。
例えば、中性子の発生に関係する係数ηは、計算中の単位時間におけるメッシュ幅、メッシュ内の材料による中性子吸収率や散乱率、各エネルギー群の中性子の個数等に関係する等、各評価関数は考慮する事項が多く、計算も面倒であり、計算を行うメッシュ数が約３００万と膨大であることから、炉心計算において大きな負荷となっている。
【００４５】
ＧＰＵ内における演算であるが、（１）式の全体はベクトルの四則を求める計算となる。即ち、
ベクトルＪ＋＝ベクトルμＪ−＋ベクトルηφ＋ベクトルＣ
となる。
また、Ｊ＋とＪ−は、直方体状の各メッシュの６個の面毎のデータとなる。
また、各ベクトル、例えばベクトルμＪ−は、同一のメッシュ一、エネルギー群におけるμとＪ−との積算となる。
【００４６】
（中性子束減衰計算）
本計算は、以下の式で表現される。
φ＋＝φ−ｅｘｐ（−Σｔｓｍ）＋（Ｑ／Σｔ）｛１−ｅｘｐ（−Σｔｓｍ）｝…(２)
ここに、φ＋は放出角中性子束であり、φ−は流入角中性子束であり、Σｔは巨視的全断面積であり、ｓｍは中性子飛行方向に沿った中性子トラックであり、Ｑは角中性子源である。
この計算は、中性子束の流れに基づき減衰を求める計算であり、右辺の式の前の計算がメッシュ内に入射してきた角中性子の中性子吸収による減衰を表し、後の計算がメッシュ内での中性子の新たな発生を表すが、この式の形からも判る様に指数演算であり、メッシュ数が多いこともあり、炉心計算全体としては膨大な量の計数となり、計算負荷も大きくなる。
【００４７】
ＧＰＵにおける計算であるが、（２）式全体は（１）式と同じくベクトルの四則であり、また右辺の２つの項は掛け算と除算となる。さらに、指数計算は、計算に使用するΣｔとｓｍが、メッシュ毎に配列されている。
実際の指数計算は、例えばｅｘｐ（−Σｔｓｍ）であれば、実際に（−Σｔｓｍ）が例えば１．２等の具体的な数値として与えられた後、ｅｘｐ（１．２）が計算されることとなる。
【００４８】
以上の下で、例えば各メッシュ内のあるエネルギー群の中性子束密度であれば、初期値に流入中性子束と発生した中性子束がプラスされ、流出中性子束と吸収された中性子束がマイナスされる。また、吸収される中性子束は、中性子の吸収に関するメッシュ内物質の全断面積と中性子束との積算により求められる。
【００４９】
（オブジェクト指向プログラミング）
前記（計算プロセス）で説明したロ、ハ、ニの処理を、例えば（Ｃ＋＋）にて記述されたオブジェクト指向プログラミングを用いてＧＰＵ入力として固定し（ＧＰＵ計算環境への行列の入出力及びシェーダプログラムの入力を一括して行う「クラス」が既に準備されている）、１つの入力行列の作成及びシェーダプログラムを作成し、ＣＰＵ上のアプリケーション内の実装目的箇所に、前記クラスを実装することで、ＧＰＵ内で計算が行われ、結果の出力までが自動的に行なわれる。
【００５０】
なお、オブジェクト指向プログラムの一例の概要は、後で簡単に示す。
【００５１】
このクラスは、オブジェクト指向で開発されたアプリケーションにおいて、ＧＰＵ計算を行うことが可能なクラスに置き換えることにより容易に実装でき、高速演算フィルターの様なイメージで扱う、即ち高速演算が必要な計算をＣＰＵでなくＧＰＵで行う様にすることが可能となる。
【００５２】
また、このクラスでは、シェーダプログラムの実装と入力行列の実装を独立に行なっているため、シェーダプログラムと入力データには依存性がなく、演算時にのみリンクされる。このため、どちらを先に行なっても良い。また、１つのシェーダプログラムに対して複数の入力行列セットを連続的に変化させる、あるいは逆に１つの入力行列セットに対して複数のシェーダプログラムを連続的に変化させる様にすることも可能である。そして、その様にすることにより、ＣＰＵ上での繰返し計算の内側でＧＰＵ計算をする必要がある際に、行列の再作成、シェーダプログラムの読み込み等の付加的な作業を最小にすることができる。
【００５３】
基本的には、各シェーダプログラムと入力行列の双方に別個の体系で番号を付し、各種の計算時にどの番号のシェーダプログラムがどの番号の入力行列を担当するか、あるいは使用するかの情報を別途与えることによりなされる。
図４と図５に、このためのフローチャートを概念的に示す。図４は、１組の演算対象入力行列セットをＩ個のシェーダプログラムが計算する場合であり、図５は、１個のシェーダプログラムがＪ組の入力行列セットを計算する場合である。なお、図４と図５では、Ｉ個のシェーダプログラムあるいはＪ組の入力行列セットは、先行する処理が終了する毎に逐次読み込まれているが、これは一括して読み込まれる様にされていても良い。Ｊ個のシェーダプログラムが、Ｉ個の入力行列を計算する場合も、特に困難はないので、そのフローチャートは省略する。
【００５４】
このクラスを適用した効果を記載する。前記２つの計算は、四則演算と指数計算の組合せであり、データ数も膨大である。そこで、取扱うデータ数として、行列要素数を横軸、ＣＰＵに対するＧＰＵの速度比（ＧＰＵの速度／ＣＰＵの速度）を縦軸に採り、四則演算と指数計算における性能を評価した。
計算環境は、以下の通りである。
【００５５】
ＣＰＵ              ：Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）４  ３．２ＧＨｚ
メインメモリ        ：２ＧＢ
Ｃａｃｈｅ          ：２ＭＢ
ＧＰＵ              ：ｎＶＩＤＩＡ  ＧｅＦｏｒｃｅ７８００ＧＴＸ
ＶＲＡＭ            ：２５６ＭＢ
Ｂｕｓ              ：ＰＣＩ−Ｅｘｐｒｅｓｓ×１６
ＯＳ                ：ＣｅｎｔＯＳ−４．０
コンパイラ          ：ｇ＋＋（ｇｃｃ−３．４．３）
グラヒィックインターフェイス  ：ＯｐｅｎＧＬ−２．０
シェーダプログラム言語  ：ＧＬＳＬ
【００５６】
ＣＰＵとＧＰＵにおける単精度浮動小数点四則演算について説明する。
例えば、定数ａと行列Ｘ（ｉ）の和算、全要素数１０２４の場合には、ＣＰＵでは以下の様に行なう。
Ｆｏｒ  ｉ＝１ｔｏ１０２４
Ｙ（ｉ）＝ａ＋Ｘ（ｉ）
【００５７】
同様の計算をＧＰＵで行う場合には、４要素（ｒ、ｇ、ｂ、ａ）、一辺が要素１６の正方行列で１０２４要素を計算できるため、以下の様な行列を作成する。
Ｎ＝ＳＱＲＴ（１０２４／４）
Ｆｏｒ  ｉ＝１ｔｏＮ      ／／１辺
Ｆｏｒ  ｊ＝１ｔｏＮ    ／／１辺
Ｆｏｒ  ｋ＝１ｔｏ４  ／／ｒｇｂａ
Ｘ［ｉ＊Ｎ＋ｊ］［ｋ］
シェーダプログラムは、前記の様に作成された２次元配列Ｘは、一辺１６ピクセルの正方形の大きさを持ち、１ピクセル当り４色で構成されているテクスチャＸとして、以下の様に記される。
Ｃｏｌｏｒ＝ａ＋Ｘ
これで、ＣＰＵとＧＰＵで、同様の計算が行われる。  
【００５８】
なお、足し算、引き算、掛け算、割り算の内容は、各々以下の通りである。
【００５９】
ＰＬＵＳ＿Ｃ          ：（定数ａ）＋（行列Ｘ）
ＭＩＮＵＳ＿Ｃ        ：（定数ａ）−（行列Ｘ）
ＭＵＬＴＩＰＬＹ＿Ｃ  ：（定数ａ）×（行列Ｘ）
ＤＩＶＩＤＥ＿Ｃ      ：（定数ａ）÷（行列Ｘ）
なお、例えば（定数ａ）と（行列Ｘ）の和算演算は、行列Ｘの各要素ｘｉｊがａ＋ｘｉｊとなることを指し、引き算、掛け算、割り算も同様に、行列Ｘの各要素ｘｉｊが、定数ａと引き算、掛け算、割り算がなされることを指す。
【００６０】
ＰＬＵＳ＿Ｖ          ：（行列Ａ）＋（行列Ｘ）
ＭＩＮＵＳ＿Ｖ        ：（行列Ａ）−（行列Ｘ）
ＭＵＬＴＩＰＬＹ＿Ｖ  ：（行列Ａ）×（行列Ｘ）
ＤＩＶＩＤＥ＿Ｖ      ：（行列Ａ）÷（行列Ｘ）
【００６１】
前記の四則演算（単精度浮動小数点演算）の比較結果を、図６に示す。図６において、横軸は行列要素数であり、縦軸が速度比である。ここに、行列要素数とは、ｉ行ｊ列の行列であればｉ×ｊのことである。なお、図６において、ＰＬＵＳ＿ＣとＭＩＮＵＳ＿ＣとＭＵＬＴＩＰＬＹ＿Ｃは、ほぼ１つの折れ線となっている。また、ＰＬＵＳ＿ＶとＮＵＳ＿ＶとＭＵＬＴＩＰＬＹ＿Ｖも、ほぼ１つの折れ線となっている。
【００６２】
ＣＰＵに比べてＧＰＵは、加減、乗算では１０倍程度、除算では５０倍程度まで高速であることが判る。また、計算精度は全てＩＥＥＥ７５４標準以内であり、ＣＰＵとＧＰＵの計算結果に有効数値内での差は見られなかった。なお、ＩＥＥＥ７５４は、計算機の精度を取り纏めた規格であり、単精度（３２ｂｉｔ）では、有効数字の少数第６位まで正確に計算していることとされる。
【００６３】
指数計算（単精度浮動小数点演算）の比較結果を、図７に示す。ＩＥＥＥ単精度最小正規数ｅｘｐ（−８７）〜最大正規数ｅｘｐ（８８）における代表点６点で、具体的にはｅｘｐ（１）、ｅｘｐ（１０）、ｅｘｐ（８８）、ｅｘｐ（−１）、ｅｘｐ（−１０）、ｅｘｐ（−８７）で、精度と計算速度を比較したものである。
なお、図７において、ｅｘｐ（８８）を除く他の指数計算｛ｅｘｐ（−８７），ｅｘｐ（−１０）、ｅｘｐ（−１）、ｅｘｐ（１）、ｅｘｐ（１０）｝は、ほぼ１つに重なった折れ線となっている。
【００６４】
図７により、２７０〜３７０倍程度の高速化ができることが判る。なお、精度は全てＩＥＥＥ７５４標準以内であり、ＣＰＵとＧＰＵの計算結果に有効数値内での差は見られなかった。
【００６５】
（その他の実施の形態）
以上の計算方法は、例えば長期の気象予測等でも同様に行なえる。この場合には、各メッシュ内に入出力するパラメータは、空気、水分、熱、太陽光（入のみ）等であり、各メッシュ内で計算される事項は、太陽光の吸収による温度の変化、水分の気液間の相の変化と含まれる水分の気液の割合、風向と風速等となる。
地表面を例に採れば、各単位時間における各メッシュ内での太陽光の吸収は、陸や海等から定まるメッシュ毎の吸収率、季節等により定まる太陽定数、日時や時刻により定まる太陽の照射角度、太陽側に位置するメッシュの雲についてのデータ等の積となる。
【図面の簡単な説明】
【００６６】
【図１】本実施の形態のＣＰＵとＧＰＵの接続関係を、概念的に示す図である。
【図２】同じく、ＧＰＵのシェーダが数値計算を行う様子を概念的に示す図である。
【図３】ＣＰＵ経由で入力された行列の和算がＧＰＵ内でなされ、ＣＰＵに送られる様子の１例を概念的に示す図である。
【図４】１つのシェーダプログラムに対して複数の入力行列セットを連続的に変化させるためのフローチャートの要部を、概念的に示す図である。
【図５】１つの入力行列セットに対して複数のシェーダプログラムを連続的に変化させるためのフローチャートの要部を、概念的に示す図である。
【図６】四則演算において、ＧＰＵがＣＰＵに比較して高速で計算することを概念的に示す図である。
【図７】指数計算において、ＧＰＵがＣＰＵに比較して高速で計算することを概念的に示す図である。
【符号の説明】
【００６７】
１００    ＣＰＵ
１５０    メインメモリ
１９０    メインメモリ内の行列
２００    ＧＰＵ
２５０    ＶＲＡＭ
２９０    テクスチャ
２９１    テクスチャとしての入力行列
２９２    演算がなされている入力行列
２９３    出力行列
３００    バス
【図１】
2008076116.tif 000003
【図２】
2008076116.tif 000004
【図３】
2008076116.tif 000005
【図４】
2008076116.tif 000006
【図５】
2008076116.tif 000007
【図６】
2008076116.tif 000008
【図７】
2008076116.tif 000009