在英特尔系统上使用OpenMP时,我经常发现设置KMP_AFFINITY=verbose,(other options...)
很有用,因此库会吐出我的线程实际绑定到的核心。在尝试使用不同的线程绑定选项时,我觉得这很有用。目前我正在使用Power8系统,并想知道GNU和/或IBM OpenMP发行版是否等同KMP_AFFINITY=verbose
。换句话说,如果用g ++或xlc ++编译我的OpenMP可执行文件,如何获取有关线程放置位置的信息?
答案 0 :(得分:1)
使用xlc ++,您可以将OMP_DISPLAY_ENV环境变量设置为TRUE或VERBOSE以获取此信息。有关详细信息,请参阅 IBM知识中心。

答案 1 :(得分:1)
GCC OpenMP documentation(libgomp)说目前无法做到这一点:
没有libgomp库例程来确定CPU亲和性规范是否有效。作为解决方法,可以使用特定于语言的库函数(例如,C中的
getenv
或Fortran中的GET_ENVIRONMENT_VARIABLE
来查询GOMP_CPU_AFFINITY
环境变量的设置。在应用程序的运行时期间,无法更改或禁用启动时定义的CPU关联。
您可以尝试使用GOMP_DEBUG
,看看它是否符合您的要求。