C++ 警告#2901:[omp]OpenMP未激活;将忽略所有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
警告#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);
}