金融工程与并行计算: 第一章 并行计算与金融工程的发展 Part 2

第四节 产品开发对金融计算的要求

金融市场是一个充满随机性的地方,自从BSM模型被提出之后,随机过程被用于各个金融变量之上,不论是汇率、股价、利率、商品价格,甚至信用价差,都是以适当的随机过程,进入到财务模型之中。透过金融市场的均衡条件,我们便会求得这些金融变量的随机微分方程(Stochastic Differential Equation)。这一方法以成为目前金融产品开发时,计算其价格与风险的标准程序。

随机微分方程一般化的求解方式,可以使用测度转换的方法求得。在特定条件下,少数的随机微分方程可以有解析解,如阳春型选择权。但是,就如目前市场上销售的外汇结构产品TargetRedemption Notes,大部分由于偿付条件过于复杂,且是路径相关的条件,因此无法求得简单的解析解。此时我们只有利用蒙地卡罗模拟法配合测度转换的理论,使用大数法则来计算这些产品的价格与风险。

在蒙地卡罗模拟法中,我们进行大量的模拟,每一次的模拟就是一个可能的情境路径(Scenario Path)。实务上,10万条的仿真路径是一般的要求,但这只是计算一个价格。通常我们还需要计算Delta、Gamma与Vega等参数,以做为避险的规划与涉险值的估算。由于没有解析解,因此需要使用差分来求的这些数值。保守估计,一个产品需要计算四个仿真价格,也就是40万条的仿真路径。如果在每条的情境路径上,每天走一步,产品为一年到期,则每一产品我们一共需要产生约1.5亿个模拟随机数(365╳400,000=145,600,000)来执行相关计算。

上述情况在金融计算上并非特例,在一些利率类的结构产品上,情况更为严苛。这是因为在外汇产品上,通常只需要模拟一个汇率因子。而在利率类的结构产品上,可能同时要模拟20个利率因子。至于整体公司部位的风险值计算,那就又是另外一种各加严苛的情况,以现今大型银行的资产组合规模而言,计算能量的要求只有更多了。

然而,多核的硬件结构却是当今金融计算的一个解药。传统个人计算机只有一个计算核心的CPU,因此,同时只有一个程序(Process)在执行。当CPU中的计算核心数目增加后,我们可以使用多线程(Multi-Threads)的方式,增加计算能力。也就是说在一个主程序执行后,我们可以将主程序展开程多条的线程,分别使用每一个计算核去执行各自的工作,最后再合并到主程序来结束。

然而,这样的做法前提是这些展开的线程彼此的工作有一定的独立性,可以各自工作,到最后才需整并合一,否则这样的计算流程变没有办法提升计算效率。对于前述的蒙地卡罗模拟法,就刚好满足此一要求。因为每一次的情境路径仿真,都是各自独立执行的,这可说是王八看绿豆,对上眼了。

然而,即使可以在CPU内增加计算核(Core)的数量,但是目前CPU最多也只有8个计算核(AMD),似乎缓不济急。自然而然,就会想到GPU上大量的计算核心,是否可以成为可用的方案。这里要说明一点,CPU上的核是通用型的,除了数值运算还有逻辑运算,因此无法像GPU上的专用型核,可以制造那么多的核。

NAVIA公司于2007年正式发布其泛用GPU(General Purpose GPU)架构,计算统一装置架构(Computer Unified Device Architecture, CUDA)。在此架构下,程序员可以使用一般的C语言,撰写执行于GPU上的程序,充分利用GPU多核特性的平行运算程序。自此,摩尔定律的计算红利,又可以为金融界所共享。

 

第五节 市场上主流的GPU平行运算架构

目前市场上平行运算的软件开发架构有两大类,一类是以CPU的多核架构为主,另一类则是以GPU的多核架构为主。由于金融计算的高运算量,本文着重在后者的架构。市场上GPU的多核架构亦有两大架构,分别是NVIDIA的CUDA架构,以及由Apple公司提出并得到多家开发商支持,并由KhronosGroup设计的开放计算语言(Open Computing Language, OpenCL)。

CUDA是一个专属于NVIDIA公司的开发架构,因此只支持NVIDIA的GPU显示适配器。由于NVIDIA介入此一领域较早,因此他所提供的工具较为齐全。CUDA所提供的链接库有BLAS、FFT、Random三大类。另外,CUDA亦提供整合于微软开发软件VisualStudio的除错工具,可以在除错模式下观察GPU内变量的变化。另外,除了C语言,CUDA也提供了C++的支持链接库Thrust。整体而言,CUDA的开发资源相当地好。

OpenCL是近来由Khronos所推出的一个异质性计算的开放架构(注六),他可以同时使用CPU与GPU的资源,他也不限于单一公司的硬件架构,因此不论是AMD、NVIDIA的GPU或是Intel、IBM的多核CPU,都可以支持使用于此架构之下。然而,OpenCL在链接库的支持方面,相较于CUDA比较不完整。但是基本的BLAS与FFT程序代码,依然可以由AMD的网站上免费取得。另外,AMD也推出C++语言的支持链接库Bolt。

不论是CUDA或是OpenCL都是以C或C++语言为基础的开发工具,对于已.NET平台为主的微软平台,整合度都不是很理想。幸运的是,网络上都有提供相对应的.NET版的开发工具,ManagedCUDA与OpenCL.NET。这两套工具皆以C#语言封装原来的链接库,可以完整的整合到Windows平台系统。

上述的软件皆是免费的工具,至于付费的商用软件也有很多选择,尤其是CUDA的部分,NVIDA的网站https://developer.nvidia.com/cuda-tools-ecosystem有相当多的信息可供查询。

 

第六节 一个比较范例

相较于CPU,使用GPU做为特定运算的运算中心,其优势是相当明显的。下面作者以一个阳春式选择权作为范例,比较这两种方法的计算速度,以及计算得精准度,由于此种选择权有解析解,因此可以解析解的质为比较的根据。

此选择权的契约条件如下,一年后到期买权,令期初资产价格S0=100,执行价格K=100,波动性σ=30%,融资成本4%,资产收益2%。。令K表执行价格,ST为到期日价格,CT表到期日选择权的的偿付,

使用BSM公式解,可得权利金价格为12.567697。

在实作条件上,我们使用简单的几何布朗运动程序,每天仿真一步,因此一条情境路径需要走365步。每一次的计算模拟262,144条情境路径。

首先,我们以CPU执行单线程的传统程序,作者使用的硬件开发环境为IntelCore i7-3770@3.4GHz,8G RAM,操作系统为Windows 7专业版32位的作业环境,以C#为程序语言,使用Mersenne Twister随机数生成器,编译后执行三次结果如下,

 

计算时间(ms)

权利金

1

8720.4163

12.825382

2

8689.2153

12.825382

3

8798.4354

12.825382

平均

8736.0223

12.825382

 

由于使用相同的随机数种子,因此三次计算的权利金皆相同。三次计算的平均时间为8.7360223秒。

接着,我们使用CUDA架构来测试平行运算的执行效果,测试的GPU为NVIDIAGeforce GT640,3GB RAM,CUDA Driver 6.0/Runtime 5.5。使用C#语言搭配ManagedCUDA做为开发工具,其他环境与前面相同。在随机数生成器方面,使用CUDA内建的CudaRand链接库。此处的计算时间不包含CUDA程序的编译时间。

 

计算时间(ms)

权利金

1

1170.0016

12.859942

2

1180.0016

12.859942

3

1160.0016

12.859942

平均

1170.0016

12.859942

 

由于使用相同的随机数种子,因此三次计算的权利金皆相同。三次计算的平均时间为1.1700016秒。相对计算效率约为7.5倍(8.7360223/1.1700016=7.4666)。

最后,我们使用OpenCL架构来测试平行运算的执行效果,测试的GPU为NVIDIAGeforce GT640,3GB RAM,OpneCL Driver 1.0。使用C#语言搭配OpenCL.Net做为开发工具,其他环境与前面相同。在随机数生成器方面,我们使用Random123随机数生成器。此处的计算时间不包含OpenCL程序的编译时间。

 

计算时间(ms)

权利金

1

620.0008

12.691024

2

620.0009

12.691024

3

620.0009

12.691024

平均

620.0009

12.691024

 

由于使用相同的随机数种子,因此三次计算的权利金皆相同。三次计算的平均时间为0.1433335秒。相对计算效率约为14.1倍(8.7360223/0.6200009=14.0903)。

整理摘要如下,多核运算有明显的效益,相对单核的模拟,多核的模拟误差并不会明显的增加。在OpenCL的模拟中,使用Random123的随机数生成器,甚至可减低模拟误差到1%以内。

 

计算价格

平均时间(s)

误差百分比

效率提升

CPU模拟

12.825382

8.7360223

2.0504%

1X

CUDA模拟

12.859942

1.1700016

2.3254%

7.5X

OpenCL模拟

12.691024

0.6200009

0.9813%

14.1X

  *使用BSM公式解,可得权利金价格为12.567697。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值