Oracle® Developer Studio 12.5:OpenMP API 用户指南

退出打印视图

更新时间: 2016 年 7 月
 
 

9.6 处理器绑定(线程关联性)

OpenMP 4.0 规范将术语处理器定义为实现定义的硬件单元,在处理器上可以执行一个或多个 OpenMP 线程。

在该实现中,术语处理器定义为可以调度、绑定和执行一个或多个 OpenMP 线程的最小硬件执行单元,如 processor_bind(2) Oracle Solaris 手册页中所述。处理器的同义词包括 CPU、虚拟处理器和硬件线程。为了清楚起见,在本手册中统一使用术语硬件线程。

在该实现中,与 OMP_PLACES 环境变量一起使用的抽象名称线程核心插槽的精确定义如下所示:

  • 线程指计算机上的硬件线程。

  • 核心指计算机上的物理核心。

  • 插槽指计算机上的物理插槽(处理器芯片)。

有关更多信息,请参见OMP_PLACES 和 OMP_PROC_BIND。Oracle Developer Studio 与 OpenMP 4.0 线程关联性相关的实现定义行为如下所示:

  • 如果采用 close 线程绑定策略,当 T > P 并且 P 不能整除 T 时,向位置分配线程的方法如下所示:首先,为 P 个位置中的每个位置分配 S = floor(T/P) 个线程;分配给一个位置的线程 ID 是组中线程 ID 的连续子集。其次,向前 T - (P*S) 个位置(从父线程的位置开始,并采用绕回方法)中的每个位置分配一个额外的线程。

  • 如果采用 spread 线程绑定策略,当 T > P 并且 P 不能整除 T 时,向子分区分配线程的方法如下所示:首先,向 P 个子分区中的每个分区分配 S = floor(T/P) 个线程;分配给一个子分区的线程 ID 是组中线程 ID 的连续子集。其次,向前 T - (P*S) 个子分区(从包含父线程位置的子分区开始,并采用绕回方法)中的每个子分区分配一个额外的线程。

  • 如果无法完成关联性请求,将以非零状态退出进程。

  • OMP_PLACES 环境变量中指定的数字指硬件线程 ID。

  • 通过将编号 n 附加到抽象名称来创建 n 个元素的位置列表时,该位置列表将由 N 个连续资源组成,从构造位置列表时正在执行主线程的硬件线程所在的资源开始,在到达最后一个可用命名资源后将发生绕回分配。

  • 如果请求的资源超过计算机上可用的资源,将发出错误消息,并以非零状态退出进程。如果一个资源至少包含一个联机硬件线程,则该资源可用。

  • 当执行环境无法将 OMP_PLACES 列表中的数值(显式定义或从某个间隔隐式派生)映射到目标平台上的硬件线程时,或者如果它映射到不可用的硬件线程,将发出错误消息,并以非零状态退出进程。

  • 当使用抽象名称定义 OMP_PLACES 环境变量时,该抽象名称表示的每个资源单元将分配为一个位置。可通过计数 n(其值不大于计算机上的可用单元总数)指定分配的单元数。在 Oracle Solaris 平台上,管理员使用 psrset(1M) 优先保留的硬件线程被视为不可用。如果 OMP_PLACES 定义的集中没有可用的硬件线程,将发出错误消息并以非零状态退出进程。

  • 如果无法实现并行构造的关联性请求(例如,由于将 OpenMP 线程绑定到硬件线程的系统调用失败),则产生的行为不明确。

  • 当使用 OMP_PLACES 时,可以使用间隔指定位置。该实现假定,当间隔指定位置序列时,length 是该序列中的位置数,而 stride 是分隔序列中连续位置的硬件线程 ID 数。如果未指定 stride 值,将采用单元距值。