C++/Python/Matlab执行效率分析

实验结果显示,Python在使用向量处理后,执行效率甚至超过C++ O2优化后的效率,与Matlab类似。对于场内期权的MC定价,Python和Matlab在向量化代码结构下表现出高效率,而C++的并行优化并未超越。结论是,适当优化后的Python和Matlab在特定计算任务中效率出众。
摘要由CSDN通过智能技术生成

以前一直觉得C++效率最高,速度最快,但是今天做的一个实验结果大大出乎我的意料—Python使用向量处理效率一点都不慢,甚至高于C++在O2优化后的效率。 Matlab效率更高。 这为以后选取语言提供了一个很好的参考。

问题起源与对场内期权MC定价时,一步到最后与按天到最后在计算精度上有无差别,镜像问题是FDM定价一步到最后,与按天到最后计算精度上有无差别。我的观点显然是前者无差,后者影响显著。无奈,领导观点竟然相反,为了说明问题,讲理论肯定是不行了,只能用数据说话。为了验证MC的结果,有了本实验。

实验初期,先采用Python写的,因为简单,就用了最简单低级的代码思路。写完后运行发现速度还可以(轨道数目较少,1k条)。于是萌生了与C++比较下效率的想法。于是速度照搬改成C++版本。为了能体现出差距,将轨道数目都改成10w条,结果发现,在简单代码结构下,python不是一般的慢! 考虑到当初Matlab在矩阵处理时体现的优势,于是想python应该也有同样的特点,于是将python代码改成向量化的。这一改,就发现了有趣的东西,在向量化代码结构下,python执行效率极高,甚至高过C++在O2优化下的效率

废话不多说,先列出结果数据。表中数据单位为秒。
这里写图片描述

图中列出了几个相关实验:
- C++原始代码及经过O2优化后的代码。
- C++通过OMP并行后的代码及经过O2优化过的代码
- Python 串行代码及向量化代码
- Matlab 串行及向量化代码

图中给出的结果是让人惊奇的:Python经过向量化后代码效率极大的提高,这跟Matlab一样,两者都要好于经过O2优化过的C++并行代码Matlab与Python对for循环效率极低,使用时要慎重!

附件一 C++ omp并行与非并行代码(注释掉pragma那行即可)

#include <random>
#include <cmath>
#include <ctime>
#include <omp.h>
using namespace std;

default_random_engine eng(time(NULL));
normal_distribution<double> norm(0,1);

double payoff(double &s, double &k)
{
    return fmax(s-k,0.);
}

double pnode(double &s0, double& u, double& q, double& vol, double& t)
{
    return s0*exp((u-q-0.5*vol*vol)*t + sqrt(t)*vol*norm(eng));
}

double mc(int& npath, const int& msteps)
{
    
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值