我在程序开始时使用OpenMP进行并行排序。数据加载和排序后,程序将作为守护进程运行,并且不再使用OpenMP。有没有办法关闭由OpenMP创建的空闲线程? omp_set_num_threads()不会影响已为任务创建的空闲线程。有没有办法在GNU OpenMP中结束空闲线程?
回答
理论上,OpenMP在“编译指示”子句的最后有一个隐含的同步。因此,当OpenMP并行工作结束时,所有线程都将被删除。你不需要杀死它们或释放它们:OpenMP自动执行它。
也许“omp_get_num_threads()”告诉你程序的实际配置,而不是活动线程的数量。我的意思是:如果将线程数设置为4,omp会告诉您配置是“4个线程”,但这并不意味着实际上有4个线程正在处理中。
Uhm,no,'omp_get_thread_num'告诉你当前的线程号,而不是当前正在执行的线程的数量,也不是允许的最大线程数。 – Mehrdad 2015-02-09 04:17:28
我不认为它杀死了线程。线程在线程池中创建,以便在需要时再次使用。这减少了在并行区域之间创建和删除线程的常常很大的开销。 – 2015-02-09 07:37:44
已编辑(我想说“omp_get_num_threads”,而不是“thread_num” – 2015-02-09 21:52:46
我不相信有一种方法来触发线程的破坏。现代OpenMP实现倾向于保持池中的线程以加速开始未来的并行部分。
在你的情况下,我会推荐一个两个程序解决方案(一个并行排序和一个守护进程序列)。您如何在它们之间传递数据取决于您。你可以做一些简单的事情,比如把它写到一个文件然后再读一遍。这可能不像听起来那么慢,因为现代Linux发行版可能会将该文件保留在文件缓存中的内存中。
如果您确实想确保它保留在内存中,可以同时启动这两个进程并允许它们共享内存,并在完成后允许第一个并行排序过程退出。
请查阅OpenMP 4中新增的OMP_WAIT_POLICY [https://gcc.gnu.org/onlinedocs/libgomp/OMP_005fWAIT_005fPOLICY.html]。
如果您的OpenMP实施不够近,那么还有像GOMP_SPINCOUNT这样的非可移植替代方案。我记得在OpenMP规范讨论中,至少Intel,IBM,Cray和Oracle已经支持他们自己实现这个功能。
- 1. OpenMP,VTune,空闲线程
- 2. OpenMP(C)空闲线程的状态
- 3. 有没有办法在AnimatedVectorDrawables中侦听动画结束
- 4. 有没有办法检查用户目前是否空闲?
- 5. 有没有办法多线程的SqlDataReader?
- 6. 线程没有结束/超时
- 7. iPhone:有没有办法在视频结束之前退出MPMoviePlayerController?
- 8. 有没有办法在gnu中打印最终消息
- 9. 有没有办法在GNU屏幕中自动分割屏幕?
- 10. 有没有办法在进程结束时对静态成员做些什么?
- 11. 有没有办法知道ExecutorService是否成功结束?
- 12. 有没有办法检查下一个令牌是否结束?
- 13. 有没有办法通过设置开始和结束向量
- 14. 没有空闲子进程连接
- 15. iOS中的空闲线程方法
- 16. 301结束斜线重定向没有结束斜线
- 17. 为什么我的线程在我中断时没有结束?
- 18. 有没有办法让CLLocationManager进入“空闲”状态而不是“停止”?
- 19. 有没有什么办法可以配置jboss在线程执行结束时清除ThreadLocal变量?
- 20. 有没有办法在SQLite中获取表的约束?
- 21. 有没有办法在db2 v7中启用/禁用约束?
- 22. 有没有办法监控AndroidStudio中的线程?
- 23. 有没有办法放弃空捕获?
- 24. 有没有办法检查空目录?
- 25. 有没有办法在Java中使所有正在运行的线程sleep()?
- 26. 有没有办法用Gnu Make命令目标替换\//?
- 27. 有没有办法找到控件的所有者线程?
- 28. 有没有办法冻结ES6 Map?
- 29. 有没有办法在UIWebview
- 30. 有没有办法在Notepad ++
你有一些代码吗?你使用哪种编程语言? – 2015-02-08 22:58:17
为什么这很重要?这如何影响你? – 2015-02-09 07:38:30
这很重要,因为我最终得到了大量的空闲线程。我为系统的每个核心运行我的守护程序的副本。在典型的现代硬件中,它是48个内核,所以我有2300个空闲的OpenMP线程无所事事。我需要OpenMP来加速重启,我很少重新启动所有的实例。这一点也很重要,因为这些线程使用coredumps进行问题分析变得复杂。 – Kostja 2015-02-09 15:35:46