使用OpenMP在两个核上设置线程关联

我正在使用一个C程序,使用OpenMP 4.0在Windows7上使用gcc 4.9.2编译。 我的电脑是双核,有四个线程。 我想使用线程亲和力传播并使用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 

似乎输入无效,所以我将其更改为:

  • 设置OMP_PLACES =“核心”
  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标准说:

是否可以满足关联请求的确定是实现定义的。 如果无法满足关联请求,则团队中线程的关联性是实现定义的。

我想那就是我们……