Oracle Solaris Studio 12.2:C 用户指南

B.2.123 -xopenmp[= i]

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

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

下表列出了 i 值:

表 B–35 -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 的缺省值可能会更改。可以通过显式指定适当的优化来避免警告消息。

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

为了取得最佳的性能,请确保在系统上安装了最新的 OpenMP 运行时库 libmtsk.so

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

有关 OpenMP 的信息,请参见《Solaris Studio 12 Update 1:OpenMP API 用户指南》。