Rodinia 3.1心肌细胞基准中的怪异构建体

问题描述 投票:0回答:1

我目前正在研究概念性RISCV SIMT体系结构,我们的模拟器仅模拟一些所需的库调用。我们正在尝试运行openmp rodinia 3.1基准,但由于我们仅支持pthread,因此我试图将简单的静态调度的openmp代码转换为pthread代码。

我在myocyte基准中发现了这种构造:

// master.c
void master(params) {
    // declaration of th_id
    int th_id;

    // no initialization of th_id

    #pragma omp parallel private(th_id)
    {
        // code that uses th_id as a "thread id" value
    }
}

// main.c
#pragma omp parallel for
for (i=0; i<N; i++) {
    master(params);
}

据我所知,开发人员依靠#pragma代码中的master.c来初始化变量th_id,但我找不到openmp文档中的声明。假设th_id被ompenmp识别并初始化是完全正确还是错误?

c parallel-processing openmp benchmarking pragma
1个回答
0
投票

此OpenMP基准代码已完全损坏。在并行区域的开头应该有这样的内容:

th_id = omp_get_thread_num();

[它获得调用线程的ID,并且它是一个介于0和执行并行区域的线程数之间的数字减去1,其中0对应于主线程。

同样,此代码确实被破坏,似乎已经从Fortran进行了翻译。有一个越界数组访问:

int th_count[4];

...

#pragma omp parallel private(th_id)
{
    ...
    if (th_id == th_count[4]) {
    ...
}

我想您应该简单地废弃Myocyte基准。

© www.soinside.com 2019 - 2024. All rights reserved.