怎样才能避免openmp反复开启和关闭线程带来的计算时间 消耗? 5
我的主程序是串行的,然后主程序会调用很多的子程序,每个子程序里的循环用的是openmp并行,这样导致反复开启并行线程,使得程序运行很慢,有什么方法可以避免这种情况或者减少...
我的主程序是串行的,然后主程序会调用很多的子程序,每个子程序里的循环用的是openmp并行,这样导致反复开启并行线程,使得程序运行很慢,有什么方法可以避免这种情况或者减少并行运行时间呢?
展开
1个回答
展开全部
OpenMP开启、关闭线程的开销难以减少,提高程序运行效率只能是对程序进行优化。对一个可并行的程序来说,并不是进行了并行化改造其效率就一定会提升,若可并行区域执行时间本身就较短,OpenMP开启、关闭线程的开销很有可能抵消掉进行了并行化改造后的效益。主程序调用了多个子程序,那么这些子程序是否可以进行合并,或者是处理时间较短的子程序是否可以考虑进行串行处理。
另外,加速效果不理想除了可能是并行开销的原因之外,也有可能是并行化代码的问题。OpenMP开启的线程并不能做到处理时间的完全一致,其可能会存在某一个线程处理滞后导致先完成的线程在循环结束处等待的情况,可以使用英特尔® VTune™ 性能分析器(好像可以试用一个月)来看一下OpenMP的加速情况,不同的代码选用循环调度策略(静态、动态、指数、运行时)其加速效果也不一样。
另外,加速效果不理想除了可能是并行开销的原因之外,也有可能是并行化代码的问题。OpenMP开启的线程并不能做到处理时间的完全一致,其可能会存在某一个线程处理滞后导致先完成的线程在循环结束处等待的情况,可以使用英特尔® VTune™ 性能分析器(好像可以试用一个月)来看一下OpenMP的加速情况,不同的代码选用循环调度策略(静态、动态、指数、运行时)其加速效果也不一样。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询