Sun Studio 12:C 用户指南

B.2.118 -xopenmp[= i]

使用 -xopenmp 选项可通过 OpenMP 指令启用显式并行化。要在多线程环境中运行已并行化的程序,必须在执行之前设置 OMP_NUM_THREADS 环境变量。

要启用嵌套并行操作,必须将 OMP_NESTED 环境变量设置为 TRUE。缺省情况下,禁用嵌套并行操作。

下表列出了 i 值:

表 B–33 -xopenmp 标志

值 

含义 

parallel

启用 OpenMP pragma 的识别。-xopenmp=parallel 时的优化级别为 -x03。如有必要,编译器会将优化级别更改为 -x03 并发出警告。

该标志还定义预处理程序标记 _OPENMP

noopt

启用 OpenMP pragma 的识别。如果优化级别低于 -O3,编译器将不会提高优化级别。 

如果将优化级别显式设置为低于 -O3,如同在 cc -O2 -xopenmp=noopt 中一样,编译器会发出错误。如果没有使用 -xopenmp=noopt 指定优化级别,则识别 OpenMP pragma,并相应地并行化程序,但不执行优化。

该标志还定义预处理程序标记 _OPENMP

none

该标志为缺省设置;它不启用 OpenMP pragma 识别,不更改程序的优化级别且不预定义任何预处理程序标记。 

如果指定 -xopenmp 但未给定值,编译器将假定 -xopenmp=parallel。如果不指定 -xopenmp,编译器将假定 -xopenmp=none

如果使用 dbx 调试 OpenMP 程序,那么编译时选用 -g-xopenmp=noopt 可以在并行区设置断点并显示变量内容。


注 –

请不要将 -xopenmp-xexplicitpar-xparallel 一起指定。


在以后的发行版中,-xopenmp 的缺省值可能会更改。可以通过显式指定适当的优化来避免警告消息。

如果在生成任何 .so 时使用了 -xopenmp,则链接可执行文件时必须使用 -xopenmp,并且可执行文件的编译器不得早于用 -xopenmp 生成 .so 时使用的编译器。这在编译包含 OpenMP 指令的库时尤其重要。有关在编译和链接时都必须指定的所有编译器选项的完整列表,请参见表 A–2

请确保在系统上安装了最新的 OpenMP 运行时库 (libmtsk.so) 修补程序,以获得最佳性能。

有关特定于 OpenMP 的 C 实现的更多信息,请参见3.2 OpenMP 并行化

有关 OpenMP 的信息,请参见《Sun Studio 12: OpenMP API User’s Guide》