如何设置参与计算的 CPU 个核心数(C++ 和 OpenMP)
How to set the number of CPU cores engaged in a calculation (C++ and OpenMP)
我正在尝试使用 C++ 和 OpenMP 在 Qt5 中计算 Pi(重点是减少数据子句)。在这个程序中,我提供了计算精度和CPU 核心参与的数量。
到目前为止,我有以下代码:
int num_steps= ui->numberStepsLineEdit->text().toInt();
double x=0.0;
double sum = 0.0;
#pragma omp parallel private(i,x)
{
#pragma omp for reduction(+:sum) schedule(static)
for (int i=0; i<num_steps; i++)
{
x=(i+0.5)/(double)num_steps;
sum = sum + 4.0/(1.0+x*x);
}
}
double pi=sum/(double)num_steps;
QString result= QString::number(pi, 'g', 10);
ui->piLabel->setText(result);
问题是我需要指定参与计算的CPU核数,网上找了例子没有成功。
如何设置参与计算的CPU核数? (我不想设置线程数)。
非常感谢您。
使用 OpenMP,您可以设置线程数,OS 将这些映射到内核。也可以看看:
OpenMP thread mapping to physical cores
如何模拟您所要求的方法是使用 num_threads() 子句或 omp_set_[=15 将所需的内核数设置为 OpenMP 代码中的线程数=]() API 调用。然后使用 OMP_PROC_BIND 和 OMP_PLACES 环境变量来控制线程到所需内核数的映射。
因此,例如,如果您只想使用系统的四个核心,您可以这样做:
#pragma omp parallel num_threads(4)
{
// your parallel code
}
$> OMP_PLACES=cores(4) OMP_PROC_BIND=compact ./a.out
我正在尝试使用 C++ 和 OpenMP 在 Qt5 中计算 Pi(重点是减少数据子句)。在这个程序中,我提供了计算精度和CPU 核心参与的数量。
到目前为止,我有以下代码:
int num_steps= ui->numberStepsLineEdit->text().toInt();
double x=0.0;
double sum = 0.0;
#pragma omp parallel private(i,x)
{
#pragma omp for reduction(+:sum) schedule(static)
for (int i=0; i<num_steps; i++)
{
x=(i+0.5)/(double)num_steps;
sum = sum + 4.0/(1.0+x*x);
}
}
double pi=sum/(double)num_steps;
QString result= QString::number(pi, 'g', 10);
ui->piLabel->setText(result);
问题是我需要指定参与计算的CPU核数,网上找了例子没有成功。
如何设置参与计算的CPU核数? (我不想设置线程数)。
非常感谢您。
使用 OpenMP,您可以设置线程数,OS 将这些映射到内核。也可以看看: OpenMP thread mapping to physical cores
如何模拟您所要求的方法是使用 num_threads() 子句或 omp_set_[=15 将所需的内核数设置为 OpenMP 代码中的线程数=]() API 调用。然后使用 OMP_PROC_BIND 和 OMP_PLACES 环境变量来控制线程到所需内核数的映射。
因此,例如,如果您只想使用系统的四个核心,您可以这样做:
#pragma omp parallel num_threads(4)
{
// your parallel code
}
$> OMP_PLACES=cores(4) OMP_PROC_BIND=compact ./a.out