如何设置计算中使用的CPU内核数(C ++和OpenMP)

时间:2019-05-15 10:03:45

标签: 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内核数? (我不想设置线程数)。

非常感谢您。

2 个答案:

答案 0 :(得分:2)

如何模拟您要的内容,就是使用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

答案 1 :(得分:0)

使用OpenMP,您可以设置线程数,并且OS会将线程映射到内核。也可以看看: OpenMP thread mapping to physical cores