我正在写一些代码,这将肯定受益于试图集成openmp的一些软件,我正在编写。我是openmp的新手,在测试一些非常基本的测试代码时(见下文),我注意到在激活openmp的情况下执行时间非常长(#杂注行)。任何洞察力都是非常值得欣赏的。
int main()
{
int number=200;
int max = 2000000;
for(int t=1; t<max; t++)
{
double fac = 0.0;
#pragma omp parallel for reduction(+:fac)
for(int n=
出于某些原因,我必须在嵌套循环中的每个for语句之间放置一些代码,如下所示:
for (int i = 0; i < n; ++i) {
//i have to put some code here
do something_1
for (int j = 0; j < n; ++j) {
//i have to put some code here
do something_2
for (int k = 0; k < n; ++k) {
do something_3
我正在尝试在OpenMP中并行化一个基于范围的for循环,方法是使循环的每次迭代都成为一个OpenMP段。我想这样做:
#pragma omp parallel sections
{
for ( auto x : range ) {
#pragma omp section
// LOTS OF CODE HERE
}
}
然而,这并不起作用--编译器抱怨这个节必须在#杂注omp节构造中。是我做错了什么,还是OpenMP不够聪明,不能理解这一部分在for循环中?
在OpenMP中,当一个函数在堆栈中越低,就会引发多处理,那么OpenMP设备会忽略来自函数体的多处理请求,在堆栈中越高越好吗?
这就是OpenMP一贯的工作方式吗?如果没有,我可以这么做吗?多么?
void do1()
{
#pragma omp parallel for
for (unsigned int i = 0; i < 10; ++i);
}
void do2()
{
#pragma omp parallel for
for (unsigned int i = 0; i < 10; ++i) do1();
}
void do3()
{