Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing OpenMP任务-防止特定线程执行任务的方法?_Parallel Processing_Task_Openmp_Sse - Fatal编程技术网

Parallel processing OpenMP任务-防止特定线程执行任务的方法?

Parallel processing OpenMP任务-防止特定线程执行任务的方法?,parallel-processing,task,openmp,sse,Parallel Processing,Task,Openmp,Sse,我正在OpenMP中创建多个任务,但由于某些原因,这些任务由同一线程执行。该代码具有以下模式: #pragma omp parallel num_threads(n_threads) #pragma omp single while(!found){ /.... operations with k, e, y, dist, u, step #pragma omp task firstprivate(k, e, y, dist, u, ste

我正在OpenMP中创建多个任务,但由于某些原因,这些任务由同一线程执行。该代码具有以下模式:

#pragma omp parallel num_threads(n_threads)

#pragma omp single 
while(!found){

            /.... operations with k, e, y, dist, u, step

            #pragma omp task firstprivate(k, e, y, dist, u, step)
            process(k, e, y, dist, u, step, h, out);

}
有没有办法强制OpenMP运行时系统将任务分配给除创建任务的线程外的所有线程

谢谢

编辑:


这和你在另一篇文章中的问题不一样吗

这里的答案是:不,您无法控制OpenMP实现如何将任务分配给并行团队的OpenMP线程

我可以建议您发布一段实际编译的代码吗?这样就更容易检查代码为什么没有按照您认为应该的方式运行

通过OP添加的示例代码,我的机器上的行为如下:

$> gcc -fopenmp omp.c
$> ./a.out
Thread 0 finished preprocessing
Thread 0 processing
Thread 3 processing
Thread 2 processing
Thread 1 processing
Thread 0 processing
Thread 3 processing
Thread 2 processing
Thread 1 processing
Thread 0 processing
Thread 3 processing
$> gcc --version
gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012]
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$> icc -openmp omp.c
$> ./a.out
Thread 0 finished preprocessing
Thread 0 processing
Thread 3 processing
Thread 2 processing
Thread 1 processing
Thread 0 processing
Thread 3 processing
Thread 2 processing
Thread 1 processing
Thread 0 processing
Thread 3 processing
mklemm-mobl2-vm:~/tmp [0]> icc -V
Intel(R) C Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.1.106 Build 20131008
Copyright (C) 1985-2013 Intel Corporation.  All rights reserved.
你在用什么编译器

干杯,
-迈克尔

这不是完全相同的问题。我添加了我正在使用的代码的一个简单版本及其输出。它的编译应该没有问题。正如您所看到的,线程1正在执行每个任务,并且只有在计算完所有任务后才退出循环。我是这样编译的gcc-fopenmp-O2 test.c-o test.o。
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 processing
Thread 1 finished preprocessing
$> gcc -fopenmp omp.c
$> ./a.out
Thread 0 finished preprocessing
Thread 0 processing
Thread 3 processing
Thread 2 processing
Thread 1 processing
Thread 0 processing
Thread 3 processing
Thread 2 processing
Thread 1 processing
Thread 0 processing
Thread 3 processing
$> gcc --version
gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012]
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$> icc -openmp omp.c
$> ./a.out
Thread 0 finished preprocessing
Thread 0 processing
Thread 3 processing
Thread 2 processing
Thread 1 processing
Thread 0 processing
Thread 3 processing
Thread 2 processing
Thread 1 processing
Thread 0 processing
Thread 3 processing
mklemm-mobl2-vm:~/tmp [0]> icc -V
Intel(R) C Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.1.106 Build 20131008
Copyright (C) 1985-2013 Intel Corporation.  All rights reserved.