GPU并行计算应用于场外衍生品定价的探索实践
编者按:为深入贯彻落实中央金融工作会议精神和《国务院关于加强监管防范风险推动资本市场高质量发展的若干意见》,扎实推进证券行业高质量发展,中证报价投教基地推出“防风险 促发展”专题,分享场外衍生品在强化证券行业风险防控能力,做好五篇大文章,为经济社会发展提供高质量服务方面的探索与实践成果。
作者:林小冲,上期资本管理有限公司风险管理部
摘要
随着人工智能技术的飞速发展,GPU(Graphics Processing Unit,图形处理器)并行计算技术日益受到关注,并在金融领域展现出巨大的应用潜力。国内部分金融机构已引入GPU并行计算,以提升场外衍生品业务的管理效率。本文基于蒙特卡洛模拟方法,使用Python和C++构建多个测试方案,评估了该技术用于加速场外衍生品定价的可行性。蒙特卡洛模拟具有计算规模大、耗时长等特点,是检验GPU并行计算实际效果的理想场景。本文一方面对比了GPU与CPU的计算效率差异,另一方面还探讨了不同GPU并行计算框架的实现路径与效果差异。此外,本文附件提供了CUDA(Compute Unified Device Architecture,统一计算设备架构)开发环境搭建方法、测试方案代码以及常用的优化思路,旨在为金融机构提供切实可行的技术参考,助力场外衍生品行业深入挖掘GPU并行计算技术的应用价值。
概述
GPU是一种用于处理图形和图像的硬件设备,其核心架构采用大规模并行计算单元设计,可同时调度大量线程执行像素计算任务。基于这一架构优势,GPU并行计算技术得以快速发展,其核心原理是将计算任务拆分为多个并行子任务,通过GPU的众核架构实现线程级并行加速,特别适用于高并行度的计算场景。现代GPU通常包含几千或几万个计算核心,而传统的CPU通常只有几个到十几个核心,不同的架构设计使得GPU在并行计算方面具有巨大优势。
在场外衍生品业务中,计算需求遍布于交易及风险管理流程,包括成交报价搜索、交易台实时对冲、盘后交易结算、压力测试分析以及保证金计算等场景。同时,不同定价参数或计算规则对上述业务的影响也需要纳入考量,这进一步加剧了计算的复杂性。面对庞大的计算需求,让定价模型运行在CPU的做法逐渐暴露出效率瓶颈:一方面,其计算效率难以满足日益增长的业务需求;另一方面,为了提升计算速度,往往需要部署更多服务器节点,这不仅增加了硬件成本,还加重了运维负担。GPU并行计算为场外衍生品定价提供了创新性解决方案,以蒙特卡洛模拟方法为例,GPU能够在若干毫秒内完成数百万次的路径模拟,能够有效提高业务效率,为实时风险管理创造更多可能性。
随着GPU并行计算技术在金融领域的推广与应用,场外衍生品定价模型的开发范式也迎来重大变革,未来必然有更多金融机构选择以该技术实现场外衍生品定价模型。如果您正在从事衍生品定价与风险计量相关工作,那么这项技术非常值得您深入了解,主要有以下几个理由:第一个理由是,GPU并行计算可以带来突破性的性能提升,即使您只熟悉Python,也可能实现远超越C++多线程的计算速度,这取决于并行方案设计和硬件资源配置;第二个理由是,GPU并行计算的实现并不困难,本文演示了多个框架下实现模型的一般开发方法,可以帮助您快速了解相关规范;第三个理由是,GPU并行计算可以在保证计算效率的同时减少IT资源投入,实现降本增效。
性能测试方案与结果
▍测试方案说明
本文对蒙特卡洛模拟定价方法进行测试,交易结构为香草期权,模拟10^6条路径,每条路径10^4步,单笔交易共需要生成10^10个价格。如果这个定价任务运行在CPU上,一般需要较长时间。测试环境的硬件配置情况见表1。
表1 测试环境硬件配置
部分重要的测试规则如下:
(1)考虑到双精度浮点数运算会显著增加资源消耗,所有测试方案均采用单精度浮点数运算。同时,在方案支持的前提下,开启fast math编译选项以优化浮点运算性能。以上做法会降低计算精度,但能够大幅提升浮点运算速度,适用于对精度要求不高的计算场景。场外衍生品定价通常不属于高精度计算场景,上述做法产生的计算误差一般远低于更换RNG(Random Number Generator,随机数生成器)或随机数种子带来的影响。
(2)蒙特卡洛模拟定价方法需要生成大量标准正态分布随机数,RNG的算法类型对计算时间和路径随机性具有显著影响。本文将在附件1中对该问题进行了更多说明。
(3)GPU在达到性能峰值前需要经历一个“预热”过程,即通过执行一定量的计算任务使硬件达到最佳工作状态。为提高测试结果的准确性和可重复性,本文采用了两种优化措施:首先,在正式计算前执行了专门的预热函数以激活GPU性能;其次,计算多笔交易并取平均耗时,从而降低测量误差和提高结果的稳定性。
本文共设计了7个主要方案,14个扩展方案,限于篇幅,本文省略了主要方案的部分内容和扩展方案的全部内容,完整内容详见附件1。为便于读者成功运行代码,本文在附件2详细介绍了如何在Windows/Linux操作系统上搭建CUDA Python/C++开发环境。
(1)方案1:基于numpy的基准测试
在基准测试中,使用Python的numpy实现向量化操作。由于numpy的底层由C语言实现,其计算速度相对较快,且作为最常见的实现方法,该方案具有较高的公平性和代表性,适合作为性能对比的基准。
(2)方案2:基于numba的CPU计算
numba是一个能够将Python代码(包括numpy代码)编译为高效机器码的库,并运行在CPU上。其实现方式简单,只需在函数上方添加装饰器@jit并设置编译参数即可。由于numba支持CPU多线程计算,本方案将分别测试单线程和多线程两种模式的结果,以全面评估其性能。
(3)方案3:基于cupy的GPU计算
cupy是一个与numpy接口高度兼容的库,提供了与numpy相似的数组操作API,但其计算在GPU上执行。对于熟悉numpy的开发者而言,cupy的学习成本较低,能够快速上手并实现GPU并行计算。对于以往采用numpy编写的定价模型,使用cupy能够更快完成模型转换。
(4)方案4:基于numba cuda的GPU计算
numba不仅支持CPU加速,还提供了将Python函数编译为CUDA核函数并在GPU上执行的能力,相关功能集成在numba cuda。numba cuda提供了便捷的内存管理、数据传输等功能,极大地简化了在Python中进行GPU编程的复杂度。最重要的是,使用numba cuda可以解决矩阵方法导致代码可读性下降的问题,代码风格可以还原为原生Python语言风格。
(5)方案5:基于C++的CPU单线程计算
尽管numpy的底层由C语言实现,但其性能可能与直接使用C/C++编写的代码存在差异。为验证这一点,本方案直接采用C++实现。
(6)方案6:基于C++的CPU多线程的计算
本方案基于方案5进行改进,根据CPU的最大线程数设置线程数量,并将蒙特卡洛模拟的路径数量均匀分配到各个线程上,以充分利用CPU的多线程处理能力。
(7)方案7:基于CUDA C++的GPU计算
本方案主要利用cuRAND和CUDA Runtime实现。cuRAND基于GPU加速提供了高性能的随机数生成功能,并支持多种随机数生成算法,以便测试程序的速度差异。CUDA Runtime则用于管理GPU内存分配、数据传输以及并行任务的调度,确保计算任务的高效执行。
▍测试结果
测试结果见表2:
表2 测试环境硬件配置
注:加速倍数=基准测试的平均单笔计算耗时/目标方案平均单笔计算耗时,计算耗时包括了GPU与CPU之间数据传输时间,下同。
(1)第一组:Python(方案1至方案4)
方案1中,使用numpy进行计算的耗时长达146秒左右,说明测试场景具有较大的计算量。方案2中,numba在未开启CPU多线程的情况下,计算速度没有明显变化,未实现预期中的加速效果。这一现象较大可能性是与numba正态分布随机数的生成效率有关。根据官方文档,numba目前仅支持Box-Muller变换算法生成正态分布随机数。该算法的核心思想是将两个均匀分布的随机数转换为一个正态分布的随机数,因此生成随机数的效率仅为均匀分布随机数的一半。相比之下,numpy默认使用的PCG64算法通常比Box-Muller变换算法更快,这可能是numba较难加速蒙特卡洛模拟的原因。在开启numba多线程后,方案2的加速倍数提升至4.46。尽管有所改善,但考虑到实验机CPU为20核24线程,因此这一加速效果仍不够理想。
方案3和方案4的加速倍数达到了250倍左右,展示出GPU强大的并行计算性能。方案3基于cupy实现,cupy可以自动进行数据传输、内存管理和任务调度等工作,降低了用户的使用门槛,更容易实现GPU并行计算。在使用cupy时需要注意:第一,cupy与numpy仍有一些用法上的差异,它们的差异之处可以在cupy官方文档中查看;二是,尽管cupy模仿了numpy的API,使得它们看起来在用法上没有差别,但是用户可能会无意识地写出一些低效代码,把大量时间浪费在内存管理上,使得并行计算变得极度缓慢;三是,使用cupy需要及时释放显存,未及时释放显存的后果包括显存溢出、系统卡顿和程序崩溃。
方案4基于numba cuda实现,该框架更倾向于让用户主动管理底层细节,以获取更好的性能。在方案4的设计中,几乎未采取任何优化手段,从而使代码变得简洁,但也导致了并行效率下降。如果不进行优化,方案4的计算速度一般比方案3更差一些。笔者还使用了其他型号GPU进行了测试,发现更多情况下是方案3优于方案4较多。方案4有较大的改进空间,numba cuda提供了比cupy更高的灵活性,可以在不引入矩阵的情况下,结合良好的并行方案实现更快的计算速度。扩展方案中有许多优化策略是基于numba cuda实现的,包括循环展开、合并访问、共享内存、常量内存等,可以使方案4的计算速度大幅提升。如果定价方法不要求使用矩阵运算,笔者认为可以考虑使用numba cuda编写模型,代码的易读性和可维护性都是比较高的。
(2)第二组:C++(方案5至方案7)
C++是编译型语言,代码直接编译为机器码,运行时无需额外的解释或中间层,相比于Python能够更准确地反映CPU与GPU之间的计算效率差异。从组内对比来看,方案6的速度是方案5的13.85倍(反映CPU多线程加速效果),方案7的速度是方案5的6448.80倍(反映GPU并行计算加速效果),表明测试环境下的GPU的计算性能相当于465个CPU的性能之和。在价格方面,测试所用的GPU的市场零售价大约是CPU的7.7倍,电子产品价格容易受到市场供需、技术迭代等因素的影响,该数据仅用于成本对比,不构成购买建议。这一结果表明,GPU并行计算不仅能够提高场外衍生品定价效率,还可以显著降低经济成本,尤其是在大规模计算场景下,其性价比优势更为突出。
(3)对比CUDA Python与CUDA C++
以方案3和4为代表的CUDA Python实现了上百倍的加速效果,性能表现十分优异。进一步与方案6对比,可以发现,C++多线程计算仅仅实现了36.53倍的加速效果,其计算速度也远低于CUDA Python。因此,即使用户只熟悉Python,也可以写出比C++多线程更快的代码,不一定要挑战C++陡峭的学习曲线。
在方案7中,CUDA C++的优化效果更为显著,加速倍数达到了17009.60。这种性能优化水平不仅能够显著降低公司的服务器成本,还能更好地满足场外衍生品业务对高性能计算的需求。CUDA C++可以更直接控制底层计算行为,往往不需要实施太多优化策略就能获得优异的计算性能,一些优化策略在CUDA Python中可能效果卓越,但在CUDA C++中可能变得效果甚微。
与CUDA C++比较起来,目前CUDA Python实现的加速效果仍不够理想。整体上,比较重要的原因是,CUDA Python的设计目标是简化GPU编程,API设计更注重易用性和兼容性,尽可能降低开发门槛,但也削弱了对底层行为的掌控力。值得期待的是,NVIDIA官方近期透露未来将会原生支持Python,这也意味着CUDA Python的生态将会得到进一步完善,计算性能也会进一步提高。
GPU应用于场外衍生品定价的实践经验
▍GPU并行计算性能与硬件资源的关系
表3中列出了不同NVIDIA显卡型号对应的加速倍数,测试方案均为方案7(基于CUDA C++的GPU计算)。从表3的结果可以看出,加速倍数与CUDA核心数量大致呈线性增长关系。需要注意的是,随着架构的演变,CUDA核心的定义也在不断变化,较难单纯通过CUDA核心数量来跨代际比较显卡性能。一般来说,GPU的并行计算能力主要与CUDA核心数量(或流处理器数量)、内存带宽和容量、核心频率、缓存结构、架构设计等因素有关。
表3 不同NVIDIA显卡型号下的测试
注:加速倍数以本文的方案1为基准。
从表3能看出,加速倍数与显存容量之间未表现出明显的相关性。在本文的测试中,方案7的最大显存占用为若干兆,远低于实验机24GB的显存上限。场外衍生品定价模型通常对显存的需求较低。更准确地说,如果GPU在同一时刻仅对单笔交易进行定价,未采用特殊的内存管理策略,同时也避免了将所有价格路径全部保存的低效做法,那么显存占用通常是很难达到上限的。当然,有些优化策略要求一次性向GPU拷贝大量交易数据,这就会提高对GPU显存容量的需求。
显存容量在某些高价值应用场景(如深度学习、3A游戏等)中具有重要作用,但它对衍生品定价的加速效果不是直接产生的。为了提高硬件资源的性价比,在采购显卡之前,应该考虑并行计算方案是否对显存容量有特殊要求,以及是否可以通过优化内存管理来改善,再决定是否要购买显存更大的专业级显卡。以NVIDIA专业级显卡A100(2020年旗舰款)为例,其CUDA核心数量为6912个,最低显存配置为40G。笔者基于方案7在该型号显卡上进行测试,结果显示加速倍数为7789倍,预计是消费级显卡RTX 4070 SUPER可以达到的效果,但目前前者的价格至少是后者的10倍以上。虽然消费级显卡的显存容量较小,但性价比相对较高,一般可以作为场外衍生品定价的首选。
▍计算规模显著影响GPU加速效果
对于计算规模较小的场外衍生品结构,GPU加速效果一般会降低。主要原因如下:一是,GPU计算通常需要在CPU与GPU之间进行数据传输,这一过程会产生固定的开销(Overhead)。对于小规模任务,数据传输时间可能占据总计算时间的较大比例;二是,GPU的架构设计更擅长处理大规模并行计算任务,其性能优势主要体现在高吞吐量计算场景。对于单个计算任务而言,由于GPU核心频率通常低于CPU,其串行计算性能反而可能不及CPU;三是,GPU的全局内存访问延迟较高,在小规模计算中,这一特性可能进一步降低计算效率。
为了进一步说明问题,本文通过一个实例进行分析。在前文测试场景的基础上,考虑到香草期权是简单结构,可能不需要过多的路径条数和步数,因此下面把每条路径的步数分别调整为500步和2000步,并测试不同路径条数下的性能表现,结果见表4和表5,可以得出以下结论:
(1)在路径条数相同情况下,单条路径的步数越多,GPU加速倍数越高;
(2)GPU加速倍数随着路径条数的增加而不断提升,但是当路径条数达到一定数量时,GPU的性能瓶颈开始显现,加速倍数趋于稳定。
表4 不同NVIDIA显卡型号下的测试
表5 不同NVIDIA显卡型号下的测试
GPU与CPU的性能比较类似于火车与汽车的关系:火车用于长途运输大量货物时效率很高,而汽车更适合短途运输少量货物。在场外衍生品定价中,一个期权模型适合CPU还是GPU来计算是不确定的。例如,雪球结构可能更适合GPU计算,而香草期权解析式更适合CPU计算。再比如,如果要求蒙卡路径数量较多,GPU并行计算可能更合适,反之则CPU多线程计算可能更合适。
一般来说,构建CPU与GPU结合的定价引擎是更优的选择,通过设计合理的调度方式,充分发挥CPU在小规模计算和GPU在大规模并行计算中的各自优势,可以显著提升整体计算效率。实际上,GPU计算和CPU计算是两个可以同时进行的操作,这也意味着,在同一时间,服务器可以使用GPU和CPU两大资源处理定价请求,从而减少资源浪费。例如,当服务器接收到一批定价请求后,可以把复杂结构的定价任务交给GPU,把简单结构的定价任务交给CPU,二者同时处理各自擅长的任务。这种混合架构不仅能够应对不同规模的计算需求,还能在成本和性能之间取得更好的平衡。
▍复杂衍生品结构可能更难提升并行效率
在衍生品定价模型中,复杂的收益结构往往需要引入大量条件判断来区分不同的收益情形。这种处理方式虽然逻辑清晰,但在CUDA中会面临“线程束分化”(Warp Divergence)这一性能瓶颈,可能导致GPU的并行效率下降。所谓“线程束”(Warp),它是GPU并行计算的基本执行单元,也是硬件的实际调度单位,一个线程束通常包含32个线程。CUDA实现的是一种被称为是“单指令多进程”(SIMT,Single Instruction Multiple Threads)的并行计算模型,它要求同一个线程束中的所有线程在每个时钟周期必须执行相同指令。
以最简单的“if-else”条件分支为例,“单指令多线程”要求GPU按照以下步骤进行逻辑处理:首先,GPU会执行满足if条件的线程,而不满足条件的线程会被暂时屏蔽;之后,GPU会切换至else分支,执行之前被暂时屏蔽的线程,而已执行if分支的线程会被屏蔽。从上述步骤可以看出,即使某个线程不需要执行某个分支,它仍然需要等待其他线程完成该分支后才能继续工作。在最坏的情况下,只有一个线程需要执行某个分支,同一个线程束下的其他线程都必须等待它完成,从而导致并行效率大幅下降。
某些衍生品结构包含提前终止条款(例如敲出条款),在传统的基于CPU的计算中,路径的提前终止通常会加快计算速度。然而在CUDA中,一旦线程被if条件判定提前结束,就会导致该线程被禁用,从而降低并行效率。为了说明这个问题,本文以普通雪球结构为例,影响计算速度的主要交易要素为“80/103,期限2年,每月一次敲出观察”,分别使用numpy、cupy、numba cuda和CUDA C++进行定价,结果见表6。通过与表4(步数比较接近于本次实验)的对比可以发现,在相同路径条数下,普通雪球的加速倍数明显是更低的。例如,在50万条路径的情形中,CUDA C++对香草期权的加速倍数为1862,而CUDA C++对普通雪球结构的加速倍数仅为1069。这是“线程束分化”导致的结果——在普通雪球结构成交后不久,较多路径因敲出而提前终止,线程闲置导致了并行效率的损失。
表6 普通雪球结构的加速效果
注:(1)括号内为加速倍数;(2)附件提供了表6中4个方案的普通雪球结构代码,代码仅供学习交流,不构成任何建议;(3)当蒙卡路径数较多时,numba cuda实现的加速效果低于cupy,这是因为出于技术限制原因,numba cuda的GPU随机数生成器并未基于cuRAND实现,而是采用了xoroshiro128+算法。根据官方文档提示,这种算法更适合进行小规模并行计算,因此numba cuda更适合处理随机数生成较少的情况。
还有一种能让CUDA表现得很差的情况:当雪球结构的挂钩标的价格高于敲出价格较多,且估值日期临近下一个敲出观察日时,蒙卡路径中一般仍存在少量路径未敲出,需要继续模拟计算至到期日。如果是在CPU进行计算,大量蒙卡路径提前敲出可以大大缩短计算时间,但在CUDA中,大多数线程会被闲置,等待极少数的线程完成完整的路径模拟,从而产生巨大的并行效率损失。因此,在CUDA实现的雪球蒙卡定价模型中,一般会观察到一个特别现象,就是挂钩标的价格水平很难影响计算耗时。
针对提前敲出问题,笔者做了许多尝试(详见附件1),虽然部分问题得到了解决,但也引入了其他缺陷。根本原因是,“单指令多线程”并行计算模型更适合处理规则且可预测的计算任务,例如图像/视频的像素计算、矩阵运算、物理模拟,而蒙特卡洛模拟中的路径提前终止问题其实是具有高度的不确定性和不规则性,本质上是并行计算模型与使用场景的不匹配导致了硬件资源的浪费。
▍对大量交易进行定价需要更复杂的任务调度策略
单笔交易的计算规模较小,并行计算效率容易触碰上限,但在大量交易背景下,计算规模总量又足够大,这迫使我们需要转变传统的定价思路,不能再局限于单笔交易的计算,而是需要从全局视角考虑如何合理调度所有交易的计算。
一种可行的处理方式是采用流(streams)对多笔交易的定价过程进行调度优化,基本原理如下:在CUDA中许多操作是支持同时进行的,包括CPU上的计算、GPU上的计算、数据从CPU拷贝到GPU、数据从GPU拷贝到CPU等操作。这也意味着,在进行定价计算的同时,还可以进行GPU与CPU之间数据传输操作。如果计算时间大于数据拷贝时间,那么前者会隐藏后者,从而使整体耗时下降。这种技术也称为多流,多流比单流更快的原因是不同流的计算与传输的重叠(Overlap)。
成功的overlap要求核函数的执行时间与数据拷贝时间尽量差不多。如果核函数执行时间过短,核函数计算时间就无法完全隐藏数据拷贝时间;如果核函数执行时间过长,数据拷贝时间即使被完全隐藏,overlap也是不充分利用的。在复杂衍生品定价中,核函数的计算时间一般远高于数据拷贝时间,这也导致overlap的作用往往有限。但这不代表多流优化没有作用,即使没有实现严格的overlap,仍然可能带来加速效果。
图1展示了方案4的性能分析结果(分析工具为Ngisht Systems)。方案4是简单将单笔交易定价的逻辑用于多笔交易,这种定价思路是不合适的,可以从图中看到核函数之间存在较大的时间间隙,这就是并行效率的损失。图2和图3展示了多流优化后的性能分析结果。从图2可以看到,核函数被安排在不同的流之中,核函数之间的间隙变小。从图3的近景还可以发现,不仅核函数之间存在小部分Overlap,数据拷贝与核函数之间也有overlap。在示例代码中,采用的是“多流+共享内存”的优化方式,方案4的计算耗时下降至0.1196秒,加速倍数由250倍上升至1223倍,预计优化效果有30%左右来自多流,70%左右来自共享内存。多流是一种较为常规的任务调度方式,具体还可以分为深度优先(Depth-First)和宽度优先(Breadth-First),后者是大多数情况下更好的选择,附件提供了这两种方式的代码实现,感兴趣的读者可以阅读附件以了解他们的区别。
图1 方案4的性能分析
图2 多流优化性能分析(远景)
图3 多流优化性能分析(近景)
此处再介绍一种“批量计算”任务调度策略,核心思想是把多个简单定价任务合并为复杂定价任务进行批量计算,从而减少线程在简单任务之间的切换开销。本文引入了3种调度策略——“普通模式”“x倍交易模式”与“无休息模式”,限于篇幅,感兴趣的读者可以阅读附件了解上述调度策略的设计思想。本文采用上述策略对方案4进行优化,优化效果见图4。从图4可以发现,方案4的加速倍数从原先的250倍,最高可以提升至1400倍左右。批量计算策略的不足之处在于,其在内存管理上比较激进,可能会产生较多显存占用,需要关注显存的使用情况。另外,这种策略可能更适合Python用户,而在C++中使用这一策略,可能会因为频繁访问全局内存而产生弊大于利的效果,还需要继续深入解决这一问题。
图4 任务调度策略对比
在对大量交易进行定价的场景下,我们可以利用多种优化工具实现加速,这些工具不仅可以单独使用,有时也能相互叠加,从而可能产生更好或更差的效果。衍生品交易过多看似是一个严峻挑战,但实际上它也为优化提供了更多可能性。一般情况下,大量交易的平均计算耗时要低于单笔交易的计算耗时。这也意味着,如果我们能发现更多计算需求并整合到一起,计算效率就能大大提升。例如,使用差分法计算希腊字母时,需要计算多个PV,我们可以将这多个计算过程合并到一起进行任务调度;也可以考虑在代码中加入压力测试、保证金span算法的逻辑,从而进一步扩大计算需求。当然,这只是一个简单的切入视角,实际开发中未必需要如此复杂的设计。总之,我们更要担心计算需求不足,而不是需求过大。
总结
目前,国内已有部分金融机构开始将GPU并行计算技术应用于场外衍生品定价,并取得了不错的成效。该技术能够显著加快场外衍生品的定价速度,尤其是在大规模计算任务中,计算速度最高可以达到传统计算性能的几百倍,甚至是千倍或万倍,从而更好地满足场外衍生品业务的计算需求。GPU并行计算真正的优势是在于解决大规模计算问题,所实现的高性能计算不是指个体计算速度快(实际上恰恰相反)。更准确的说法是,GPU高性能计算实现的是整体计算效率高或者平均计算速度快。在大部分业务场景中,我们通常会更关注整体定价效率,而并非单笔交易的计算快慢,这大大增加了GPU并行计算与场外衍生品业务的契合度。
本文以蒙特卡洛模拟定价方法为例,对多个技术路线的应用方式与性能表现进行了评估与对比,为金融机构探索GPU并行计算技术提供了实践参考。本文在附件中详细介绍了如何搭建CUDA开发环境,旨在帮助读者快速入门CUDA编程。本文提供的所有代码示例仅供学习和参考之用,不构成任何建议。
对于Python用户而言,CUDA Python提供了一种简单而高效的GPU编程方式,能够显著提升计算性能,其定价速度甚至可以超越C++多线程计算,这无疑是其最大亮点。CUDA C++拥有更强大的底层控制力,在处理复杂计算任务时,更能够充分发挥GPU的硬件优势。无论选择何种技术路径,GPU并行计算技术在场外衍生品定价中均展现出巨大的潜力。
然而,GPU并行计算在实际应用中仍面临诸多挑战,包括硬件适配、算法设计、内存优化和任务调度等方面。此外,程序兼容性、多GPU编程、服务器分布式节点的管理以及CUDA定价模型与现有系统架构的融合等问题,都是实际应用中可能遇到的难题。本文的研究尝试为金融机构提供切实可行的技术参考和实践指导,旨在推动更多机构积极探索和应用这一技术,共同促进场外衍生品业务的高效化发展,通过行业协同创新,为场外衍生品市场注入全新活力。
*复制链接,使用PC端浏览器下载附件内容。
https://toujiao.interotc.com.cn/wechat/html/knowledgeCenterDetail.html?newsId=6286&sessionid=-146898014
【免责声明】本文信息仅用于投资者教育之目的,不构成对投资者的任何投资建议,投资者不应当以该等信息取代其独立判断或仅根据该等信息作出决策。本文信息力求准确可靠,但对这些信息的准确性或完整性不作保证,亦不对因使用该等信息而引发或可能引发的损失承担任何责任。
- 免责声明
- 本文所包含的观点仅代表作者个人看法,不代表新火种的观点。在新火种上获取的所有信息均不应被视为投资建议。新火种对本文可能提及或链接的任何项目不表示认可。 交易和投资涉及高风险,读者在采取与本文内容相关的任何行动之前,请务必进行充分的尽职调查。最终的决策应该基于您自己的独立判断。新火种不对因依赖本文观点而产生的任何金钱损失负任何责任。