Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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
C++ 警告#2901:[omp]OpenMP未激活;将忽略所有OpenMP指令_C++_C_Multithreading_Parallel Processing_Openmp - Fatal编程技术网

C++ 警告#2901:[omp]OpenMP未激活;将忽略所有OpenMP指令

C++ 警告#2901:[omp]OpenMP未激活;将忽略所有OpenMP指令,c++,c,multithreading,parallel-processing,openmp,C++,C,Multithreading,Parallel Processing,Openmp,我目前正在尝试使用OpenMP进行并行计算。 我已经编写了以下基本代码。 但是,它会返回以下警告: 警告#2901:[omp]OpenMP未激活;将忽略所有OpenMP指令。 更改线程数不会更改所需的运行时间,因为由于某种原因,omp.h被忽略,对此我不清楚 有人能帮我吗 #include <stdio.h> #include <omp.h> #include <math.h> int main(void) { double ts; doub

我目前正在尝试使用OpenMP进行并行计算。 我已经编写了以下基本代码。 但是,它会返回以下警告:

警告#2901:[omp]OpenMP未激活;将忽略所有OpenMP指令。

更改线程数不会更改所需的运行时间,因为由于某种原因,
omp.h
被忽略,对此我不清楚

有人能帮我吗

#include <stdio.h>
#include <omp.h>
#include <math.h>

int main(void)
{
    double ts;
    double something;
    clock_t begin = clock();

    #pragma omp parallel num_threads(4)
    #pragma omp parallel for

    for (int i = 0; i<pow(10,7);i++)
    {
        something=sqrt(123456);
    }

    clock_t end = clock();
    ts = (double)(end - begin) / CLOCKS_PER_SEC;
    printf("Time elpased is %f seconds", ts);
}
#包括
#包括
#包括
内部主(空)
{
双T;
双重的东西;
时钟开始=时钟();
#pragma omp并行num_线程(4)
#pragma-omp并行

对于(int i=0;i为了获得OpenMP支持,您需要明确地告诉编译器

  • g++
    gcc
    clang
    需要选项
    -fopenmp
  • mvsc
    需要选项
    /openmp
    (如果使用visual studio,请提供更多信息)

除了必须使用
-fopenmp
标记编译之外,您的代码还有一些值得指出的问题,即:

要测量时间,请使用而不是时钟()(它将提供所有线程中累积的时钟滴答数)

另一个问题是:

#pragma omp parallel num_threads(4)
#pragma omp parallel for

for (int i = 0; i<pow(10,7);i++)
{
    something=sqrt(123456);
}
正在执行
6 x 4
=
24次(即循环迭代总数乘以线程总数)。有关类似问题的更深入解释,请检查此项。不过,下图提供了基本问题的可视化:

要解决此问题,请将代码调整为以下内容:

#pragma omp parallel for num_threads(4)
for (int i = 0; i<pow(10,7);i++)
{
    something=sqrt(123456);
}
用于num_线程的pragma omp并行(4) 对于(int i=0;i
#pragma omp parallel for num_threads(4)
for (int i = 0; i<pow(10,7);i++)
{
    something=sqrt(123456);
}