我使用的是C程序,在Windows7上用gcc 4.9.2编译,使用OpenMP 4.0。
我的电脑是双核,四个线程。
我想使用线程亲和力传播并使用放置在不同核心上的 2 个线程。因此,当我从 DOS 设置环境变量时:
- 设置 OMP_NUM_THREADS=2
- 设置 OMP_PROC_BIND=传播
- 设置 OMP_PLACES="核心"
当变量 OMP_DISPLAY_ENV=true 时,我得到:
libgomp: Invalid value for environment variable OMP_PLACES
OPENMP DISPLAY ENVIRONMENT BEGIN
_OPENMP = '201307'
OMP_DYNAMIC = 'FALSE'
OMP_NESTED = 'FALSE'
OMP_NUM_THREADS = '2'
OMP_SCHEDULE = 'DYNAMIC'
OMP_PROC_BIND = 'SPREAD'
OMP_PLACES = ''
OMP_STACKSIZE = '12872703'
OMP_WAIT_POLICY = 'PASSIVE'
OMP_THREAD_LIMIT = '4294967295'
OMP_MAX_ACTIVE_LEVELS = '2147483647'
OMP_CANCELLATION = 'FALSE'
OMP_DEFAULT_DEVICE = '0'
OPENMP DISPLAY ENVIRONMENT END
看来输入无效,所以我将其更改为:
libgomp: Affinity not supported on this configuration
OPENMP DISPLAY ENVIRONMENT BEGIN
_OPENMP = '201307'
OMP_DYNAMIC = 'FALSE'
OMP_NESTED = 'FALSE'
OMP_NUM_THREADS = '2'
OMP_SCHEDULE = 'DYNAMIC'
OMP_PROC_BIND = 'SPREAD'
OMP_PLACES = ''
OMP_STACKSIZE = '3107827'
OMP_WAIT_POLICY = 'PASSIVE'
OMP_THREAD_LIMIT = '4294967295'
OMP_MAX_ACTIVE_LEVELS = '2147483647'
OMP_CANCELLATION = 'FALSE'
OMP_DEFAULT_DEVICE = '0'
OPENMP DISPLAY ENVIRONMENT END
这就是结果:亲和力不支持。即使使用以下方法我也得到相同的结果:
设置 OMP_PLACES="{0},{2},{1},{3}"
你们有人知道如何解决这个问题吗?
我尝试在 Linux 上使用 gcc 4.9.3 编译一个简单的 hello world 代码,并使用您建议的环境变量:
~/tmp$ OMP_DISPLAY_ENV=true OMP_NUM_THREADS=2 OMP_PROC_BIND=spread OMP_PLACES=cores ./a.out
OPENMP DISPLAY ENVIRONMENT BEGIN
_OPENMP = '201307'
OMP_DYNAMIC = 'FALSE'
OMP_NESTED = 'FALSE'
OMP_NUM_THREADS = '2'
OMP_SCHEDULE = 'DYNAMIC'
OMP_PROC_BIND = 'SPREAD'
OMP_PLACES = '{0:2},{2:2}'
OMP_STACKSIZE = '140736864318339'
OMP_WAIT_POLICY = 'PASSIVE'
OMP_THREAD_LIMIT = '4294967295'
OMP_MAX_ACTIVE_LEVELS = '2147483647'
OMP_CANCELLATION = 'FALSE'
OMP_DEFAULT_DEVICE = '0'
OPENMP DISPLAY ENVIRONMENT END
Hello from thread 0 / 2
Hello from thread 1 / 2
所以基本上,它对我有用,而且我相信你所尝试的是合法的。但是,您收到的消息Affinity not supported on this configuration
我相信亲和力可能根本无法在您的 Windows 7 计算机上使用。我没有这样的环境来测试,但 OpenMP 标准说:
判断是否可以满足关联请求的是
定义的实现。如果亲和力请求无法满足,
那么团队中线程的亲和力是由实现定义的。
我想这就是我们...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)