OpenMP计划中的异常行为

时间:2014-10-27 22:11:26

标签: c multithreading openmp

我有一个程序,我尝试使用打开MP

输出仍然正确(我在多次运行后测试过),但我得到的时间很奇怪。

因此单线程版本的时间 0.1 秒。

2 踏板我 0.05 ,但 4 我获得 0.15 秒。 这怎么可能?

我只是使用简单的并行。

#pragma omp parallel for private(i, j)
for(i = 1; i <= total_height; i++){
    for(j = 1; j <= total_width; j++){
        int current_neighbours = neighbours[i][j];
        // if(i == 2 && j == 1)
            // printf("%d%d\n", current_neighbours, neighbours[2][1]);
        if(current_neighbours == 0 || current_neighbours == 1 || current_neighbours > 3){
            if(map[i][j] == 1){
                update_maps(i, j, 0);
            }
        }
        else if(current_neighbours == 3){
            if(map[i][j] == 0){
                update_maps(i, j, 1);
            }
        }
    }
}

update_maps函数看起来像这样

void update_maps(int i, int j, int value){
    map[i][j] = value;
    int k, neighbouri, neighbourj;
    int num_of_thread = omp_get_thread_num();
    if(value == 0)
        value = -1;

    for(k = 0; k < 8 ; k++){
        neighbouri = i + di[k];
        neighbourj = j + dj[k];
        if(in_map(neighbouri, neighbourj)){
            neighbouri--;
            neighbourj--;
            modify[neighbouri * total_height + neighbourj + (total_height * total_width * num_of_thread)] += value;
        }
    }
}

0 个答案:

没有答案