C++ 如何测试C++;正在使用openmp吗?
我有一个程序,可以对一组图像进行独立计算。这似乎是一个使用OpenMP的好主意:C++ 如何测试C++;正在使用openmp吗?,c++,g++,openmp,C++,G++,Openmp,我有一个程序,可以对一组图像进行独立计算。这似乎是一个使用OpenMP的好主意: //file: WoodhamData.cpp #include <omp.h> ... void WoodhamData::GenerateLightingDirection() { int imageWidth = (this->normalMap)->width(); int imageHeight = (this->normalMap)->height
//file: WoodhamData.cpp
#include <omp.h>
...
void WoodhamData::GenerateLightingDirection() {
int imageWidth = (this->normalMap)->width();
int imageHeight = (this->normalMap)->height();
#pragma omp paralell for num_threads(2)
for (int r = 0; r < RadianceMaps.size(); r++) {
if (omp_get_thread_num() == 0){
std::cout<<"threads="<<omp_get_num_threads()<<std::endl;
}
...
}
}
然而,我很难过地说,我的程序报告threads=1
(从终端/test.exe运行…
)
有人知道可能出了什么问题吗?这是我程序中最慢的部分,最好能把它加快一点。您的OpenMP指令是错误的-它是“并行”而不是“并行” 用
-Wall
编译并查看警告。@Zboson谢谢,这正是我所需要的!向我展示了kjpus指出的问题。诅咒我糟糕的语法。我想这应该作为一个评论。你可以建议使用-Wall
,以便OP在将来发现其他打字错误。这是我的错,标题中的问题在技术上与我在正文中提出的问题不同@兹博森的回答是我想要的,但这正确地回答了我的问题。我必须参考stackoverflow指南。@Kenkron,很多时候我没有得到我想要的结果,因为布拉格语语句中的拼写错误。我浪费了很多时间进行printf调试,但从来没有发现pragma语句的问题。从那以后,我学会了使用-Wall
更多。这可能是OpenMP的一个弱点。普通的C代码会出现语法错误,但pragma语句不一定会出现语法错误。这是一个有趣的问题。我想知道您是否可以启用一个选项,将未知的pragma语句视为编译错误<代码>-Werror有时我觉得太苛刻了。@Kenkron,-Wunknown pragmas
。现在,我们只需要找到一种方法,让它在未知杂注上出错,而不是在这个警告上给出警告,并且只在这个警告上出错,而不是所有警告。@Kenkron,我认为-Werror=unknown杂注
可能会这样做。
g++ -g -o test.exe src/test.cpp src/WoodhamData.cpp -pthread -L/usr/X11R6/lib -fopenmp --std=c++0x -lm -lX11 -Ilib/eigen/ -Ilib/CImg