在 linux 上,AMD 8 核处理器,使用 g++ 4 7.1。
这是 - 对我来说 - 一个headbanger。以下代码运行良好,由于某种原因停止了并行化。我添加了 omp_get_num_procs(),它打印了 8 个处理器。我检查了编译,并且 -fopenmp 作为链接和编译的选项存在。没有编译/链接错误消息。我检查了是否定义了任何环境变量(OMP_xxx) - 没有。
是否还有其他可能影响的外部因素?
#pragma omp parallel
{
lightray ray;
rgba L;
printf("Max nr processors: %d\n", omp_get_num_procs());
#pragma omp for schedule(dynamic)
for (int xy = 0; xy < xy_range; xy++) {
int x = x_from + (xy % x_width);
int y = y_from + (xy / x_width);
ray = cam->get_ray_at(x, y);
L = trace_ray(ray, 0, cam->inter);
cam->set_pixel(x, y, L);
}
}
dtime = omp_get_wtime() - dtime;
printf("time %f\n", dtime);
}
编辑:我想我在这里找到了一些东西...... Anjuta 生成的 g++ 命令行包含以下内容:
-DPACKAGE_LOCALE_DIR=\""/usr/local/share/locale"\" -DPACKAGE_SRC_DIR=\"".. -fopenmp . "\"
PACKAGE_SRC_DIR 定义似乎“包含”了 -fopenmp 标志,这会将其隐藏在 g++ 中。还没找到原因...