OMP_PLACES 未在此范围内声明
OMP_PLACES was not declared in this scope
我正在寻找在我的代码中使用 OMP_PLACES
和 OMP_PROC_BIND=close
的正确方法。当我 运行 这个时,我得到的错误是:
error: ‘OMP_PLACES’ was not declared in this scope
#include <iostream>
#include <random>
#include <fstream>
#include <iomanip>
#include <cfloat>
#include <omp.h>
#include <stdlib.h>
using namespace std;
int main()
{
const int N = 100;
unsigned seed = 0;
double sum = 0.0;
double avg;
srand(seed);
default_random_engine g(seed);
uniform_real_distribution<double> distribution(0.0f, nextafter(1.0f, DBL_MAX));
#pragma omp parallel
{
OMP_PLACES="cores(4)";
OMP_PROC_BIND=close;
#pragma omp for reduction (+: sum)
for (int i = 0; i < N; i++) {
double x = distribution(g);
sum = sum + x;
}
avg = sum / static_cast<double> (N);
}
}
必须在 shell 环境中设置 OMP_PLACES
和 OMP_PROC_BIND
变量。所以,如果你使用 bash,那么你可以这样做:
$ export OMP_PLACES="cores(4)"
$ export OMP_PROC_BIND=close
$ ./your_application
另一种方法是在您的代码中使用 proc_bind()
子句:
// header omitted
int main()
{
const int N = 100;
unsigned seed = 0;
double sum = 0.0;
double avg;
srand(seed);
default_random_engine g(seed);
uniform_real_distribution<double> distribution(0.0f, nextafter(1.0f, DBL_MAX));
#pragma omp parallel proc_bind(close)
{
#pragma omp for reduction (+: sum)
for (int i = 0; i < N; i++) {
double x = distribution(g);
sum = sum + x;
}
// remainder of code to follow
}
...
}
你仍然需要
$ export OMP_PLACES="cores(4)"
指定您希望代码 运行 所在的位置。
PS:您可能还想查看有关随机数生成器的 C++ 线程安全性的 SO 页面:C++11 Thread safety of Random number generators
我正在寻找在我的代码中使用 OMP_PLACES
和 OMP_PROC_BIND=close
的正确方法。当我 运行 这个时,我得到的错误是:
error: ‘OMP_PLACES’ was not declared in this scope
#include <iostream>
#include <random>
#include <fstream>
#include <iomanip>
#include <cfloat>
#include <omp.h>
#include <stdlib.h>
using namespace std;
int main()
{
const int N = 100;
unsigned seed = 0;
double sum = 0.0;
double avg;
srand(seed);
default_random_engine g(seed);
uniform_real_distribution<double> distribution(0.0f, nextafter(1.0f, DBL_MAX));
#pragma omp parallel
{
OMP_PLACES="cores(4)";
OMP_PROC_BIND=close;
#pragma omp for reduction (+: sum)
for (int i = 0; i < N; i++) {
double x = distribution(g);
sum = sum + x;
}
avg = sum / static_cast<double> (N);
}
}
必须在 shell 环境中设置 OMP_PLACES
和 OMP_PROC_BIND
变量。所以,如果你使用 bash,那么你可以这样做:
$ export OMP_PLACES="cores(4)"
$ export OMP_PROC_BIND=close
$ ./your_application
另一种方法是在您的代码中使用 proc_bind()
子句:
// header omitted
int main()
{
const int N = 100;
unsigned seed = 0;
double sum = 0.0;
double avg;
srand(seed);
default_random_engine g(seed);
uniform_real_distribution<double> distribution(0.0f, nextafter(1.0f, DBL_MAX));
#pragma omp parallel proc_bind(close)
{
#pragma omp for reduction (+: sum)
for (int i = 0; i < N; i++) {
double x = distribution(g);
sum = sum + x;
}
// remainder of code to follow
}
...
}
你仍然需要
$ export OMP_PLACES="cores(4)"
指定您希望代码 运行 所在的位置。
PS:您可能还想查看有关随机数生成器的 C++ 线程安全性的 SO 页面:C++11 Thread safety of Random number generators