回 帖 发 新 帖 刷新版面

主题:Openmp子程序问题

各位大侠,最近本人在自学openmp,想把现在的串行程序改成并行的,在改的过程中发现这种问题:

我现在的程序主要由几个大的循环块组成,但由于程序复杂,每个循环中都会调用多个子函数。我现在用parallel do将各循环并行,在试验的过程中发现Openmp默认子程序中各变量为共享的,不管是在module中定义的全局变量还是局部变量,这样可能会造成各个线程间本来应该private的量变成了shared。


我在几个简单的循环中试着不使用子程序,而将子程序的功能挪到主程序中可以避开这个问题,但是几个主要的循环中调用的子程序比较复杂,全部改到主程序中不现实,不知道各位大侠是否遇到这种问题,有什么高招请不吝赐教,万分感谢!!!

回复列表 (共2个回复)

沙发

我也遇到了,不知你是怎么解决的,咱们可以切磋一下,QQ190961506

板凳

Openmp的默认是有规定的. 不过它本身建议不要用默认.
看楼主的描述, 既然把子程序的东西移到主程序能避免问题, 那应该在子程序里面也能解决这个问题,可能就是需要正确指定那些变量是私有和公有的问题吧.

我来回复

您尚未登录,请登录后再回复。点此登录或注册