目前,程序的起始线程创建绑定线程。绑定线程一旦创建,将会参与执行程序的并行部分(并行循环、并行区域等),并在程序的串行部分运行时保持旋转等待状态。在程序终止之前,这些绑定线程不会休眠或停止。并行化程序在专用系统上运行时,使这些线程保持旋转等待状态通常可达到最佳性能。不过,保持旋转等待的线程会占用系统资源。
使用 SUNW_MP_THR_IDLE 环境变量控制每个线程在完成其一份并行作业后的状态。
% setenv SUNW_MP_THR_IDLE value |
您可以用 spin 或 sleep[n s|n ms] 替换 value。缺省值为 sleep,它在旋转等待 n 个单位后将线程置于休眠状态。等待单位可以是秒(s,为缺省单位)或毫秒 (ms),其中 1s 表示 1 秒;10ms 表示 10 毫秒。不带参数的 sleep 在线程完成并行任务后使线程立即进入休眠状态。sleep、sleep0、sleep0s 和 sleep0ms 均等效。如果新作业在达到 n 个单位时间之前到达,线程将停止旋转等待并开始执行新作业。
另一个选项 spin 表示线程在完成一个并行任务之后应保持旋转(或忙等待)状态,直到一个新的并行任务到来为止。
如果 SUNW_MP_THR_IDLE 包含非法值或未设置,那么 spin 将用作缺省值。