C 只有一个线程运行的openMP?

C 只有一个线程运行的openMP?,c,openmp,C,Openmp,我主要有以下代码: int main(int argv, char **argc) { // Get multi-CPU/multi-GPU data int num_gpus; cudaGetDeviceCount(&num_gpus); printf("### Number of host CPUs:\t%d\n", omp_get_num_procs()); printf("### Number of CUDA devices:\t%d\n", num

我主要有以下代码:

int main(int argv, char **argc)
{
   // Get multi-CPU/multi-GPU data
   int num_gpus;
   cudaGetDeviceCount(&num_gpus);
   printf("### Number of host CPUs:\t%d\n", omp_get_num_procs());
   printf("### Number of CUDA devices:\t%d\n", num_gpus);
   omp_set_num_threads(num_gpus);

   #pragma omp parallel
   {    
    unsigned int cpu_thread_id = omp_get_thread_num();  

    printf("### (CPU thread %d)\n",cpu_thread_id);  

    test(cpu_thread_id, num_gpus);
   }    
}
以及测试功能:

void test(unsigned int cpu_thread_id, int num_gpus)
{   
    printf("### Using CUDA device %d, GPU = %d\n", cpu_thread_id, num_gpus);
}
甚至我也得到了输出:

### Number of host CPUs:        8
### Number of CUDA devices:     4
### (CPU thread 0)
### Using CUDA device 0, GPU = 4
但我希望有更多这样的线程:

### (CPU thread 1)
### Using CUDA device 1, GPU = 4
### (CPU thread 2)
### Using CUDA device 2, GPU = 4
### (CPU thread 3)
### Using CUDA device 3, GPU = 4
为什么其他三个线程没有运行


提前感谢。

您在编译器中启用了OpenMP支持吗?在我的makefile中,我有一个标志:CFLAGS:=-O3-fopenmp-Wall-I/usr/local/cuda/include/取决于您的编译器。GCC有-fopenmp,Microsofts cl.exe有/openmpI,我怀疑问题是因为我把它们放在一个main.cu文件中,我需要用cu文件启用它。。。我正在寻找一种方法,请记住,您必须同时向编译器和链接器发送-fopenmp标志。您是否在编译器中启用了OpenMP支持?在我的makefile中,我有一个标志:CFLAGS:=-O3-fopenmp-Wall-I/usr/local/cuda/include/取决于您的编译器。GCC有-fopenmp,Microsofts cl.exe有/openmpI,我怀疑问题是因为我把它们放在一个main.cu文件中,我需要用cu文件启用它。。。我正在寻找一种方法来实现这一点,请记住,您必须同时向编译器和链接器发送-fopenmp标志。