Oracle Solaris Studio 12.2:OpenMP API 用户指南

2.3.3 解释为 SUNW_MP_PROCBIND 指定的值

如果为 SUNW_MP_PROCBIND 指定的值为 TRUE,线程将以循环(共享)方式绑定到虚拟处理器。绑定的起始处理器由运行时库以获得最佳性能为目标进行确定。

如果为 SUNW_MP_PROCBIND 指定的目标为 FALSE,线程将不绑定到任何处理器。这是缺省设置。

如果为 SUNW_MP_PROCBIND 指定的值是非负整数,则该整数表示线程应绑定到的虚拟处理器的起始逻辑 ID。线程会从具有指定逻辑 ID 的处理器开始,以循环方式绑定到虚拟处理器,在绑定到逻辑 ID 为 n-1 的处理器后,返回到逻辑 ID 为 0 的处理器。

如果为 SUNW_MP_PROCBIND 指定的值是包含两个或更多非负整数的列表,则线程将以循环方式绑定到具有指定逻辑 ID 的虚拟处理器。将不会使用其逻辑 ID 不是指定逻辑 ID 的处理器。

如果为 SUNW_MP_PROCBIND 指定的值是用减号 ("-") 分隔的两个非负整数,则线程将以循环方式绑定到如下范围的虚拟处理器:以第一个逻辑 ID 开头,并以第二个逻辑 ID 结尾。将不会使用其逻辑 ID 在此范围之外的处理器。

如果为 SUNW_MP_PROCBIND 指定的值不符合上述任何一种形式,或者给定的逻辑 ID 无效,则会发出一条错误消息,并终止程序的执行。

请注意,OpenMP 运行时库 libmtsk 创建的线程数取决于环境变量、用户程序中的 API 调用以及 num_threads 子句。SUNW_MP_PROCBIND 指定线程应绑定到的虚拟处理器的逻辑 ID。线程将以循环方式绑定到该组处理器。如果程序中使用的线程数少于 SUNW_MP_PROCBIND 指定的逻辑 ID 数,则程序将不使用某些虚拟处理器。如果线程数大于 SUNW_MP_PROCBIND 指定的逻辑 ID 数,则一些虚拟处理器将绑定多个线程。