c++omp,比较参数和常量

c++ omp, compare parameter and constant

本文关键字:常量 参数 比较 c++omp      更新时间:2023-10-16

例如,我有一个函数:

void function(int x, int y)
{
 code here;
}

与我用常数代替给定的x和y相比,当我传入参数时要慢得多。

那么,即使在使用变量x和y的情况下,我如何获得和使用常数一样快的速度呢?

(代码中主要有一些核心for循环)我试着为代码中的每个循环的firstprivate(x,y)#pragma omp parallel,我得到了一个加速,但仍然没有我使用常量那么快,有什么建议吗?或者,有没有什么方法可以把x和y中的传递看作两个常数?

我认为通过做:

firstprivate(x,y)的pragma omp并行

从本质上讲,你在每个核心上运行相同的for循环,因为这些值对每个线程都是私有的,所以它们并没有真正协同工作以更快地完成任务,最终会完全适得其反。尝试使用";共享的";并在同步子句中添加barrier。

例如:

#include <stdio.h>
int main(int argc, char *argv[])
{
    int x = 0;
    int y = 0;
    #pragma omp parallel shared(x, y) 
    {
        #pragma omp barrier
        for(x = 0, y = 0; x <= 500000; x++, y++) {
            printf("x: %d, y: %dn", x, y);
        }
    }
    return 0;
}

针对这个的时间

#include <stdio.h>
int main(int argc, char *argv[])
{
    int x = 0;
    int y = 0;
    #pragma omp parallel firstprivate(x, y) 
    {
        #pragma omp barrier
        for(x = 0, y = 0; x <= 500000; x++, y++) {
            printf("x: %d, y: %dn", x, y);
        }
    }
    return 0;
}

我不认为我有你的完整答案,因为我自己还在玩,但希望它能帮助我找到一个。

";OpenMP";维基百科上的这篇文章看起来真的很好,我仍在阅读它并理解它。。。