openmp并行运算碰到的问题

gxx2019 2009-07-29 03:17:15
加精
我在做遥感图片处理时发现一个问题,请openmp并行高手帮忙解答
现在假设我有一幅2G的图像,对其进行很复杂的处理,算法是我们经理花几年写的,都被他封装起来,我不可能对算法内部进行并行。我的大致想法是:单核时代假设一次读10M数据到内存处理,现在我有16核的机子,我一次读10*16M的数据到内存,然后在内存中把数据分为16块(160M的数据在内存中是连续的),然后我用openmp的命名开16个线程,每个线程调用封装的算法,同时计算160M的数据,依次为0-10,10-20,20-30......计算之后的内存任然是一整块,然后输出来。但这种思想有很大的局限性:首先只能满足输入内存是多大,输出就只能是多大。假如我算法处理后,1块10M的内存变成5M或20M,我想不到方法该如何处理这种情况,怎么给每个线程重分配内存,openmp好像是没有线程入口函数的。其次,算法函数的局限性,跟函数的返回值有很大的关系,假如函数不是返回原来的内存,返回别的东西,我肯定要按顺序输出来的,我不可能随意输出,这样处理的图像就乱了。最后就是我该如何控制这16个现程处理后的输出呢。现在的并行库有没有实现的方法?

如果我这思想不行,有其他的好的方法吗?

还有一种想法就是输入——处理——输出在同一个核上进行,就是我从一开始就是16核,每核都读数据(互斥读),16核都读完自己的数据,16核再一起处理,然后在输出(互斥)。不知道这种方法在openmp是否可行?我还是找到控制线程的方法。请求高手指点。帮我想个好点的方法
...全文
211 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
print1314 2009-07-31
edddddd
回复
surepretty 2009-07-31
mark~关注openmp
回复
无·法 2009-07-30
帮顶
回复
wm11joy 2009-07-30
对于大的图像,我见过的常用作法是:先将其用压缩,然后用Openmp并行处理
回复
goldfishfly 2009-07-30
1111111
回复
发动态
发帖子
英特尔边缘计算技术
创建于2007-08-27

437

社区成员

英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
申请成为版主
社区公告
暂无公告