陈兴峰
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 条评论
确定删除指定的回复吗?
确定删除本博文吗?