chenxingfeng的个人博客分享 http://blog.sciencenet.cn/u/chenxingfeng

博文

C# Parallel.For使用的注意事项

已有 9367 次阅读 2016-12-6 16:59 |个人分类:软件开发|系统分类:科研笔记

遥感定量反演往往基于二维图像,使用两层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://blog.sciencenet.cn/blog-474887-1019090.html

上一篇:解决:C# HttpWebResponse 远程服务器返回错误(405) 不允许的方
下一篇:太阳辐射光谱和大气透过
收藏 IP: 218.241.251.*| 热度|

1 徐令予

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-19 23:20

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部