C# Parallel.For使用的注意事项
2016-12-6 16:59
阅读:9895
遥感定量反演往往基于二维图像,使用两层for循环,如下。
for(int i=0; i<Hight; i++)
{
for(int j=0; j<width; j++)
{//反演程序
}
}
这实际上只使用了1个线程,现在普通的CPU最低也是四线程,实际浪费了计算资源。
对于非计算机专业人员来说,实现并行计算是很花时间的事,C#中Parallel.for一条命令就解决了该问题。
每个像元的反演程序都是一样的,这种情况下最适合使用并行计算。通常来说,四线程CPU使用Parallel.for可以把处理时间压缩到1/4.
for(int i=0; i<Hight; i++)
{
int j;
Parallel.for(0, width, j =>
{//反演程序
});
}
但是,有些问题需要注意:
1、Parallel.for是自动分配CPU核心,默认使用最大数量,所以,仅在最里面一层使用即可,两层都用是没有什么意义的。
2、潜在危害:原来单线程处理可能有些变量是在这两层for之外定义的,这样有可能四个线程都去改这些“全局变量”,计算结果必然出错。
3、建议每个并行程序之间读取和输出的数据使用的内存没有交叉,最好的办法是使用一组List,List可以不限制数据长度,根据并行任务的下标进行控制。
4、Parallel.for能够发挥作用的场合不多,尽量使用Parallel.invoke
转载本文请联系原作者获取授权,同时请注明本文来自陈兴峰科学网博客。
链接地址:https://wap.sciencenet.cn/blog-474887-1019090.html?mobile=1
收藏
当前推荐数:1
推荐人:
推荐到博客首页
网友评论0 条评论