前端时间因为要做个大数据量分析,所以用C#写了个脚本跑,不过由于算法复杂度问题,初步估计需要40小时才能跑完。为了加快运算,我一开始想到了 并行计算,利用MPICH或其他类似的分布式计算框架开发,不过都比较麻烦。正巧微软新出来的并行库进入了我的视线,于是做了一次简单的尝试。

并行库全称是Microsoft Parallel Extensions,此库已经计划作为framework 4.0的一部分来发布。不过现在已经有针对framework 3.5平台的CTP版本,让开发人员尝个鲜,大家可以通过以下这个链接进行下载:

http://www.microsoft.com/downloads/details.aspx?FamilyId=348F73FD-593D-4B3C-B055-694C50D2B0F3&displaylang=en

此版本是第二版CTP,经过了一定的扩展和补充,总结下来此库主要包含了三大块:

  • TPL - Task Parallel Library 并行线程库
  • PLINQ - Parallel Linq 并行LINQ
  • CDS - Coordination Data Structures 并行计算中的各种信号量,用于线程同步,协作等

本文我们先着重讲述一下TPL的使用,并会给出一些性能对比数据。

通常我们线性的去执行一个循环,是这样写的:

Code
for (int i = 0; i < N; i++) { results[i] = Compute(i); }

在保证以上每个i的计算不存在依赖性的前提下,我们可以通过并行库很方便的改写成:

Code
using System.Threading; //安装完并行库后,你可以使用System.Threading.Parallel类了

Parallel.For(0, N, delegate(int i) { results[i] = Compute(i); });

可以发现,并行库可以很方便将我们的单线程程序改写成多线程并行的结构。

那让我们来做个实验:假设我们构造一个执行时间为100ms的Compute函数,并设N=100

Code
static void compute(int i)
{
Stopwatch watch = new Stopwatch();
watch.Start();
while (true)
{
if (watch.ElapsedMilliseconds >= 100)
{
watch.Stop();
break;
}
}
}

我在一台双核的机器上的运行结果如下:

可以看到并行运行的速度差不多是单线程的两倍,而266ms则是线程切换调度时的耗费。

平均每个核心处理调度的耗费是133ms

如果在8核的机器上,运行结果如下:

理论上没有线程调度耗费的情况下是10000/8 =1250ms,则8线程并行时的线程调度耗费是470ms

平均每个核心处理调度的耗费是59ms

所以在并行计算中的损耗(调度耗费)是可控的,无需我们担心。

并行库还是给我们带来很多令人振奋的东西的,不过用下来还是感觉有许多需要改进的地方。例如现在还不能方便对线程数的使用进行调节,即:如果用了Parallel.For,他会占满你所有的cpu来进行运算,如果需要设置线程数,TPL确实也提供了。

Code
public static void For(
int fromInclusive,
int toExclusive,
int step,
Func threadLocalInit,
Action> body,
Action threadLocalFinally,
TaskManager manager,
TaskCreationOptions options
)

其中TaskManger可以在初始化的时候利用Policy来设定最小线程数与理想线程数等等,但用起来很麻烦,如果这块能简化一下就好了,就像PLINQ提供了As函数,可以方便的设定线程数。

另外虽说是并行的,但归根结底还是在一台机器上跑,如果想用多台机器跑程序,这个就要指望Azure了,不过TPL确实可以帮助我们在大多数情况下充分利用强大的多核并行处理能力来处理数据,是个非常不错的东东。

文章转载自:http://it.dianping.com/microsoft_parallel_extensions_tutorial_tpl.htm

测试程序下载:http://it.dianping.com/microsoft_parallel_extensions_tutorial_tpl.htm

转载于:https://www.cnblogs.com/taleng2000/archive/2008/12/11/1352706.html

微软并行库初体验之TPL相关推荐

  1. python--爬虫入门(七)urllib库初体验以及中文编码问题的探讨

    python系列均基于python3.4环境 ---------@_@? --------------------------------------------------------------- ...

  2. QuantLIb C++金融工程库初体验

    QuantLib是一个有名的金融计算的C++库,能方便地用于计算许多金融模型和公式,包括简单的折现.年金.VAR甚至BS期权定价等. 本文对quantlib做了一个简单的使用初体验 源码下载 quan ...

  3. Google APIs .net 客户端库初体验

    今天看到google api .net库的发布这条消息, 初步看了一下相关的内容,这个库对.net程序员和google服务的交互很是方便. 谷歌已经以开源形式发布了.NET APIs Client L ...

  4. 零基础学习pythonrequests_requests库初体验

    和urllib库相比,requests库更加深得人心,它不仅能够重复地读取返回的数据,而且还能自动确定响应内容的编码.为了能让大家直观地看到这些变化,接下来,分别使用urllib库和requests库 ...

  5. python图形化编程wx_慢步python,图形用户界面库:wxPython库 初体验,先建一个窗体...

    慢步写文的初衷是,帮助python爱好者学习python编程.(因为慢步也知道学习不易) 今天慢步要建立一个程序的窗体.什么是窗体?慢步水平及时间有限,直接上图吧. 就是图中的"简单界面&q ...

  6. VLFeat开源库初体验

    由于一门课的课后大作业发现了vlfeat这个库,也遇到了一点小问题,所以记录下来. 1.下载VLFeat库文件 直接官网就有 http://www.vlfeat.org/download/vlfeat ...

  7. java js highcharts_Highcharts.js -纯javasctipt图表库初体验

    一.highcharts简介以及引入 highcharts作为免费提供给个人学习.个人网站和非商业用途使用的前端图表演示插件的确使用起来十分方便和轻便.在我最近完成一个需求的时候用到了它, 它的兼容性 ...

  8. 微软New Bing初体验:AI时代的搜索引擎(内含体验方法)

  9. 三分钟总览微软任务并行库TPL

    点击上方蓝字进行关注 有小伙伴问我每天忽悠的TPL是什么? ☹️ 这次站位高一点,严肃讲一讲. 引言 俗话说,不想开飞机的程序员不是一名好爸爸:作为微软技术栈的老鸟,一直将代码整洁之道奉为经典, 优秀 ...

最新文章

  1. 一篇文章让你了解区块链技术的发展阶段
  2. Oracle打Patch报错Prerequisite check CheckActiveFilesAndExecutables failed.
  3. 40款用于简洁网页设计的光滑英文字体【下】
  4. STM32移植UCGUI3.90笔记
  5. Android官方开发文档Training系列课程中文版:管理音频播放之音频输出硬件的处理
  6. mysql用一条sql语句删除重复记录_mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句...
  7. 仿微信图片上传,带加号,且超过最大数隐藏
  8. 小学计算机片段教学案例,小学信息技术教学案例分析(张擘)
  9. SPHYSICS流体力学仿真模拟程序的动态链接库编译及C#混合编程方法
  10. flutter-dart语言类型后加问号
  11. 细谈Axios中那些不为人知的秘密!一文读懂Axios
  12. Google浏览器离线安装包下载
  13. html中隐藏溢出怎么写,CSS溢出文字隐藏
  14. xaxis python_在python中绘制xaxis中的多列值
  15. HDU 3507 斜率优化入学习
  16. 黑盒测试和白盒测试定义及区别
  17. ST电机库v5.4.4源代码分析(1): FOC原理(结合ST电机库)
  18. matlab2021a安装包
  19. 【字符串比较函数】strcmp,stricmp,strcmpi区别
  20. 网络安全之认识挖矿木马

热门文章

  1. 网易编程题 游历魔法王国 (Python)
  2. 汽车信息安全脆弱性管理之一:NVD数据库使用
  3. was设置共享库解决jar冲突
  4. Shell编程---------初学者入门
  5. 基于深度学习的三维点云识别
  6. windows系统命令行静默安装Horizon Agent及相关属性说明
  7. 什么是cookies?如何使用cookies?
  8. dokuwiki升级步骤
  9. DM365高低温下偶尔无法启动问题记录:
  10. 计算机毕业设计Java桂林餐饮服务平台(源码+系统+mysql数据库+Lw文档)