1. イントロダクション
本プロジェクトでは、nAG LibraryとnAG
Libraryマルチスレッド版の性能を比較しました。比較には、金融リスク分析で一般的に用いられる大規模モンテカルロシミュレーションを利用しています。このシミュレーションは、多数の資産からなるポートフォリオの将来価値を予測し、リスク指標を算出するものです。
nAG Libraryマルチスレッド版には、nAGによって最適化された並列化ルーチンが含まれており、これらのルーチンは複数スレッドの恩恵を受けることができます。今回の比較では、特に乱数生成の高速化に注目しました。乱数生成は大規模シミュレーションにおいて計算時間の大部分を占めることが多く、その高速化は全体のパフォーマンスに大きな影響を与えます。
2. シミュレーションの概要と技術的詳細
2.1 シミュレーション概要
今回のシミュレーションは、大規模なポートフォリオの将来価値を予測し、主要なリスク指標を算出するものです。具体的な設定は以下の通りです:
- 目的: Value at Risk (VaR)とExpected Shortfall (ES)の算出
- 対象: 1000資産のポートフォリオ
- 期間: 1年後(252営業日)の価値予測
- 試行回数: 100万回
このシミュレーションは、計算の簡易化のため、実際の金融モデルで考慮される以下の要素を省略しています:
- 資産間の相関
- 市場要因(金利、為替レート、ボラティリティなど)
- リスク要因(信用リスク、流動性リスクなど)
2.2 乱数生成の規模と使用アルゴリズム
本シミュレーションでは、膨大な数の乱数を生成する必要があります:
- 初期リターン生成用: 252,000個 (1,000 資産 × 252 日)
- ランダムショック用: 252,000,000,000個(2520億個) (1,000 資産 × 252 日 × 1,000,000 シミュレーション)
乱数生成には、nAG
LibraryのG05SKF
ルーチンを使用しました。分布については、正規分布を採用しています。nAG
Libraryは他の分布(例:スチューデントのt分布、対数正規分布)もサポートしており、より複雑なモデルにも対応可能です。
2.3 再現性の制御
シミュレーションの再現性を制御するため、以下の設定を行いました:
- 初期リターンの計算:固定シードで生成(常に同じ結果)
- ランダムショック:実行ごとに異なる乱数を使用
この設定により、初期条件は一定に保ちつつ、シミュレーション自体は毎回異なる結果を生成することができます。
3. nAG Libraryマルチスレッド版の特徴
nAG Libraryマルチスレッド版は、高性能計算を必要とするアプリケーションのために設計された特別なバージョンです。主な特徴は以下の通りです:
主要ルーチンの並列化: 広い範囲の主要ルーチンの多くが並列化されており、様々な数値計算タスクで性能向上が可能です。
高速な乱数生成: 本プロジェクトで注目した乱数生成では、OpenMP技術を用いた並列化により計算時間を大幅に短縮します。
簡単な導入: 既存のコードを変更せず、リンクするライブラリを変更するだけで並列処理の恩恵を受けられます。
再現性の制御: 乱数生成において、再現可能モードを選択すると、スレッド数に関わらず常に同一の乱数列が生成されます。
これらの特徴により、nAG Libraryマルチスレッド版は、金融リスク分析のような計算集約型のアプリケーションにおいて、高速化と信頼性を両立する強力なツールとなります。
4. 性能比較結果
4.1 計算時間とリスク指標の比較
版 / スレッド数 | 計算時間(秒) | VaR (円) | ES (円) |
---|---|---|---|
通常版 | 3566.398 | 12420.41 | 14489.94 |
マルチ版 (1) | 3542.991 | 12392.52 | 14454.51 |
マルチ版 (2) | 2022.881 | 12406.77 | 14481.94 |
マルチ版 (4) | 1330.399 | 12405.88 | 14473.95 |
マルチ版 (6) | 1181.515 | 12408.11 | 14472.83 |
注: VaRとESは全てポートフォリオ価値の約1.24%と1.45%に相当
マルチスレッド版を使用し、スレッド数を増やすことで大幅な速度向上が見られました。同時に、全ての実行でVaRとESの百分率は1.24%と1.45%で一致しており、マルチスレッド化による結果の安定性も確認できました。特筆すべきは、通常版で約1時間(3566秒、約59分)かかっていた計算が、6スレッドのマルチスレッド版では約20分(1182秒、約19分40秒)で完了しており、処理時間が3分の1程度に短縮されたことです。
4.2 スピードアップ率の比較

このグラフは、nAG Libraryの通常版とマルチスレッド版のスピードアップ率を比較しています。スレッド数が増えるにつれて、性能が大幅に向上していることがわかります。6スレッドを使用した場合、通常版と比較して約3.02倍の速度向上が達成されています。
4.3 プログラムコード
本プロジェクトで使用したFortranプログラムコードは以下からダウンロードできます:
このコードには、シミュレーションの実装詳細が含まれています。興味のある方はダウンロードしてご覧ください。