c++ - 如何设置参与计算的 CPU 内核数(C++ 和 OpenMP)

标签 c++ openmp cpu core

我正在尝试使用 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核数? (我不想设置线程数)。

非常感谢您。

最佳答案

如何模拟您所要求的方法是使用 num_threads() 子句或 omp_set_num_threads() API 调用将所需的核心数设置为 OpenMP 代码中的线程数。然后使用 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++ - 如何设置参与计算的 CPU 内核数(C++ 和 OpenMP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56146672/

相关文章:

c++ - 多态指针

c++ - 如何在两个子类之间正确实现赋值运算符

c++ - HDF5 库错误

java - 至强比i5慢?

Linux 最高 CPU 使用率——总是相同的值

c++ - GetProcessID 与 GetThreadID

python - 带有 OMP : can't import module, undefined symbol GOMP_* 的 f2py

c - 并行递归双调排序比串行(OpenMP)慢

c++ - OpenMP 不会利用所有核心?

android - 检测是否在具有异构 CPU 架构的设备上运行