Oracle® Solaris Studio 12.4:OpenMP API 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

2.1 编译器选项

要使用 OpenMP 指令实现显式并行化,请使用 ccCCf95 编译器选项 -xopenmp 编译程序。f95 编译器将 -xopenmp-openmp 作为同义词接受。

-xopenmp 标志接受下表中列出的关键字子选项。

-xopenmp=parallel
启用 OpenMP 指令的识别。
-xopenmp=parallel 的最低优化级别是 -xO3
如果优化级别低于 -xO3,则编译器会将优化级别提高到 -xO3 并发出警告。
-xopenmp=noopt
启用 OpenMP 指令的识别。
如果优化级别低于 -xO3,则编译器不提升它。
如果使用 -xopenmp=noopt 将优化级别显式设置为低于 -xO3,如 -xO2 -xopenmp=noopt,则编译器会发出错误。
如果没有使用 -xopenmp=noopt 指定优化级别,则会识别 OpenMP 指令,并相应地并行化程序,但不执行优化。
-xopenmp=stubs
不再支持此选项。
OpenMP 桩模块库是为方便用户而提供的。
要编译调用 OpenMP 运行时例程但忽略 OpenMP 指令的 OpenMP 程序,请在编译该程序时不要使用 -xopenmp 选项,并且将对象文件与 libompstubs.a 库链接。例如,
% cc omp_ignore.c -lompstubs
不支持同时与 libompstubs.a 和 OpenMP 运行时库 libmtsk.so 进行链接,因为这样可能会导致意外的行为。
-xopenmp=none
禁用对 OpenMP 指令的识别,并且不更改优化级别。

请注意以下其他几点:

  • 如果未在命令行中指定 -xopenmp,则缺省情况下编译器会采用 –xopenmp=none(禁用对 OpenMP 指令的识别)。

  • 如果指定 -xopenmp 但不带关键字子选项,则编译器会采用 –xopenmp=parallel

  • 指定 -xopenmp=parallel-xopenmp=noopt 会将 _OPENMP 宏定义为具有十进制值 201307L(在 C/C++ 中),或具有值 201307(在 Fortran 中),其中 2013 是 OpenMP 4.0 规范的年份,07 是月份。

  • 使用 dbx 调试 OpenMP 程序时,请使用 -xopenmp=noopt -g 进行编译,以启用全部调试功能。

  • 为避免出现编译警告消息,请显式指定适当的优化级别,而不是依赖于可能会发生变化的缺省值。

  • 对于 Fortran,使用 -xopenmp-xopenmp=parallel-xopenmp=noopt 编译表示 -stackvar。请参见堆栈和堆栈大小

  • 在单独的步骤中编译和链接 OpenMP 程序时,请在各个编译及链接步骤中包含 -xopenmp

  • -xvpara 选项与 -xopenmp 选项一起使用可显示有关潜在 OpenMP 编程问题的编译器警告(请参见Chapter 7, 作用域检查)。