您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[华创证券]:【专题报告】并行计算在金融上的应用 - 发现报告
当前位置:首页/其他报告/报告详情/

【专题报告】并行计算在金融上的应用

2024-03-22王小川华创证券A***
【专题报告】并行计算在金融上的应用

金融工程 证券研究报告 专题报告2024年03月22日 【专题报告】 并行计算在金融上的应用 华创证券研究所 证券分析师:�小川 电话:021-20572528 邮箱:wangxiaochuan@hcyjs.com执业编号:S0360517100001 联系人:黄河 邮箱:huanghe@hcyjs.com 相关研究报告 《排序学习选股模型之沪深300精选》 2024-03-21 《AI+HI系列(3):人工智能在选股与ETF轮动上应用》 2024-03-15 《AI+HI系列(2):PatchTST、TSMixer、 ModernTCN时序深度网络构建量价因子》 2024-03-11 《2023年四季报公募基金十大重仓股持仓分析》 2024-01-24 《短期信号回暖,但市场或仍处于底部筑底过程 ——2023年策略总结与2024年初行情预判》 2024-01-09 并行计算 根据菲利(Flynn)的分类体系,系统可分为四种类型:单指令单数据(SISD)、单指令多数据(SIMD)、多指令单数据(MISD)和多指令多数据(MIMD)。随着金融数据量的持续增长以及对分析结果时效性的迫切需求,加速计算任务成为当务之急。充分利用计算机的计算资源,将计算任务从“单指令单数据”向“多指令多数据”转变,已成为一项重要课题。 本篇报告主要介绍了CPU和GPU加速计算的原理;提供了利用python和C语言(CUDA)对常见计算进行加速的案例;比较了影响计算效率的影响因素例如进程数量、数据量大小等。 CPU并行 现代CPU通常集成多个核心,每个核心都可独立执行指令。多核计算利用这些核心同时执行不同任务,从而提高计算性能。Python和C语言都支持多进程和多线程编程,使用户能够充分利用多核并行计算。相对于串行计算,合理利用并行计算可将特定任务的计算时间缩短80%以上。 本报告提供了CPU并行计算案例以及重要参数对计算效率的影响。测试结果表明,多进程计算随着进程数量的增加,存在“快速提高计算效率”、“效率不再提升”和“效率逐渐下降”三个阶段。 GPU并行 从并行计算的视角来看,英伟达于2001年发布的GeForce3代表着GPU并行计算的重要突破。随后推出的一系列计算型显卡推动了GPU并行计算的发展利用GPU的并行计算能力结合CUDA技术,可以实现复杂任务的加速,例如利用GPU加速常见的机器学习框架TensorFlow、PyTorch等。实验结果显示相对于串行计算,利用GPU计算特定任务可使计算时间缩短90%以上。 测试结果表明对大量数据的合并、聚合统计和用户自定义函数GPU的加速效果明显,处理数据量较小的任务直接使用CPU更好。 投资建议: 用户合理选择加速方式可以大幅提高投研效率,提高投资时效性。 风险提示: 本报告中所有统计结果和模型方法均基于历史数据,不代表未来趋势。不同用户硬件差异对加速效果有影响。 投资主题 报告亮点 本报告介绍了如何充分利用计算机的计算资源对计算任务进行加速,提供了 CPU和GPU加速案例,旨在帮助投资者及时完成计算任务。 投资逻辑 更快速的分析结果可以增加投资的时效性。 目录 一、CPU并行计算5 (一)原理5 (二)不同CPU产品比较6 (三)Python实现并行计算7 1、Pandas调用多进程——pandarallel7 2、Python基于进程并行的库——multiprocessing8 3、Python基于线程并行的库——threading9 (四)C语言实现并行计算10 1、C语言实现多进程计算10 2、C语言实现多线程计算11 二、GPU并行计算13 (一)原理13 (二)不同GPU产品比较15 1、计算能力(ComputeCapability)15 2、其他影响因素17 (三)Python利用GPU进行并行计算17 1、pyCUDA17 2、可以支持DaraFrame的加速库——RAPIDS18 3、可以支持numpy的加速库——Numba23 (四)CUDA25 三、案例26 (一)数据聚合操作26 (二)数据分组统计操作28 (三)运行用户自定义函数29 四、总结31 (一)CPU和GPU并行计算的适用场景和选购方法31 (二)Python常用加速程序31 �、风险提示32 图表目录 图表1CPU的内部构成5 图表2多进程和多线程比较6 图表3酷睿系列产品性能比较6 图表4Pandas原生API和并行API7 图表5进程数量与计算耗时8 图表6多进程下的打开的python程序9 图表7CPU和GPU的架构比较13 图表8SM结构14 图表9不同产品的计算能力15 图表10不同计算能力GPU的差异16 图表11GPU计算步骤17 图表12GPU块结构18 图表13GPU对Pandas的加速效果19 图表14CUDAToolkit20 图表15查看显卡驱动和CUDA版本20 图表16显卡算力查询21 图表17英伟达官网的GPU算力表21 图表18window应用商店22 图表19不同安装RAPIDS方式对比22 图表20调用GPU加速Pandas的对比23 图表21Numba运行流程23 图表22批处理过程26 图表23GPU内存空间26 图表24测试硬件比较26 图表25CPU和GPU合并数据时的效率比较27 图表26CPU和GPU统计数据时的效率比较29 图表27CPU和GPU运行用户自定义函数时的效率比较30 一、CPU并行计算 (一)原理 CPU(CentralProcessingUnit,中央处理器)逻辑上由三个部分组成,分别是控制单元(下图中CU和中断系统)、运算单元(ArithmeticandLogicUnit,ALU)和存储单元(缓存和寄存器),三部分通过内部总线连接起来。 图表1CPU的内部构成 资料来源:唐朔飞《计算机组成原理》第二版 CPU每取出来并执行一条指令所需的全部时间称为指令周期,也就是CPU完成一条指 令的时间。在大多数情况下,CPU就是按照“取指令-执行指令-再取指令-再执行指令…”这个流程进行的。其对应于CPU主频频率,在同系列的CPU中,主频越高运行速度越快。 CPU的存储单元是CPU中暂时保存数据的地方,保存着待处理或者已经处理好的数据,利用寄存器(cache)和缓存,增加寄存器容量可以减少CPU访问内存的次数,从而提高CPU的运行速度。缓存包括CPU的一级缓存和二级缓存。 以上为单个CPU内核的主要参数,但是对于单个CPU核心而言,同一时刻只能运行一个进程。为了提高计算机的运行效率,CPU逐渐向着单块CPU上集成多个CPU核心和单个核心可以执行多个进程发展。多核CPU指的是将多个CPU核心放在一块CPU上。多线程技术指的是一个CPU核心能够运行多个线程的技术。 CPU的并行主要有两种方式,多进程和多线程。计算机程序并不能单独执行,只有将程序加载到内存,系统分配资源后才能执行。进程指的是系统中正在运行的程序,是系统分配资源的基本单位,在内存中有完备的数据空间和代码空间。 而线程,是进程的一个实体,是CPU调度的基本单位。一个CPU核心在同一个时刻只能运行一个线程。一个进程至少拥有一个线程,也可以拥有多个线程。由于同一个核只能运行一个线程,因此当线程数量超过CPU核数的时候反而会影响计算速度。 多进程适用于,对于资源管理和保护要求高,不限制开销和效率的任务。因为多进程的每个进程互相独立,都会在内存中开辟计算空间,因此子进程崩溃并不会影响主进程的 稳定,但是对内存的占用比较高。多进程的编程和调试相对于多线程也更加简单。对于有全局锁的编程语言,只能使用多进程。 多线程适用于,需要频繁创建和销毁的任务场景,例如Web服务器连接、爬虫等。多线程占用内存少、切换简单、速度很快。但多线程中,子线程报错会影响全部线程。线程之间同步复杂,例如不同线程执行任务快慢不同、某些变量不能同时被两个线程修改。 图表2多进程和多线程比较 对比维度 多进程 多线程 总结 c语言是否支持 支持 支持 相似 python是否支持 支持 不支持 多进程占优 编程难易程度 简单 复杂 多进程占优 可靠性 进程之间不会互相影响 子线程报错影响全部 多进程占优 扩展性 扩展简单,增加CPU即可 扩展复杂 多进程占优 内存占用 占用多 占用少 多线程占优 创建销毁难易程度 难 易 多线程占优 资料来源:华创证券整理 (二)不同CPU产品比较 上一节中,我们介绍了影响CPU性能的核心因素是频率和核数。本节我们列举了两块常见的CPU产品,以产品性能参数具体解释其对计算效率的影响。 型号 Intel®Core™i9-12900Processor Intel®Core™i9-13900Processor 名称 第12代智能英特尔®酷睿™i9处理器 第13代英特尔®酷睿™i9处理器 内核数 16 24 Performance-core(性能核)数 8 8 Efficient-core(能效核)数 8 16 线程数 24 32 最大睿频频率 5.10GHz 5.60GHz 缓存 30MBIntel®SmartCache 36MBIntel®SmartCache 以英特尔系列产品为例:图表3酷睿系列产品性能比较 资料来源:华创证券整理 对于以酷睿i9为例,其性能核可以同时运行两个线程,而效能核只能运行一个线程,因此13代i9总共可以运行32个线程,12代i9可以运行24个线程。13代酷睿i9在睿频 (主频)和存续大小上较12代酷睿i9也有一定提高。高频率意味着处理器能够更快地执行单个任务,而多核心设计则使其能够同时处理多个任务或多线程任务,从而提高整体计算效率。 在选购CPU时,商家通常都会在显著位置标注上述核心指标。从品牌来看,英特尔系列 产品和AMD系列产品是目前主流产品,在同等价位下,两者性能差异较小。需要注意的是会有部分机器学习的库依赖CPU型号。 此外还有另一种针对服务器类型的CPU,例如英特尔至强(Xeon)系列。这类CPU侧重于性能稳定、支持多路互联等等。在相同的性能下,服务器CPU价格通常高于普通CPU。 (三)Python实现并行计算 1、Pandas调用多进程——pandarallel Pandas是python中数据分析常用的一个库,pandarallel对于pandas常见的AP(IApplication PandasAPI 并行PandasAPI df.apply(func) df.parallel_apply(func) df.applymap(func) df.parallel_applymap(func) df.groupby(args).apply(func) df.groupby(args).parallel_apply(func) df.groupby(args1).col_name.rolling(args2).apply(func) df.groupby(args1).col_name.rolling(args2).parallel_apply(func) df.groupby(args1).col_name.expanding(args2).apply(func) df.groupby(args1).col_name.expanding(args2).parallel_apply(func) series.map(func) series.parallel_map(func) series.apply(func) series.parallel_apply(func) series.rolling(args).apply(func) series.rolling(args).parallel_apply(func) ProgrammingInterface)都有比较好的支持。目前pandarallel支持的pandasAPI有:图表4P