gpt4 book ai didi

c++ - 使用 OpenMP 的并发和优化

转载 作者:行者123 更新时间:2023-11-28 08:26:38 28 4
gpt4 key购买 nike

我正在学习 OpenMP。为此,我试图使现有代码并行。但我似乎在使用 OpenMP 时比不使用时更糟糕。

我的内循环:

    #pragma omp parallel for
for(unsigned long j = 0; j < c_numberOfElements; ++j)
{
//int th_id = omp_get_thread_num();
//printf("thread %d, j = %d\n", th_id, (int)j);

Point3D current;
#pragma omp critical
{
current = _points[j];
}

Point3D next = getNext(current);

if (!hasConstraint(next))
{
continue;
}

#pragma omp critical
{
_points[j] = next;
}
}

_points 是一个pointMap_t,定义为:

typedef boost::unordered_map<unsigned long, Point3D> pointMap_t;

如果没有 OpenMP,我的运行时间是 44.904 秒。在启用 OpenMP 的情况下,在具有两个内核的计算机上,它是 64.224s。我做错了什么?

最佳答案

为什么将对 _points[j] 的读取和写入包装在临界区中?我不是 C++ 程序员,但在我看来您根本不需要这些部分。正如您编写的那样(未命名的关键部分),每个线程将等待另一个线程通过每个部分。这很容易使程序变慢。

关于c++ - 使用 OpenMP 的并发和优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3841607/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com