||
遥感定量反演往往基于二维图像,使用两层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
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-19 23:38
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社