【发布时间】:2025-11-30 07:35:01
【问题描述】:
我有这个代码:
#pragma omp parallel
{
#pragma omp single
{
for (int i=0; i<given_number; ++i) myBuffer_1[i] = myObject_1->myFunction();
}
#pragma omp single
{
for (int i=0; i<given_number; ++i) myBuffer_2[i] = myObject_2->myFunction();
}
}
// and so on... up to 5 or 6 of myObject_x
// Then I sum up the buffers and do something with them
float result;
for (int i=0; i<given_number; ++i)
result = myBuffer_1[i] + myBuffer_2[i];
// do something with result
如果我运行这段代码,我会得到预期的结果,但 CPU 使用率看起来相当高。相反,如果我在没有 OpenMP 的情况下正常运行它,我会得到相同的结果,但 CPU 使用率要低得多,尽管在单线程中运行。
我不想指定线程数,我希望程序根据 CPU 能力选择最大线程数,但我希望每个 for 循环完全在自己的线程中运行。我怎样才能做到这一点?
另外,我的期望是 myBuffer_1 的 for 循环运行一个线程,另一个 for 循环运行另一个线程,其余的在“主”线程中运行。这是正确的吗?
【问题讨论】:
标签: c++ multithreading openmp