SUNW_MP_PROCBIND 是特定于 Oracle 的传统环境变量,用于指定处理器绑定。本节介绍可以为此变量设置的值。
SUNW_MP_PROCBIND 的可能值包括:
大写或小写的字符串 FALSE、TRUE、COMPACT 或 SCATTER。例如:
% 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 线程绑定到它们。这种情况可能会对性能有负面影响。