JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.2:OpenMP API 用户指南
search filter icon
search icon

文档信息

前言

1.  OpenMP API 简介

2.  编译并运行 OpenMP 程序

2.1 要使用的编译器选项

2.2 OpenMP 环境变量

2.2.1 常见的 OpenMP 环境变量

2.2.2 Solaris Studio 特定的环境变量

2.3 处理器绑定

2.3.1 虚拟处理器 ID

2.3.2 逻辑 ID

2.3.3 解释为 SUNW_MP_PROCBIND 指定的值

2.3.4 与 OS 处理器集进行交互

2.4 栈和栈大小

2.5 检查和分析 OpenMP 程序

3.  实现定义的行为

4.  嵌套并行操作

5.  任务处理

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

7.  作用域检查

8.  性能注意事项

A.  子句在指令中的放置

B.  转换为 OpenMP

索引

2.4 栈和栈大小

正在执行的程序为执行该程序的初始(或主)线程维护一个主栈,并为每个从属线程维护不同的栈。栈是临时内存地址空间,用于保留子程序或函数引用调用期间的参数和自动变量。

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

使用 limit C-shell 命令或 ulimit ksh/sh 命令可显示或设置主栈的大小。

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

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

demo$ OMP_STACKSIZE=16384          <-Same, using Bourne/Korn shell
demo$ export OMP_STACKSIZE

可能需要反复试验才能确定最佳栈大小。如果栈大小太小,不足以满足线程的运行需要,可能会导致无提示数据损坏或段故障。如果无法确定是否发生栈溢出,请使用 -xcheck=stkovf 编译器选项编译 Fortran、C 或 C++ 程序,以强制在栈溢出时发生段故障。这样便可以在发生数据损坏前停止程序。