Microsoft Word - qpeigen_manual_jp-1.0.doc

Similar documents
4 倍精度基本線形代数ルーチン群 QPBLAS の紹介 [index] 1. Introduction 2. Double-double algorithm 3. QPBLAS 4. QPBLAS-GPU 5. Summary 佐々成正 1, 山田進 1, 町田昌彦 1, 今村俊幸 2, 奥田洋司

<4D F736F F F696E74202D D F95C097F D834F E F93FC96E5284D F96E291E85F8DE391E52E >

並列計算導入.pptx

Slide 1

PowerPoint プレゼンテーション

Fortran 勉強会 第 5 回 辻野智紀

<4D F736F F F696E74202D F A282BD94BD959C89F A4C E682528D652E707074>

Microsoft Word _001b_hecmw_PC_cluster_201_howtodevelop.doc

appli_HPhi_install

hirayama

Microsoft Word - appli_SMASH_tutorial_2.docx

インテル(R) Visual Fortran コンパイラ 10.0

Microsoft Word - appli_OpenMX_install.docx

Hphi実行環境導入マニュアル_v1.1.1

演習1

Microsoft Word ●IntelクアッドコアCPUでのベンチマーク_吉岡_ _更新__ doc

about MPI

スライド 1

memo

PDFオートコンバータEX

<< 目次 >> 1 PDF コンバータのインストール ライセンスコードの入力 PDF にフォントを埋め込みたい場合の設定 PDF オートコンバータ EX で使用しない場合 PDF コンバータ単体で使用する場合の説明 PDF コンバータのアン

EigenExaユーザーズ・マニュアル

Microsoft Word - HOKUSAI_system_overview_ja.docx

7th CodeGear Developer Camp

Microsoft PowerPoint - 10.pptx

Microsoft PowerPoint - 1_コンパイラ入門セミナー.ppt

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

tabaicho3mukunoki.pptx

Total View Debugger 利用の手引 東京工業大学学術国際情報センター version 1.0

研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並

Gromacsユーザーマニュアル

Microsoft PowerPoint - OS07.pptx

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD

第8回講義(2016年12月6日)

Microsoft PowerPoint - 計算機言語 第7回.ppt

情報処理概論(第二日目)

PowerPoint プレゼンテーション

Microsoft PowerPoint - sps14_enshu2-2.pptx

memo

製品開発の現場では 各種のセンサーや測定環境を利用したデータ解析が行われ シミュレーションや動作検証等に役立てられています しかし 日々収集されるデータ量は増加し 解析も複雑化しており データ解析の負荷は徐々に重くなっています 例えば自動車の車両計測データを解析する場合 取得したデータをそのまま解析

生成された C コードの理解 コメント元になった MATLAB コードを C コード内にコメントとして追加しておくと その C コードの由来をより簡単に理解できることがよくありま [ 詳細設定 ] [ コード外観 ] を選択 C コードのカスタマイズ より効率的な C コードを生成するベストプラクテ

Intel MPI Library Linux

2 2.1 Mac OS CPU Mac OS tar zxf zpares_0.9.6.tar.gz cd zpares_0.9.6 Mac Makefile Mekefile.inc cp Makefile.inc/make.inc.gfortran.seq.macosx make

UIOUSBCOM.DLLコマンドリファレンス

PowerPoint プレゼンテーション

09.pptx

Microsoft Word _VBAProg1.docx

UNIX 初級講習会 (第一日目)

Microsoft PowerPoint - qcomp.ppt [互換モード]

Application Note Application Note No. ESC-APN 文書番号 : ESC-APN Tcl link library インストールガイド はじめに Tcl link library インストールガイド ( 以下 本書 ) では Act

Using VectorCAST/C++ with Test Driven Development

(Microsoft PowerPoint \211\211\217K3_4\201i\216R\226{_\211\272\215\342\201j.ppt [\214\335\212\267\203\202\201[\203h])

PowerPoint プレゼンテーション

行列、ベクトル

演習1: 演習準備

この時お使いの端末の.ssh ディレクトリ配下にある known_hosts ファイルから fx.cc.nagoya-u.ac.jp に関する行を削除して再度ログインを行って下さい

スライド 1

Gfarm/MPI-IOの 概要と使い方

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD

熱伝達の境界条件 (OF-2.1 OF-2.3) 1/7 藤井 15/01/30 熱伝達の境界条件 (OF-2.1 OF-2.3) 目次 1. はじめに 2. 熱伝達の境界条件 (fixedalphatemp) の作成 2-1. 考え方 2-2. fixedalphatemp の作成 3. 作動確認

目次 1. はじめに 本書対象者 PALRO のアプリケーションについて Ubuntu 8.04LTS の入手について Linux 上での開発環境の構築 事前準備 Ubuntu のインストール..

目次 第 1 章はじめに 本ソフトの概要... 2 第 2 章インストール編 ソフトの動作環境を確認しましょう ソフトをコンピュータにセットアップしましょう 動作を確認しましょう コンピュータからアンインストー

修士論文

二次元連続動的計画法による知的画像処理システム ImageFileSelector RTC 機能仕様書 ImageFileSelectorRTC Ver.1.0 ( 株 ) 東日本計算センター 1 / 11

Systemwalker Network Assist V10.0/V11.0L10/11.0

ビッグデータ分析を高速化する 分散処理技術を開発 日本電気株式会社

memo

NVIDIA Tesla K20/K20X GPU アクセラレータ アプリケーション パフォーマンス テクニカル ブリーフ

インテル® Parallel Studio XE 2019 Composer Edition for Fortran Windows 日本語版 : インストール・ガイド

目次 はじめに システム環境 インストール手順 インストール前の注意点 インストールの準備 ライセンスの登録 インストール先の選択 インストールの開始 インストール

目次 第 1 章はじめに 本ソフトの概要... 2 第 2 章インストール編 ソフトの動作環境を確認しましょう ソフトをコンピュータにセットアップしましょう 動作を確認しましょう コンピュータからアンインストー

PowerPoint プレゼンテーション

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

Microsoft PowerPoint - H21生物計算化学2.ppt

商標類 Microsoft は, 米国およびその他の国における米国 Microsoft Corp. の登録商標です Microsoft Office は, 米国 Microsoft Corp. の商品名称です Microsoft Excel は, 米国 Microsoft Corp. の商品名称です

SPACEstJ User's Manual

PowerPoint プレゼンテーション

Microsoft PowerPoint - sales2.ppt

分割コンパイル (2018 年度 ) 担当 : 笹倉 佐藤 分割コンパイルとは 一つのプログラムのソースを複数のソースファイルに分けてコンパイルすること ある程度大きなプログラムの場合ソースファイルをいくつかに分割して開発するのが普通 1

Windows への opensource COBOL 環境の構築手順 0. 前提条件当手順は Windows へ opensource COBOL 環境を構築する手順である 手順確認時の OS と時期は以下の通りである OS Windows 8.1(64bit) 時期 2018/09 1. 構築手

$ cmake --version $ make --version $ gcc --version 環境が無いあるいはバージョンが古い場合は yum などを用いて導入 最新化を行う 4. 圧縮ファイルを解凍する $ tar xzvf gromacs tar.gz 5. cmake を用

Microsoft Word - nvsi_050110jp_netvault_vtl_on_dothill_sannetII.doc

目次 はじめに P.02 マクロの種類 ---

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

1

storage-sdk-Java

目次はじめに 必要システム環境 インストール手順 インストール前の注意点 インストールの準備 (.NET Framework3.5 SP1 のインストール ) ライセンスの登録 初期設定情報の入力... 8

24th Embarcadero Developer Camp

PDFConverter

Microsoft PowerPoint _2.プログラミングの基礎_final.pptx

内容に関するご質問は まで お願いします [Oakforest-PACS(OFP) 編 ] 第 85 回お試しアカウント付き並列プログラミング講習会 ライブラリ利用 : 科学技術計算の効率化入門 スパコンへのログイン テストプログラム起動 東京大学情報基盤セ

演習2

Microsoft Word - thesis.doc

ごあいさつ このたびは ESMPRO/AC Advance マルチサーバオプション Ver3.6(1 ライセンス ) をお買い上げ頂き 誠にありがとうございます 本書は お買い上げ頂きましたセットの内容確認 セットアップの内容 注意事項を中心に構成されています ESMPRO/AC Advance マ

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

板バネの元は固定にします x[0] は常に0です : > x[0]:=t->0; (1.2) 初期値の設定をします 以降 for 文処理のため 空集合を生成しておきます : > init:={}: 30 番目 ( 端 ) 以外については 初期高さおよび初速は全て 0 にします 初期高さを x[j]

2... Numerical Recipes [1] Matrix Computation [2].,.. 2.1, ( ) A. A,.,.. A [ ] [ ] a x T 0 A =, P = I β [0 u T ], P = I βuu T, β = 2/ u 2 x B u P ( ),

Studuinoソフトウェアのインストール

Transcription:

4 倍精度固有値計算ライブラリ QPEigen Ver.1.0 ユーザーズマニュアル

2015 年 2 月独立行政法人日本原子力研究開発機構

目次 1 概説... 3 2 行列対角化について... 2 3 4 倍精度化アルゴリズムについて... 2 4 参考文献... 3 5 ディレクトリ構成... 3 6 必要なソフトウェア... 3 7 インストール方法... 4 8 検証用 性能評価用プログラム... 6 9 サンプルプログラム... 7 10 サブルーチン詳細... 10 1 概説 原子力研究開発機構システム計算科学センターシミュレーション技術開発室では 第二期中期計画に定めた研究開発テーマ 原子炉構造材料における劣化現象の解明 燃料関連アクチノイド化合物の物質特性の予測並びに高効率な熱電材料 電源材料及び超伝導材料の構造と機能の関係解明のための高精度シミュレーション技術を開発する を達成するため 関係する計算手法の研究開発を行っている 上記計画では 材料物性を研究する数値計算手法の開発が共通の計算科学上の課題であり 量子力学 ( 量子多体問題 ) に基づき正確に電子状態を計算する手法の開発が不可欠である 一般に 量子多体問題を正確に解くためには 極めて大きな自由度を近似なしに扱う必要性があることから 大規模な数値計算を 精度を維持しながら実施しなければならない 現在 量子多体問題を解くような大規模計算は 並列計算機を利用することで実現可能であり プロセッサー毎の利用可能メモリを集めることで全体として巨大なメモリ領域が確保されれば 計算資源が許す限りの大規模問題にアプローチできる しかし 実際に大規模計算を行い 正確な量子状態を得るためには 膨大な数の演算が必要となるため 累積誤差が蓄積する事が知られてきた ( 計算機では ある有効桁数での演算を行うため 一回の演算毎に丸め誤差が混入し 演算量が増加するほどその累積誤差は増大する ) これまで従来規模のシミュレーションではその誤差が問題視されることはなかったが 京コンピュータのような超大規模計算機の性能を極限まで利用したシミュレーションを行うと 累積誤差は膨大になり シミュレーション結果の有効桁がほとんどなくなる可能性があることを指摘してきた経緯がある ( 実際 前地球シミュレータの全ノード 4096CPU を用いて計算可能な固有値問題を解いた際 有効精度が数桁程度になることを観測している )

このような状況の下 計算機シミュレーションにおいて頻繁に利用される基本演算ルーチンの1つである固有値計算ルーチンの 4 倍精度への拡張は 来る高精度な超並列大規模シミュレーションを実現するにあたり必須な研究開発項目であり 全ての大規模シミュレーションに共通な普遍的問題であるため その研究開発に対する緊急性は極めて高いと判断できる 本開発に先立ち実施した基本線形代数プログラム群 (BLAS) の 4 倍精度化において 既にその有効性を確認している 我々はこれまでに実対称行列およびエルミート行列の固有値と固有ベクトルを求めるライブラリ倍精度版の固有値計算ライブラリ EigenK を開発している この EigenK ライブラリでは実対称行列の固有値固有ベクトルを求める場合には 3 重対角化あるいは 5 重対角化を選択することができる 今回開発した 4 倍精度固有値計算ライブラリ ( 以下 QPEigen_s ライブラリと呼ぶ ) は この EigenK ライブラリのうち 実対称行列の固有値と固有ベクトルを 3 重対角化で求めるルーチン群を 4 倍精度化したものである 本書では QPEigen_s ライブラリの使用方法について説明する 2 行列対角化について 行列の対角化とは固有値計算とほぼ同義で 構造解析や量子力学の計算でよく表れる 固有値計算とは 行列が与えられたときになる固有値および固有ベクトルを求める問題である QPEigen_s は実対称行列の固有値を 3 重対角化を経由して求めるライブラリである 3 4 倍精度化アルゴリズムについて IEEE 754 規格に基づく 4 倍精度 (128 bit) の浮動小数点演算は 最新の Fortran を含む一部の言語ではすでに実装されている しかし ハードウェアがこの演算に対してまだ最適化されていないため この演算は任意精度演算として実行される場合が多い その結果 演算速度が倍精度演算と比べて非常に遅くなるという課題を抱えている QPEigen_s では 計算精度と計算速度を両立させるために D.H.Bailey が提案した double-double アルゴリズムを採用した このアルゴリズムでは 2 つの倍精度データを利用して 高精度の 1 つのデータを表現し また倍精度データの演算を組み合わせて 4 倍精度の演算を実現する この double-double アルゴリズムを用いた数値表現の範囲や精度は 本来の 4 倍精度のそれよりは若干劣るものの 通常の倍精度数値表現と比べると約 2 倍である このような高精度なデータに対する演算を倍精度演算のみで行えるため 大規模で高精度なシミュレーションの実現のために非常に有効なアルゴリズムである 2

4 参考文献 BaileyHD. High-Precision Software Directory. http://crd-legacy.lbl.gov/~dhbailey/mpdist. 山田進, 佐々成正, 今村俊幸,, 町田昌彦. 4 倍精度基本線形代数ルーチン QPBLAS の紹介とアプリケーションへの応用. 2012-HPC [ 情報処理学会研究報告 ] 137, 第 23 [2012]: 1-6. 5 ディレクトリ構成 メディアのディレクトリ構成を以下に示す (QPEigen_s の例であるが 他のライブライリも _s を _sx や _h に変えた同様の内容を持つ ) ディレクトリ名説明 ddmpi ddblas ddlapack ddscalapack ddeigen_s ddeigen_s_test eigen_s eigen_s_test 4 倍精度 (DD)MPI 通信ライブラリのソースファイル等一式を格納 DDBLAS のソースファイル等一式を格納 DDLAPACK のソースファイル等一式を格納 DDScaLAPACK のソースファイル等一式を格納 DDEigen_s のソースファイル等一式を格納 4 倍精度 (DD) のテストを実行するためのプログラム一式を格納倍精度 Eigen_s のソースファイル等一式を格納倍精度 Eigen_s のテストを実行するためのプログラム一式を格納 6 必要なソフトウェア QPEigen ライブラリでは DDBLAS 及び BLAS 4 倍精度 ScaLAPACK ( 以下 DDScaLAPACK) オリジナルの ScaLAPACK 4 倍精度 LAPACK( 以下 DDLAPACK) オリジナルの LAPACK 4 倍精度 MPI 通信ライブラリを使用している このため リンク時 ( ロードモジュール作成時 ) に DDBLAS 及び DDScaLAPACK DDLAPACK をリンクするためのオプションが必要になる これらのオプションは configure のオプションで指定する 3

7 インストール方法 以下のコマンドを端末に入力することで ユーザーの環境に合わせた Makefile の作成とコンパイルが行われる (QPEigen_s の例であるが 他のライブライリも _s を _sx や _h に変えた同様の操作を行う ) tar xzf QPEigen_s-version.tar.gz cd QPEigen_s-version./configure options make configure の際に考慮すべき主なオプションとその意味は 以下の通りである FC=f90_compiler CC=c_compiler FCFLAGS=options CFLAGS=options LDFLAGS=options --prefix=path --disable-openmp Fortran コンパイラの指定 C コンパイラの指定 Fortran のコンパイルオプションの指定並列計算や最適化に関する指定を行う C のコンパイルオプションの指定リンクオプションの指定インストールディレクトリの変更 OpenMP による並列化を無効にする指定されなかった場合は OpenMP による並列化を行う コンパイルのために最低限必要な configure オプションは たとえば次のようになる 例 :GNU C / GNU Fortran を利用する場合./configure CC=mpicc FC=mpif90 例 :Intel C / Intel Fortran を利用する場合./configure CC=mpiicc FC=mpiifort CFLAGS="-O2" --disable-openmp LIBS="-L/usr/lib/gcc -lgfortran" make コマンドのオプションは以下のものがある 4

make make all make lib make test make sample make bench make verify make eigen_s_test make clean make clean-lib make clean-test make clean-[programs] 単に make することは make all と同義 すべてのソースコードをコンパイルする ライブラリのみをコンパイルする テストプログラムのみをコンパイルする ただし もし lib フォルダに依存ライブラリ (ddblas, blas, lapack, scalapack) が存在しない場合にはエラーを出力して停止する また その他の同梱している依存ライブラリ (ddmpi, ddlapack, ddscalapack, ddeigen_s ) が見つからない場合には自動的に make lib される サンプルプログラムをコンパイルする ベンチマークプログラムのみをコンパイルする 検証プログラムをコンパイルする テストプログラムのみをコンパイルする 全てのコンパイル済ファイルを削除する ライブラリに関する全コンパイル済ファイルを削除する テストプログラム関係のみ削除する 個別にライブラリ関係のファイルを削除する make が成功すると 次のライブラリやプログラムが作成される ddlapack/libddlapack.a DDLAPACK ライブラリ ddmpi/libmpifdd1.a DDMPI ライブラリ ddmpi/libmpifdd2.a DDMPI ライブラリ ddscalapack/libddscalapack.a DDScaLAPACK ライブラリ eigen_s/libeigen_s.a 倍精度 Eigen ライブラリ ddeigen_s/libddeigen_s.a double-double 4 倍精度 Eigen ライブラリ eigen_s_test/test_frank_d 倍精度フランク行列固有値検証プログラム eigen_s_test/test_random_d 倍精度ランダム行列固有値検証プログラム ddeigen_s_test/test_frank_d double-double 4 倍精度フランク行列固有値検証プログラム ddeigen_s_test/test_random_d double-double 4 倍精度ランダム行列固有値検証プログラム sample/frank5_sample_dd 5 次フランク行列の固有値を求めるサンプルプログラム 5

sample/hilbert5_sample_dd verify/ddeigen_s_verify bench/bench_frank_matrix bench/bench_randam_matrix 5 次ヒルベルト行列の固有値を求めるサンプルプログラム実対称行列の固有値と固有ベクトルを求める検証用プログラムフランク行列用の性能測定プログラムランダム行列用の性能測定プログラム 8 検証用 性能評価用プログラム 7 に示した手順によって コンパイルを完了させたのち 次のコマンドを入力する (QPEigen_s の例であるが 他のライブライリも _s を _sx や _h に変えた同様の操作を行う ) cd ddeigen_s_test./test_frank_dd ( フランク行列の場合 )./test_random_dd ( ランダム行列の場合 ) テストプログラムを実行すると標準出力に計算精度が出力される この計算精度で 4 倍 精度の演算が行われているかを判断する 計算精度は以下のように計算されている 計算精度 = w n A x n max Ax w n n x n : 数値解法により求めた固有値 : 精度検証行列 : 数値解法により求めた固有ベクトル 図 8-1 に標準出力の例を示す 赤枠部分に計算精度が出力される 図 8-1 テストプログラム実行後の標準出力の例 各ルーチンの呼び出し方法や引数の説明は 0 を参照のこと 6

9 サンプルプログラム sample ディレクトリに Fortran77 で書かれた QPEigen_s のサンプルプログラムがいくつか用意されている (QPEigen_s の例であるが 他のライブライリも _s を _sx や _h に変えた同様の操作を行う ) frank5_sample_dd 5 次のフランク行列の対角化を double-double4 倍精度で行う hilbert5_sample_dd 5 次のヒルベルト行列の対角化を double-double4 倍精度で行う 9.1 フランク行列の対角化 (frank5_sample_dd) フランク行列とは 固有値が既知の条件数の悪い行列として 固有値を数値計算する場合 のベンチマークによく用いられる 5 次の場合は次のような行列である 4 倍精度の行列に フランク行列の成分を high word に代入し low word は 0.0d とする あらかじめ必要な作業領域の大きさを cstab_get_optdim サブルーチンを使って求めておく ddmatrix_adjust_s サブルーチンで 行列を作業領域にコピーしたあとで ddeigen_s サブルーチンを呼び出すと 固有値および固有ベクトルが得られる 9.2 ヒルベルト行列の対角化 (hilbert5_sample_dd) ヒルベルト行列は悪条件の行列の代表として数値計算のベンチマークによく用いられる 5 次の場合は次のような行列である 4 倍精度の行列に ヒルベルト行列の成分を 4 倍精度の割り算の結果として high word および low word に代入する あらかじめ必要な作業領域の大きさを cstab_get_optdim サブルーチンを使って求めておく ddmatrix_adjust_s サブルーチンで 行列を作業領域にコピーしたあとで ddeigen_s サブルーチンを呼び出すと 固有値および 7

固有ベクトルが得られる 9.3 サンプルプログラムの実行方法これらのサンプルプログラムは make の際にコンパイルされているため 例えば frank5_sample_dd の場合は次のように入力することで実行できる cd sample./frank5_sample_dd このプログラムを自分でコンパイルする場合は 例えば次のように行う mpiifort frank5_sample_dd.f -I../ddeigen_s../ddeigen_s/libddEigen_s.a../ddscalapack/libddscalapack.a../ddlapack/libddlapack.a../ddmpi/libMpifdd1.a../ddmpi/libMpifdd2.a../../lib/libddblas.a../../lib/libscalapack.a../../lib/liblapack.a../../lib/libblas.a サンプルプログラム frank5_sample_dd.f のソースコードは以下の通り program frank5_sample_dd use ddcommunication_s, only : eigen_init &, eigen_free implicit double precision (a-h,o-v,x-z)!! double precision, allocatable :: ah(:,:), al(:,:) double precision, pointer :: bh(:), bl(:) double precision, pointer :: zh(:), zl(:) double precision, pointer :: wh(:), wl(:) logical iexist include 'mpif.h' include 'trd.h' call mpi_init(ierr) call mpi_comm_rank(mpi_comm_world,i$inod,ierr) 8

call mpi_comm_size(mpi_comm_world,i$nnod,ierr) n=5 allocate(ah(n,n),al(n,n)) call eigen_init(2) NPROW = size_of_col NPCOL = size_of_row nx = ((n-1)/nprow+1) call CSTAB_get_optdim(nx, 2, 1, 2, nm)! call CSTAB_get_optdim(nx, 6, 16*4, 16*4*2, nm) call eigen_free(0) NB = 32! NB = 64+32 nmz = ((n-1)/nprow+1) nmz = ((nmz-1)/nb+1)*nb+1 nmw = ((n-1)/npcol+1) nmw = ((nmw-1)/nb+1)*nb+1 larray = MAX(nmz,nm)*nmw allocate( bh(larray), bl(larray),zh(larray),zl(larray), & wh(n),wl(n), stat=istat) if(istat.ne.0) then print*,"memory exhausted" call flush(6) stop endif ah(1,1:5) = (/ 5.0d0, 4.0d0, 3.0d0, 2.0d0, 1.0d0 /) ah(2,1:5) = (/ 4.0d0, 4.0d0, 3.0d0, 2.0d0, 1.0d0 /) ah(3,1:5) = (/ 3.0d0, 3.0d0, 3.0d0, 2.0d0, 1.0d0 /) ah(4,1:5) = (/ 2.0d0, 2.0d0, 2.0d0, 2.0d0, 1.0d0 /) ah(5,1:5) = (/ 1.0d0, 1.0d0, 1.0d0, 1.0d0, 1.0d0 /) 9

al(1,1:5) = (/ 0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0 /) al(2,1:5) = (/ 0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0 /) al(3,1:5) = (/ 0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0 /) al(4,1:5) = (/ 0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0 /) al(5,1:5) = (/ 0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0 /) call ddmatrix_adjust_s(n, ah, al, bh, bl, nm) call ddeigen_s(n, bh, bl, nm, wh, wl, zh, zl, nm, m, 1) write(*,*) 'EigenValue=', wh * deallocate(ah,al) deallocate(bh,bl) deallocate(zh,zl) deallocate(wh,wl) call MPI_Finalize(ierr) end 10 サブルーチン詳細 QPEigen_s ライブラリのルーチン モジュールの一覧を表 1 に示す 表 1 ルーチン名機能実対称行列を HouseHolder3 重対角化して固有値及び固有ベクト ddeigen_s ルを求める 3 重対角化 固有値算出 固有ベクトル算出の一連の動作を実行する ddeigen_trd 実対称行列を HouseHolder3 重対角化により 3 重対角化する 実対称行列の HouseHolder3 重対角化により 3 重対角化された行 ddeigen_dc 列を入力とし 分割統治法で固有値を求める 実対称行列の HouseHolder3 重対角化に対応する固有ベクトルを ddeigen_tbk 求める DDEigen ライブラリでは 2 次元のサイクリック分割を行ってい ddmatrix_adjust_s る 行列のデータ配置をサイクリック分割に対応させるための変換 10

ddcommunication_s ルーチンである 当ライブラリを使用する直前に呼び出す必要があ る MPI 通信を行うためのモジュール 11

QPEigen_sx ライブラリのルーチン モジュールの一覧を表 12 に示す 表 2 ルーチン名機能実対称行列を NarrowBandReduction 5 重対角化して固有値及び ddeigen_sx 固有ベクトルを求める 5 重対角化 固有値算出 固有ベクトル算出の一連の動作を実行する 実対称行列を NarrowBandReduction 5 重対角化により 5 重対角 ddeigen_prd 化する 実対称行列の NarrowBandReduction 5 重対角化により 5 重対角 ddeigen_dcx 化された行列を入力とし 分割統治法で固有値を求める 実対称行列の NarrowBandReduction 5 重対角化に対応する固有 ddeigen_pbk ベクトルを求める DDEigen ライブラリでは 2 次元のサイクリック分割を行っている 行列のデータ配置をサイクリック分割に対応させるための変 ddmatrix_adjust_sx 換ルーチンである 当ライブラリを使用する直前に呼び出す必要がある ddcommunication_sx MPI 通信を行うためのモジュール QPEigen_h ライブラリのルーチン モジュールの一覧を表 13 に示す 表 3 ルーチン名機能エルミート行列の固有値固有ベクトルを求める 対角化 固有値計 ddeigen_h 算 固有ベクトル計算の一連の動作を実行する ddeigen_hrd エルミート行列を対角化する エルミート行列について 対角化された行列を入力とし 分割統治 ddeigen_dch 法で固有値を求める ddeigen_hbk エルミート行列に対応した固有ベクトルを求める DDEigen ライブラリでは 2 次元のサイクリック分割を行ってい ddmatrix_adjust_h る 行列のデータ配置をサイクリック分割に対応させるための変換 ddmatrix_adjust_hi ルーチンである 当ライブラリを使用する直前に呼び出す必要がある ddcommunication_h MPI 通信を行うためのモジュール 12

ルーチン名 ddeigen_s 実対象行列を HouseHolder-3 重対角化して固有値及び固有ベクトルを求める 3 重対角化 固有値及び固有ベクトルの導出の一連の動作を実行 呼び出し方法 ddeigen_s(n, ah, al, lda, wh, wl, zh, zl, ldz, m, ifl) ah 行列を格納した配列の High-word double i al 行列を格納した配列の Low-word double i lda 配列 a のサイズ integer i wh 固有値を格納する配列の High-word double o wl 固有値を格納する配列の Low-word double o zh 固有ベクトルを格納する配列の High-word double o zl 固有ベクトルを格納する配列の Low-word double o ldz 配列 z のサイズ integer i m ブロック化係数 integer i 32~128 程度 ifl 固有ベクトルの要否フラグ integer i 0 または 1 ルーチン名 ddeigen_trd 実対称行列を HouseHolder-3 重対角化により 3 重対角化する 呼び出し方法 ddeigen_trd(n, ah, al, lda, dh, dl, eh, el, m) ah 行列を格納した配列の High-word double i al 行列を格納した配列の Low-word double i lda 配列 a のサイズ integer i dh 対角要素を格納する配列の High-word double o dl 対角要素を格納する配列の Low-word double o eh 副対角要素を格納する配列の High-word double o el 副対角要素を格納する配列の Low-word double o m ブロック化係数 integer i ルーチン名 ddeigen_dc 実対象行列の HouseHolder-3 重対角化により 3 重対角化された行列を入力とし 分割統治法で固有値を求める 呼び出し方法 ddeigen_dc(n, wh, wl, eh, el, zh, zl, ldz, info) wh 固有値を格納する配列の High-word double o wl 固有値を格納する配列の Low-word double o eh 副対角要素を格納する配列の High-word double i el 副対角要素を格納する配列の Low-word double i zh 固有ベクトルを格納する配列の High-word double o zl 固有ベクトルを格納する配列の Low-word double o ldz 配列 z のサイズ integer i info エラー番号 integer o 13

ルーチン名 ddeigen_tbk 実対称行列の HouseHolder-3 重対角化に対応する固有ベクトルを求める 呼び出し方法 ddeigen_tbk(n, ah, al, lda, zh, zl, ldz, eh, el, m) ah 行列を格納した配列の High-word double i al 行列を格納した配列の Low-word double i lda 配列 a のサイズ integer i zh 固有ベクトルを格納する配列の High-word double o zl 固有ベクトルを格納する配列の Low-word double o ldz 配列 z のサイズ integer i eh 副対角要素を格納する配列の High-word double i el 副対角要素を格納する配列の Low-word double i m ブロック化係数 integer i 128 程度を指定 ルーチン名 ddmatrix_adjust_s DDEigen ライブラリでは 2 次元のサイクリック分割を行っている 行列 のデータ配置をサイクリック分割に対応させるための変換ルーチンであ る 当ライブラリを使用する直前に呼び出す必要がある 呼び出し方法 ddmatrix_adjust_s(n, ah, al, bh, bl, nm) ah 行列を格納した配列の High-word double i al 行列を格納した配列の Low-word double i bh 分散データ行列の格納配列の High-word integer o bl 分散データ行列の格納配列の Low-word double o nm 配列 b のサイズ integer i 14

ルーチン名 ddeigen_sx 実対称行列を NarrowBandReduction 5 重対角化して固有値及び固有ベク トルを求める 5 重対角化 固有値算出 固有ベクトル算出の一連の動作 を実行する 呼び出し方法 ddeigen_sx(n, ah, al, nma, wh, wl, zh, zl, dh, dl, eh, el, nme, m0, ifl) ah 行列を格納した配列の High-word double i al 行列を格納した配列の Low-word double i nma 配列 a のサイズ integer i wh 固有値を格納する配列の High-word double o wl 固有値を格納する配列の Low-word double o zh 固有ベクトルを格納する配列の High-word double o zl 固有ベクトルを格納する配列の Low-word double o dh 対角要素を格納する配列の High-word o dl 対角要素を格納する配列の Low-word o eh 副対角要素を格納する配列の High-word o el 副対角要素を格納する配列の Low-word o nme 配列 e のサイズ integer i m0 ブロック化係数 integer i 32~128 程度 ifl 固有ベクトルの要否フラグ integer i 0 または 1 ルーチン名 ddeigen_prd 実対称行列を NarrowBandReduction 5 重対角化により 5 重対角化する 呼び出し方法 ddeigen_prd(n, ah, al, nma, dh, dl, eh, el, nme, m0) ah 行列を格納した配列の High-word double i al 行列を格納した配列の Low-word double i nma 配列 a のサイズ integer i dh 対角要素を格納する配列の High-word double o dl 対角要素を格納する配列の Low-word double o eh 副対角要素を格納する配列の High-word double o el 副対角要素を格納する配列の Low-word double o nme 配列 e のサイズ integer i m0 ブロック化係数 integer i 32~128 程度 15

ルーチン名 ddeigen_dcx 実対称行列の NarrowBandReduction 5 重対角化により 5 重対角化された行列を入力とし 分割統治法で固有値を求める 呼び出し方法 ddeigen_dcx(n, wh, wl, eh, el, nme, zh, zl, nmz) wh 固有値を格納する配列の High-word double o wl 固有値を格納する配列の Low-word double o eh 副対角要素を格納する配列の High-word double o el 副対角要素を格納する配列の Low-word double o nme 配列 e のサイズ integer i zh 固有ベクトルを格納する配列の High-word double o zl 固有ベクトルを格納する配列の Low-word double o nmz 配列 z のサイズ integer i ルーチン名 ddeigen_pbk 実対称行列の NarrowBandReduction 5 重対角化に対応する固有ベクトルを求める 呼び出し方法 ddeigen_pbk(n, ah, al, nma, zh, zl, nmz, eh, el, m0) ah 行列を格納した配列の High-word double i al 行列を格納した配列の Low-word double i nma 行列 a のサイズ integer i lda 配列 a のサイズ integer i zh 固有ベクトルを格納する配列の High-word double o zl 固有ベクトルを格納する配列の Low-word double o nmz 配列 z のサイズ integer i eh 副対角要素を格納する配列の High-word double i el 副対角要素を格納する配列の Low-word double i m ブロック化係数 integer i 128 程度を指定 ルーチン名 ddmatrix_adjust_sx DDEigen ライブラリでは 2 次元のサイクリック分割を行っている 行列 のデータ配置をサイクリック分割に対応させるための変換ルーチンであ る 当ライブラリを使用する直前に呼び出す必要がある 呼び出し方法 ddmatrix_adjust_sx(n, ah, al, bh, bl, nm) ah 行列を格納した配列の High-word double i al 行列を格納した配列の Low-word double i bh 分散データ行列の格納配列の High-word integer o bl 分散データ行列の格納配列の Low-word double o nm 配列 b のサイズ integer i 16

ルーチン名 ddeigen_h エルミート行列の固有値固有ベクトルを求める 対角化 固有値計算 固有ベクトル計算の一連の動作を実行する 呼び出し方法 ddeigen_h(n, arh, arl, aih, ail, wh, wl, lda, m0, ifl) arh 行列 ( 実部 ) を格納した配列の High-word ( 出力時 ) double i/o 固有ベクトル実部の High-word arl 行列 ( 実部 ) を格納した配列の Low-word ( 出力時 ) double i/o 固有ベクトル実部の Low-word aih 行列 ( 虚部 ) を格納した配列の High-word ( 出力時 ) double i/o 固有ベクトル虚部の High-word ail 行列 ( 虚部 ) を格納した配列の Low-word ( 出力時 ) double i/o 固有ベクトル虚部の Low-word wh 固有値を格納する配列の High-word double o wl 固有値を格納する配列の Low-word double o lda 配列 a のサイズ integer i m0 ブロック化係数 integer i 32~128 程度 ifl 固有ベクトルの要否フラグ integer i 0 または 1 ルーチン名 ddeigen_hrd エルミート行列を対角化する 呼び出し方法 ddeigen_hrd(n, arh, arl, aih, ail, lda, dh, dl, eh, el, e2h, e2l, tauh, taul, m, zrh, zrl, zih, zil) arh 行列 ( 実部 ) を格納した配列の High-word double i arl 行列 ( 実部 ) を格納した配列の Low-word double i aih 行列 ( 虚部 ) を格納した配列の High-word double i ail 行列 ( 虚部 ) を格納した配列の Low-word double i lda 配列 a のサイズ integer i dh 対角要素を格納する配列の High-word double o dl 対角要素を格納する配列の Low-word double o eh 副対角要素を格納する配列の High-word double o el 副対角要素を格納する配列の Low-word double o e2h ワーク領域 double o e2l ワーク領域 double o tauh ワーク領域 double o taul ワーク領域 double o m ブロック化係数 integer i 128 程度 zrh 固有ベクトル ( 実部 ) の High-word double o zrl 固有ベクトル ( 実部 ) の Low-word double o zih 固有ベクトル ( 虚部 ) の High-word double o zil 固有ベクトル ( 虚部 ) の Low-word double o 17

ルーチン名 ddeigen_dch エルミート行列について 対角化された行列を入力とし 分割統治法で固有値を求める 呼び出し方法 ddeigen_dch(n, dh, dl, eh, el, zh, zl, ldz, info) dh 固有値を格納する配列の High-word double o dl 固有値を格納する配列の Low-word double o eh 副対角要素を格納する配列の High-word double o el 副対角要素を格納する配列の Low-word double o zh 固有ベクトル ( 実部 ) を格納する配列の High-word double o zl 固有ベクトル ( 実部 ) を格納する配列の Low-word double o ldz 配列 z のサイズ integer i info エラー番号 integer o ルーチン名 呼び出し方法 ddeigen_hbk エルミート行列に対応した固有ベクトルを求める ddeigen_hbk(arh, arl, aih, ail, lda, zrh, zrl, zih, zil, ldz, tauh, taul, ltau, n) arh 行列 ( 実部 ) を格納した配列の High-word double i arl 行列 ( 実部 ) を格納した配列の Low-word double i aih 行列 ( 虚部 ) を格納した配列の High-word double i ail 行列 ( 虚部 ) を格納した配列の Low-word double i lda 行列 a のサイズ integer i zrh 固有ベクトル ( 実部 ) を格納する配列の High-word double o zrl 固有ベクトル ( 実部 ) を格納する配列の Low-word double o zih 固有ベクトル ( 虚部 ) を格納する配列の High-word double o zil 固有ベクトル ( 虚部 ) を格納する配列の Low-word double o ldz 配列 z のサイズ integer i touh ワークエリア double i toul ワークエリア double i ltau ワークエリア integer i n 行列 a の次元 integer i ルーチン名 ddmatrix_adjust_h, ddmatrix_adjust_hi DDEigen ライブラリでは 2 次元のサイクリック分割を行っている 行列 のデータ配置をサイクリック分割に対応させるための変換ルーチンであ る 当ライブラリを使用する直前に呼び出す必要がある 呼び出し方法 ddmatrix_adjust_h(n, ah, al, bh, bl, nm) ddmatrix_adjust_hi(n, ah, al, bh, bl, nm) ah 行列を格納した配列の High-word double i 18

al 行列を格納した配列の Low-word double i bh 分散データ行列の格納配列の High-word integer o bl 分散データ行列の格納配列の Low-word double o nm 配列 b のサイズ integer i 19