Monte-Carlo

在 QuantLib 中進行多執行緒 Monte-Carlo 的最佳方法

  • June 1, 2015

QuantLib 為 Monte-Carlo 定價引擎提供了很好的設施,McSimulation 和 MonteCarloModel 類做了很多工作。但他們是在一個執行緒中完成的。在我的自定義引擎中引入並行執行的最佳方法是什麼(繼承自 McSimulation 類,就像 QuantLib 中的某些儀器所做的那樣)?現在我看到 2 個選項

  1. 使用現有的 QuantLib 常式,並並行處理多個交易。
  2. 自定義蒙地卡羅模型

2.1 創建一個 MonteCarloModel 的子類並覆蓋 addSamples:在此處插入 OpenMP 程式碼

2.2 我的引擎已經是 McSimulation 的子類(我覆蓋了 timeGrid、pathGenerator、pathPricer),我還將覆蓋“calculate”——我將複製其目前程式碼,但用我的實現替換 MonteCarloModel 的實例化。

我既不喜歡第一個選項,也不喜歡第二個選項。第一個不允許我快速為單個交易定價,第二個讓我在修改 QuantLib 分佈中的 MonteCarloModel 和 McSimulation 類時遇到麻煩。

嘆。我不確定是否有在 QuantLib 中進行多執行緒 MC 的最佳方法。

恐怕您低估了選項 2 所需的開發量。您不會像您建議的那樣使用一些 OpenMP 程式碼,因為在不同路徑上的計算並不是非常並行的:

  • 我們擁有的 RNG 不是並行的,即使您為每個執行緒使用不同的實例,您仍然冒著疊加在它們將繪製的隨機數集中的風險;
  • 路徑生成器保持狀態,所以你不能在不同的執行緒中使用同一個;
  • 統計類保持狀態,因此您必須為每個執行緒使用不同的實例並在之後聚合結果,或者向現有實例添加鎖以序列化訪問。

而這些只是前兩分鐘剛想到的問題,沒有太努力。總而言之,如果您不想投入大量開發時間,我會選擇選項 1。

引用自:https://quant.stackexchange.com/questions/18082