我正在尝试使用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内核数? (我不想设置线程数)。
非常感谢您。
答案 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