相关疑难解决方法(0)

不平衡嵌套formp中的循环

我一直在尝试使用OpenMP并行化不平衡嵌套for循环的算法.我不能发布原始代码,因为这是一个闻所未闻的政府的秘密项目,但这是一个玩具示例:

for (i = 0; i < 100; i++) {
    #pragma omp parallel for private(j, k)
    for (j = 0; j < 1000000; j++) {
        for (k = 0; k < 2; k++) {
            temp = i * j * k;      /* dummy operation (don't mind the race) */
        }
        if (i % 2 == 0) temp = 0;  /* so I can't use openmp collapse */
    }
}
Run Code Online (Sandbox Code Playgroud)

目前这个实例在多个线程的工作速度较慢(〜1秒在单个线程〜2.4秒在2个线程等).

注意事项:

  • 外循环需要按顺序完成(取决于前一步)(据我所知,OpenMP处理好内部循环,因此在每一步都不会创建/销毁线程,对吗?)

  • 典型的索引号在示例中给出 (100, 1000000, 2) …

c parallel-processing multithreading openmp multiprocessing

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