在英特尔系统上使用OpenMP时,我经常发现设置KMP_AFFINITY=verbose,(other options...)
是非常有用的,因此库会分配我的线程实际绑定到的内核。在尝试使用不同的线程绑定选项时,我发现这很有帮助。目前我正在使用Power8系统,并且想知道GNU和/或IBM OpenMP发行版是否有相当于KMP_AFFINITY=verbose
的版本。换句话说,如果我用g ++或xlC++编译我的OpenMP可执行文件,如何获得有关我的线程放置位置的信息?等效的KMP_AFFINITY =冗长的gnu和ibm openmp库?
回答
GCC OpenMP documentation(libgomp)说,这是目前不可能的:
没有libgomp库例行程序来确定CPU亲和力规范是否有效。作为解决方法,语言特定的库函数(例如C中的
getenv
或Fortran中的GET_ENVIRONMENT_VARIABLE
)可用于查询GOMP_CPU_AFFINITY
环境变量的设置。启动时定义的CPU亲和性在应用程序的运行时期间不能更改或禁用。
您可以尝试使用GOMP_DEBUG
并查看它是否符合您的要求。
'OMP_DISPLAY_ENV = VERBOSE'确实会导致'GOMP_CPU_AFFINITY'被打印出来,但即使我明确设置了OMP_PLACES,它也显示为空('GOMP_CPU_AFFINITY =''')。 'export GOMP_DEBUG = 1'不会向输出添加任何东西。我不确定我是否做错了什么,或者我正在使用一个不太健谈的libgomp版本。 –
它可能会打印设置内部控制变量(ICV)的环境变量的值。如果您设置了'GOMP_CPU_AFFINITY',它可能会打印该值。另一种可能性是为自己编写一个打印它的函数。我已经使用了[sched_getaffinity](https://linux.die.net/man/2/sched_getaffinity)。你可以检查这个[有用的例子](https://github.com/karelzak/util-linux/blob/143ea06851104ffaa9d3fe8de09c721d2364de64/lib/cpuset.c#L150)。也许你甚至可以向libgomp提交一个补丁来做你正在寻找的东西。 –
谢谢。我希望有一个像KMP_AFFINITY一样快速和完整的解决方案,但至少这为我提供了一些工具。 –
使用xlC++,可以将OMP_DISPLAY_ENV环境变量设置为TRUE或VERBOSE以获取此信息。全部细节可在IBM Knowledge Center上找到。
谢谢你的回复。我已经尝试过OMP_DISPLAY_ENV。输出显示环境变量值,包括OMP_PLACES。然而,它似乎并没有告诉我每个线程最终绑定到哪个核心,KMP_AFFINITY的做法,除非我失去了一些东西。我的目标是查看由给定的环境变量组合产生的线程位置,因此了解环境变量本身并不会有帮助。 –
不幸的是,xlC++没有像KMP_AFFINITY = verbose那样方便,但是如果您愿意修改代码并尝试xlC++中的未公开功能,则会有一个函数_xlsmp_thread_binding(),它将打印出CPU亲和性调用线程。由于它没有官方支持,它可能不适合你,但它可能值得一试。 – trudeaun
谢谢,我会尝试。 –
- 1. 用于Java的GNU Readline等效项
- 2. TO_CHAR等效在IBM DB2 V9.1
- 3. 等效于IBM MQSeries中的org.hornetq.api.core.client.ClientMessage.setBodyInputStream
- 4. 关于OpenMP与GNU gcc
- 5. 如何避免冗余和冗长的if-else结构?
- 6. Scalas太冗长
- 7. 为冗长
- 8. 有效的,和非冗余PHP代码
- 9. 分手冗长的语句
- 10. 冗长的读/写位
- 11. 冗长复杂的URI
- 12. jQuery Accordion冗长的内容
- 13. 是否有更有效或有效的方法来编码冗长的文本?
- 14. WPF冗长验证方案
- 15. 数据库冗余与代码效率
- 16. MySQL的设计:冗长的表格
- 17. 等效于Java的C++库?
- 18. openMP的并行化效率
- 19. IBM AIX中objdump的等效命令是什么
- 20. 为档案添加新的冗长
- 21. IBM Informix数据库中INT8类型的RFX等效数据类型
- 22. 用于Java的巨大冗长的类库
- 23. 使用OpenMP和C++的算法库
- 24. 等效于GNU LD的Solaris链接器LD --export-dynamic标志
- 25. GNU make的便携式等效模式规则
- 26. 运行mysqldump的是缓慢而冗长
- 27. QtJambi冗长,特别QtDynamicMetaObjectPrivate
- 28. 减少Linq加入的冗长?
- 29. OpenMP库规范
- 30. 自由职业者网站的数据库模式的效率和冗余?
Libgomp不支持对诸如Windows等目标进行关联。对于像Linux这样的目标,英特尔openmp支持gcc openmp调用,这将是一种完成你所要求的方法。 – tim18