要使用 OpenMP 指令实现显式并行化,请使用 cc、CC 或 f95 选项标志 -xopenmp 编译程序。此标志可带有可选关键字参数。(f95 编译器将 -xopenmp 和 -openmp 作为同义词接受。)
-xopenmp 标志接受下列关键字子选项。
|
启用 OpenMP pragma 的识别。-xopenmp=parallel 的最低优化级别是 -xO3。如有必要,编译器会将优化级别从较低级别更改为 -xO3,并发出警告。 |
|
|
启用 OpenMP pragma 的识别。如果优化级别低于 -xO3,则编译器不会提升它。如果将优化级别显式设置为低于 -xO3 的级别,如 -xO2 -openmp=noopt,则编译器会报告错误。如果没有使用 -openmp=noopt 指定优化级别,则会识别 OpenMP pragma,并相应地并行化程序,但不执行优化。 |
|
|
不再支持此选项。OpenMP 桩模块库是为方便用户而提供的。要编译一个调用 OpenMP 库例程但忽略 OpenMP pragmas 的 OpenMP 程序,请在编译该程序时不要使用 -xopenmp 选项,并且将目标文件与 libompstubs.a 库链接。例如,% cc omp_ignore.c -lompstubs 不支持同时与 libompstubs.a 和 OpenMP 运行时库 libmtsk.so 进行链接,因为这样可能会导致意外的行为。 |
|
|
禁用对 OpenMP pragma 的识别,并且不更改优化级别。 |
附加说明:
如果未在命令行中指定 —xopenmp,则编译器会假定使用 —xopenmp=none(禁用对 OpenMP pragma 的识别)。
如果指定了 —xopenmp 但不带关键字子选项,则编译器会假定使用 —xopenmp=parallel。
指定 -xopenmp=parallel 或 noopt 时,会将 _OPENMP 预处理程序标记定义为 YYYYMM(具体地讲,对于 C/C++,将其定义为 200505L;对于 Fortran 95,将其定义为 200505)。
使用 dbx 调试 OpenMP 程序时,请使用 -xopenmp=noopt -g 进行编译。
-xopenmp 的缺省优化级别在以后的发行版中可能会更改。通过显式指定适当的优化级别,可避免出现编译警告消息。
对于 Fortran 95,-xopenmp、-xopenmp=parallel、-xopenmp=noopt 会自动添加 -stackvar。
在分步编译并链接 OpenMP 程序时,请在各个编译及链接步骤中包含 -xopenmp。
使用 C 的 -xvpara 选项或 Fortran 95 的 —vpara 选项可显示编译器并行化消息。
为了获得最佳性能和功能,请确保正在运行的系统上已安装了最新的 OpenMP 运行时库 libmtsk.so。