NAG 的 GPUs 数值算法库
NAG 的金融产业 GPU 解决方案
目前多核心的 GPU 计算架构,本质上是专为多线程与并行化所设计的,特别适合于蒙地卡罗仿真的应用程序。
蒙地卡罗模拟 (Monte Carlo Simulation)
蒙地卡罗模拟方法,是应用于金融产业的衍生商品定价与风险管理中主要数值的方法。 这个技术的主要缺点是这样的高度密计算往往需要模拟数以万计的样本路径,以便在特定的标准误差中计算出一个公平的期权价值。 在传统的 CPU 架构中使用这样的技术,即便是以最快的计算机运算,往往需要好几个小时来计算复杂的金融衍生商品合约目前的风险值。
随机数生成器
随机数生成器 (RNGs) 是应用于蒙地卡罗模拟中的一个重要部分。因此,我们必须选择一个有效率的 RNG,能够在已知的统计特性下快速的产生随机数样本。
并行化随机数生成器 (RNG)
为了能够利用 GPU 的性能,我们需要使用并行的算法。具体来说,我们需要有一个算法能够并行的产生随机样本,同时又能够保持统计独立性。
L'Ecuyer(MRG32k3a) [1] 的算法被选定为我们的随机数生成器基础。MRG32k3a 已经有相当长的时间应用于科学应用中了。MRG32k3a 的 skip-ahead 功能尤其适合于并行的扩展 [2] 而且可以利用在 GPU 的并行架构中。
透过 MRG32k3a 产生的随机数样本可以轻松的转换至其它常态、指数与伽玛分布的样本。
不同 GPU 的随机数生成器函数
我们提供的产生器是已经编译过的 GPU 核心。调用此函数将在 GPU 的内存缓冲区中填满随机数。若您要自行开发 GPU 的定价程序,可以将缓冲区中的随机数读回。
NAG 开发的 GPU 函数避免来回取用 GPU 内存。这些 CUDA 随机数生成器能让使用者在自己的 CUDA 程序中调用,能够直接地在他们的程序中加入。 随机数可以被使用或丢弃,而不会增加内存的访问时间。这样的方式尤其适合需要高随机数比率的浮点数计算中。
NAG 的 GPU 数值函数目前采用 NVIDIA CUDA 接口。我们计划将支持新兴的 OpenCL 标准。
[1] L'Ecuyer P (1999) Good parameter sets for combined multiple recursive random number generators Operations Research 47:1 159–164
[2] L'Ecuyer P, Simar R, Chen E J and Kelton W D (2002) An object-oriented random-number package with many long streams and substreams Operations Research 50:6 1073–1075
志谢
我们要感谢 Technology Strategy Board (技术战略委员会) 与 Smith Institute (史密斯研究所) 的支持,以及英国工程暨物理研究委员会赞助 Giles 教授的学术研究。
商标声明
NVIDIA 与 CUDA 属于 NVIDIA Corporation 的商标。