我一直在尝试使用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) …