JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:OpenMP API 用户指南     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  OpenMP API 简介

2.  编译并运行 OpenMP 程序

2.1 编译器选项

2.2 OpenMP 环境变量

2.2.1 OpenMP 环境变量缺省值

2.2.2 Oracle Solaris Studio 环境变量

2.2.2.1 PARALLEL

2.2.2.2 SUNW_MP_WARN

2.2.2.3 SUNW_MP_THR_IDLE

2.2.2.4 SUNW_MP_PROCBIND

2.2.2.5 SUNW_MP_MAX_POOL_THREADS

2.2.2.6 SUNW_MP_MAX_NESTED_LEVELS

2.2.2.7 STACKSIZE

2.2.2.8 SUNW_MP_GUIDED_WEIGHT

2.2.2.9 SUNW_MP_WAIT_POLICY

2.3 处理器绑定

2.3.1 虚拟和逻辑处理器 ID

2.3.2 解释为 SUNW_MP_PROCBIND 指定的值

2.3.3 与 OS 处理器集进行交互

2.4 堆栈和堆栈大小

2.5 检查和分析 OpenMP 程序

3.  实现定义的行为

4.  嵌套并行操作

5.  任务处理

6.  自动确定变量的作用域

7.  作用域检查

8.  性能注意事项

A.  子句在指令中的放置

索引

2.4 堆栈和堆栈大小

正在执行的程序为执行该程序的初始(或主)线程维护一个主堆栈,并为每个从属线程维护不同的堆栈。堆栈是临时内存地址空间,用于保留子程序或函数引用调用期间的参数和自动变量。如果线程堆栈的大小太小,则可能会出现堆栈溢出,从而导致无提示数据损坏或段故障。

使用 f95 -stackvar 选项编译 Fortran 程序会强制在堆栈中分配局部变量和数组,就好像它们是自动变量。显式并行化的程序暗指对 OpenMP 程序使用 -stackvar,因为该选项可提高优化器将循环中的调用并行化的能力。(有关 -stackvar 标志的讨论,请参见 Fortran 用户指南。)但是,如果为堆栈分配的内存不足,该使用会导致堆栈溢出。

使用 limit C-shell 命令或者 ulimit Bourne 或 Korn shell 命令可显示或设置初始线程(或主线程)的堆栈大小。一般而言,初始线程的缺省堆栈大小为 8 MB。

OpenMP 程序的每个从属线程均具有其自身的线程堆栈。此堆栈模拟初始(或主)线程堆栈,但对于线程是唯一的。线程的 PRIVATE 数组和变量(对于线程是局部的)在线程堆栈中分配。在 32 位 SPARC V8 和 x86 平台上,缺省大小为 4 MB;在 64 位 SPARC V9 和 x86 平台上,缺省大小为 8 MB。从属线程堆栈的大小通过 OMP_STACKSIZE 环境变量来设置。

demo% setenv OMP_STACKSIZE 16384   <-Set thread stack size to 16 Mb (C shell)

demo$ OMP_STACKSIZE=16384   <-Set thread stack size to 16 Mb (Bourne/Korn shell)
demo$ export OMP_STACKSIZE

要检测堆栈溢出,请使用 -xcheck=stkovf 编译器选项编译 Fortran、C 或 C++ 程序,以强制在堆栈溢出时发生段故障,从而在发生任何数据损坏前停止程序。