资讯
安全
论坛
下载
读书
程序开发
数据库
系统
网络
电子书
微信学院
站长学院
QQ
手机软件
考试
安全
|
web开发
|
软件开发
|
移动开发
|
数据库
|
网络
|
系统
|
网站
|
考试认证
|
其他
|
读书频道
>
网站
>
网页设计
>
Visual C++并行编程实战:多核架构下分工与协作的设计模式
2.1.1 并行版的for循环
12-08-13
叶孤城
收藏
我要投稿
本文所属图书 >
Visual C++并行编程实战:多核架构下分工与协作的设计模式
这本书所介绍的并行模式库(Parallel Patterns Library,PPL)实际上是一个模式化的C++模版库,而且作为Visual Studio 2010开发系统的一部分,它已经完全被内置到了这一版本的C++语言中。这意味着你可以像使...
立即去当当网订购
现在,让我们来看一段标准C++版的for循环代码:
vector<double> results = ...
int workload = ...
size_t n = results.size();
for (size_t i = 0; i < n; ++i)
{
results[i] = DoWork(i, workLoad);
}
接下来,为了体现出多核的性能优势,我们改用parallel_for函数来代替for关键字,并用lambda表达式(lambda expression)注1来替代原来的循环体。
如果你想使用并行循环,不要忘记循环各步骤间需要彼此独立,确保它们之间的通信不以写共享变量的方式来实现。
vector<double> results = ...
int workload = ...
size_t n = results.size();
parallel_for(0u, n,[&results, workLoad](size_t i)
{
results[i] = DoWork(i, workLoad);
});
现在,只要条件允许,parallel_for函数就能利用多核资源来遍历上述代码中的索引区间。
在代码中,形如[captured variables] (args){body}的语句实质上是一个lambda表达式。在继续深入阅读之前,你或许应该去复习一下C++中关于lambda表达式的语法内容。
另外,parallel_for函数还有一系列不同的重载(overload)版本。上述示例中所调用的版本声明如下。
template <typename _Index_type, typename _Function>
void parallel_for(_Index_type _First,
_Index_type _Last,
const _Function& _Func);
在该函数中,前两个参数所表示的是该迭代的边界。第一个参数是循环的下界位;第二个参数则为循环的出界位,即上界位+1;而第三个参数则是一个作用于历次迭代的函数,迭代次数是该函数的参数之一。这意味着该循环的每次迭代操作都会调用这个函数。
关于parallel_for函数的另一个重载,我们将会在2.3节中再介绍。
和串行循环不同的是,parallel_for方法不能保证操作的顺序,即对较大索引值的操作可能排在较小索引值之前。
例子中类似于parallel_for第三参数那样的,形如[captured variables] (args) {body}的表达式,被称为lambda表达式。该表达式实质是一个能够捕获自己所在作用域中变量的函数对象。当然,_Func参数并不一定非得是lambda表达式,它也可以是一个函数指针注2(指向一个在别处声明的函数)。
如果你对lambda表达式的语法还不熟悉,可以参考2.7节中所推荐的文章。相信我,一旦你使用了lambda表达式,就会对它有一种相见恨晚的感觉
点击复制链接 与好友分享!
回本站首页
分享到:
更多
您对本文章有什么意见或着疑问吗?请到
论坛讨论
您的关注和建议是我们前行的参考和动力
上一篇:
1.3 功能
下一篇:
1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
112 |
2.6 总结
112 |
2.5 unordered container无序容器
112 |
2.4 emplace_back减少内存拷贝和移动
112 |
2.3 forward和完美转发
112 |
2.2 move语义
112 |
2.1.2 右值引用优化性能,避免深拷贝
112 |
2.1.1 &&的特性
112 |
2.1 右值引用
3.2.3 Bootstrap栅格系统
3.4.4 自适应显示/隐藏页面内容
3.3.1 固定式布局
2.1.1 下载Bootstrap
3.3.2 流式布局
3.4.6 响应式Bootstrap
3.4.2 设计响应式图片
3.2.4 响应式Bootstrap栅格系统
文章
下载
读书
·
Win2000下关闭无用端口
·
禁止非法用户登录综合设置 [win9x篇]
·
关上可恶的后门——消除NetBIOS隐患
·
网络入侵检测系统
·
潜伏在Windows默认设置中的陷井
·
调制解调器的不安全
·
构建Windows 2000服务器的安全防护林
·
SQL Server 2000的安全配置
·
Windows优化大师注册机源码
·
Aspcode动画教程
·
WIN 2000服务器防止ICMP数据包攻击教程
·
实现网络隐身的简单方法
·
手工进行克隆帐号
·
用W32DASM破解网页合并器的密码
·
注册表操作动画教程
·
冰河陷阱v1.2
·
黑客攻防技术宝典:Web实战篇(第2版)
·
超级网管员——网络安全
·
代码大全(第二版)
·
软件之道:软件开发争议问题剖析
·
CSS插件工具箱
·
CSS入门经典(第3版)
·
C#并行编程高级教程:精通.NET 4 Pa
·
CMMI+敏捷整合开发
关于我们
|
联系我们
|
广告服务
|
投资合作
|
版权申明
|
在线帮助
|
网站地图
|
作品发布
|
Vip技术培训
版权所有:
红黑联盟
--致力于做最好的IT技术学习网站