尝试在其线程函数参数中将不同的值传递给 openMp 线程

Trying to pass different values to openMp thread in its thread function parameter

我有这段代码,我试图找出如何将不同的值作为 openMp 线程中的线程参数传递给

因此,例如我有一个简单的递减语句,如 --t,其中 t 是一个变量,因此每次调用线程函数时,它首先获取 t 的递减值,然后作为线程参数接收。这是我试过的

int main(int argc, char* argv[])
{

    int t=2;
    #pragma omp parallel firstprivate(t=(--t))
    {
        
        printf("%d\n",t);
    }
    
    // Ending of parallel region
}

所以我完全不知道上面的代码是如何扩展的,因为我假设#pragma omp 指令的 firstprivate(...) 部分只是一种使用 open mp 生成线程的方法,但我需要每个参数都收到不同的参数线。在 openMM C

中可行吗

不可能在 firstprivate 子句中这样做。但是,您可以将子句更改为 shared 并使用 atomic 构造 来安全地 更新 值。这是一个例子:

int main(int argc, char* argv[])
{
    int t=2;

    #pragma omp parallel shared(t)
    {
        int local_t_value;

        #pragma omp atomic capture relaxed
        local_t_value = --t;

        printf("%d\n", local_t_value);
    }
}

请注意,在此上下文中使用 capture,因为同时获取和更新原子值。 relaxed 是一种内存排序,指定无需执行任何 flush 即可更新此值。欲了解更多信息,请阅读 this related part of the specification