Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置参与计算的CPU内核数(C+;+;和OpenMP) 我试图用C++和OpenMP(Quielon Dead DATA子句)计算QT5中的PI。在这个程序中,我提供了计算精度和占用的CPU核数。_C++_Openmp_Cpu_Core - Fatal编程技术网

如何设置参与计算的CPU内核数(C+;+;和OpenMP) 我试图用C++和OpenMP(Quielon Dead DATA子句)计算QT5中的PI。在这个程序中,我提供了计算精度和占用的CPU核数。

如何设置参与计算的CPU内核数(C+;+;和OpenMP) 我试图用C++和OpenMP(Quielon Dead DATA子句)计算QT5中的PI。在这个程序中,我提供了计算精度和占用的CPU核数。,c++,openmp,cpu,core,C++,Openmp,Cpu,Core,到目前为止,我有以下代码: 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<n

到目前为止,我有以下代码:

    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);
int num_steps=ui->numberStepsLineEdit->text().toInt();
双x=0.0;
双和=0.0;
#pragma omp并行专用(i,x)
{
#减少(+:总和)计划的pragma omp(静态)
对于(inti=0;ipilab->setText(结果);
问题是我需要指定参与计算的CPU核的数量,我在互联网上查找了一些没有成功的例子

如何设置参与计算的CPU内核数?(我不想设置线程数)


提前非常感谢。

使用OpenMP,您可以设置线程数量,操作系统会将这些线程映射到内核。另请参阅:

模拟所需的方法是使用num_threads()子句或omp_set_num_threads()将所需的内核数设置为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

您只能设置线程数。好的,没有办法设置核心数。为什么要指定核心数?如果您不能这样做,那么对于您试图解决的实际问题,可能还有另一种解决方案。感谢回答伙计们。我在API规范中读到,您可以使用OMP_PLACES co与OMP_PROC_BIND结合以实现目标。但仍然不确定。嗨,Michael,谢谢你的回答。这就是我开始发现的(OMP_位置和OMP_PROC_BIND的使用),但是,我如何在我的程序中设置这些变量?(我是OpenMP和Qt的新手)。不幸的是,你无法设置它们(从OpenMP v5.0开始)由于OpenMP不会公开这些环境变量背后的内部控制变量的setter函数,因此,在执行应用程序代码之前,您必须坚持设置环境变量。