主题:openmp问题
不了解openmp,请多指教。
有一个程序,主程序中调用了几个子程序进行计算,师弟在子程序中加了openmp指令使整个程序并行化。我有以下的问题:
只在子程序中加openmp指令的 话是否会导致运行该子程序时开启线程,但该子程序运行结束后这些线程也被结束?由于在计算中每一时间步这一子程序都会调用一次,如果是这样的话在整个程序 的运行过程中多个线程不断被开启、关闭,必然耗费很多cpu时间。我目前的测试结果是在30分钟左右的运行过程中,开启线程(start_thread in intel Vtune Amplifier)占了10分钟左右,这肯定太多了,所以我猜测是以上原因造成的。
另外,在主程序中子程序的调用为
do time = 1,n
call subs()
end do
如果要在主程序中添加openmp指令也应该是在循环外,而不是在call subs()这一句的前后吧?否则又会出现上面的问题?
以上只是我的猜测,还请各位帮忙分析,多谢!