跳过导航链接 | |
退出打印视图 | |
Oracle Solaris Studio 12.3:OpenMP API 用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
要启用自动确定作用域功能,必须使用 -xopenmp 在优化级别 -xO3 或更高级别上编译程序。如果仅使用 -xopenmp=noopt 编译程序,将不会启用自动确定作用域功能。
C 和 C++ 中的并行和任务自动作用域只能处理基本数据类型:整型、浮点和指针。
任务自动确定作用域功能不能处理数组。
C 和 C++ 中的任务自动确定作用域不能处理全局变量。
任务自动确定作用域不能处理非绑定任务。
任务自动确定作用域不能处理在语法上包含在其他任务中的任务。例如:
#pragma omp task /* task1 */ { ... #pragma omp task /* task 2 */ { ... } ... }
在示例中,由于 task2 在语法上嵌套在 task1 中,因此编译器不会尝试对其启用自动确定作用域功能。编译器会将 task2 中引用的所有变量的作用域确定为 SHARED,并将 task2 视为如同指定了 IF(.FALSE.) 或 if(0) 子句一样。
只识别 OpenMP 指令,并且只能在分析中使用。无法识别对 OpenMP 运行时例程的调用。例如,如果程序使用 omp_set_lock() 和 omp_unset_lock() 来实现临界段,编译器将无法检测是否存在临界段。如果可能,请使用 CRITICAL 和 END CRITICAL 指令。
在数据争用分析中,只能识别和使用通过 OpenMP 同步指令(如 BARRIER 和 MASTER)指定的同步。不识别用户实现的同步,如忙等待。