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

退出打印视图

更新时间: 2016 年 7 月
 
 

5.3 SUNW_MP_PROCBIND

SUNW_MP_PROCBIND 是特定于 Oracle 的传统环境变量,用于指定处理器绑定。本节介绍可以为此变量设置的值。


注 -  SUNW_MP_PROCBIND 的值为非负整数,表示逻辑硬件线程 ID,可能与实际硬件线程 ID 不同。虽然硬件线程 ID 可能是连续的,但是仍然会存在间隔。例如,在 16 核 SPARC 系统中,硬件线程 ID 可以为 0、1、2、3、8、9、10、11、512、513、514、515、520、521、522、523。但是,逻辑处理器 ID 是以 0 开头的连续整数。如果系统中可用的硬件线程数为 n,则其逻辑处理器 ID 为 0、1...n-1。

    SUNW_MP_PROCBIND 的可能值包括:

  • 大写或小写的字符串 FALSETRUECOMPACTSCATTER。例如:

    % setenv SUNW_MP_PROCBIND "TRUE"
    • FALSE – OpenMP 线程将不绑定到任何处理器。这是缺省设置。

    • TRUE – OpenMP 线程将以循环方式绑定到硬件线程。绑定的起始硬件线程由运行时库根据性能最佳这一目标来确定。

    • COMPACT – OpenMP 线程将绑定到系统上尽可能靠近的硬件线程上。COMPACT 允许线程共享数据高速缓存,从而改进数据局域性。

    • SCATTER – OpenMP 线程将绑定到彼此远离的硬件线程上。此设置将为每个线程提供更多的内存带宽。

  • 非负整数 – 指示 OpenMP 线程应绑定到的硬件线程的起始逻辑 ID。OpenMP 线程将以循环方式绑定到硬件线程,从具有指定逻辑 ID 的硬件线程开始,在绑定到逻辑 ID 为 n-1 的硬件线程之后,将绕回到逻辑 ID 为 0 的硬件线程。

    例如:

    % setenv SUNW_MP_PROCBIND "2"
  • 包含两个或更多个非负整数的列表 – OpenMP 线程将以循环方式绑定到具有指定逻辑 ID 的硬件线程。将不使用逻辑 ID 不在指定之列的硬件线程。

    下例将两个线程绑定到硬件线程 2,一个线程绑定到硬件线程 4,一个线程绑定到硬件线程 6(如果使用了 4 个线程)。

    % setenv SUNW_MP_PROCBIND "2 2 4 6"
  • 由连字符 ("-") 分隔的两个非负整数 – OpenMP 线程将以循环方式绑定到某一范围内的硬件线程,该范围以第一个逻辑 ID 开头、以第二个逻辑 ID 结尾。第一个整数必须小于或等于第二个整数。将不使用逻辑 ID 不在指定范围内的硬件线程。

    例如:

    % setenv SUNW_MP_PROCBIND "0-6"

如果为 SUNW_MP_PROCBIND 指定的值无效,或者如果给定的逻辑 ID 无效,将出现错误消息且程序将终止执行。

如果 OpenMP 线程数大于可用的硬件线程数,则对于某些硬件线程,将有多个 OpenMP 线程绑定到它们。这种情况可能会对性能有负面影响。