小编phi*_*rus的帖子

如何提高 OpenMP 代码的性能?

我目前正在尝试提高我的代码的并行性能,但我对 OpenMP 仍然是新手。我必须迭代一个大容器,在每次迭代中从多个条目读取并将结果写入单个条目。下面是我正在尝试做的一个非常简单的代码示例。

data是一个指向数组的指针,其中存储了许多数据点。在并行区域之前,我创建了一个 Array newData,因此可以用作data只读和newData只写,之后我扔掉旧的data并用于newData进一步的计算。据我了解data,并且newData在线程之间共享,并且并行区域内声明的所有内容都是私有的。data多线程读取会导致性能问题吗?

我用于#critical为 的元素分配新值newData以避免竞争条件。这是必要的吗,因为我访问了每个元素newData一次,而从不通过多个线程访问?

我也不确定日程安排。我是否必须指定是否需要static时间表dynamicnowait由于所有线程都是相互独立的,我可以使用吗?

array *newData = new array;

omp_set_num_threads (threads);

#pragma omp parallel
{
    #pragma omp for
    for (int i = 0;  i < range; i++)
    {
        double middle = (*data)[i];
        double previous = (*data)[i-1];
        double next = (*data)[i+1];

        double new_value = (previous + middle + …
Run Code Online (Sandbox Code Playgroud)

c++ performance multithreading openmp

2
推荐指数
1
解决办法
1333
查看次数

标签 统计

c++ ×1

multithreading ×1

openmp ×1

performance ×1