2016-01-18 39 views
1

我正在使用一个C程序,使用OpenMP 4.0在Windows7上使用gcc 4.9.2进行编译。我的电脑是双核心,有四个线程。 我想使用线程关联传播,并使用2个线程放在不同的核心。所以,当我设置环境变量从DOS用:使用OpenMP在两个内核上设置线程关联

  • 集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}”

是否有任何的你知道如何解决这个问题?

回答

1

我试图用gcc 4.9.3在Linux上编译一个简单的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标准说:

的相似性请求是否能够得到满足的确定是定义 实现。如果亲和力请求不能被满足,则 ,那么团队中的线程的亲和度是实现定义的。

我想这是我们...

+0

喜吉尔。我在Ubuntu上测试过相同的配置,我同意你的看法。不幸的是,我必须为我的应用程序使用Win7,并且我想发现在gcc版本4.9.2和版本4.9.3之间使用OpenMP是否有任何差异。我会让你知道的。 – Franktrt

+0

再次吉尔斯。我使用gcc版本5.1在Windows7上测试了我的应用程序,得到了相同的结果。所以我最终说Windows 7机器不支持OpenMP线程关联。 – Franktrt

相关问题