关于并行计算的一些试用

最近尝试了几种并行计算的方法。

1、openMP。这应该是gnu本身自带的一个插件,编译选项只需要加上 -fomp就可以了。使用时在for循环或者需要并行的语句前加上预处理选项。#pragma omp parallel等等,有若干种,整体思路就是把一些无关的函数并行计算。注意,一定是无关的,如果有先后关系的,可能计算结果就有问题了。这个用起来很简单,尤其是for循环等,加速很明显,可以加速到cpu核数倍。

2、TBB。线程构建模块。这个是intel的库,可以让任务并行。不过需要修改代码,从task等扩展出来,以便被TBB管理调用。当然,TBB还有一些存储管理的功能,亲测也可以提速20%以上。但是需要改类的代码,改动不大。加速效果如何没有具体实验。

3、MPI。或MPICH。看官宣,这个已经被用在太湖之光的超算上了。也是个开源库,编译安装都很简单。唯一对已有代码不友好的就是需要把原线程的数据发送到另外的线程,以便加速计算。计算完之后,还要把结果拷贝回来。不过拷贝函数之类的,MPI有现成的函数可以用,用法也还算简单。不过就试用来看,线程和计算函数属于强绑定关系,如果想动态调整函数与线程的绑定关系,很难。就是说如果计算量不是很大的话很容易浪费计算资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值