OpenMP* 线程相似性控制

Intel® Composer XE for MIC Compi Document

面向 MIC Compi 的英特尔® Composer XE 文档

面向英特尔® MIC 架构的编译器方法

面向英特尔® MIC 架构的编译器方法
高效并行化,OpenMP 线程相似性控制

概述

英特尔® OpenMP* 运行时库能够将 OpenMP 线程与物理处理单元联系在一起。使用环境变量 KMP_AFFINITY 控制界面。根据不同的系统(机器)拓扑、应用和操作系统,线程相似性可对应用速度产生极大的影响。

主题

线程相似性将某些线程(虚拟执行单元)的执行限制在多处理器电脑的一小部分物理计算单元中。根据机器的拓扑结构,线程相似性可对程序的执行速度产生显著的影响。

OpenMP 线程处理和相似性方面有两点需要考虑:第一,确定要使用的线程数;第二,如何将线程绑定到特定处理器内核上。

线程化

首先,英特尔® 至强融核协处理器的每个内核可支持 4 个线程上下文。因此,首先要考虑该处理器的最佳应用线程数量是多少。这取决于您的应用程序。总体而言,更多线程有助于避免应用的固有延迟(1 条线程停止并等待访问内存时,另外 1-3 条线程在处理器上调度)。在英特尔® 至强架构上,用户发现 cpu 密集型 HPC 应用通常不会受益于超线程技术。而在英特尔® 集成众核架构(英特尔® MIC 架构)上则不是这样。因此,一定要尝试使用英特尔® 至强融核协处理器上一定数量的可用 4 线程上下文。

对卸载程序的最佳建议:尝试不同数量的线程,从 N-1 个线程到 4x(N-1) 个线程,N 代表处理器上物理内核的数量。可以运行四个简单的试验:使用 N-1 个线程来运行应用。运行2x(N-1)3x(N-1) 4x(N-1) 个线程,来确定增加线程上下文是否可以提升您的应用性能。为什么是 N-1 而不是 N 呢?操作系统开销——操作系统和 MPSS 线程占用处理器周期,工作线程占用运行操作系统线程的内核会导致效率低下。然后自然就产生了第二个问题:如何将线程放置于英特尔® 至强融核协处理器上。具体而言,操作系统线程使用哪个内核,以及如何避免应用线程使用该内核。同样,对于在本地运行的应用而言,您可以尝试所有可用的线程 (4xN),因为这种情况下操作系统的开销更低。请注意,卸载和本地执行的 OpenMP 参数默认值是不同的。

相似性和 KMP_AFFINITY 环境变量

查看使用 KMP_AFFINITY 创建映射到 OS proc ID OpenMP* 线程

如果您不熟悉 OpenMP 线程相似性以及对环境变量 KMP_AFFINITY 的使用,请首先熟悉您编译器文档中的概念。请首先阅读编译器 XE 用户与参考指南(线程相似性接口英特尔® MIC 架构的编程部分)。此处是线程关联性接口的在线文档

如果您非常熟悉 OpenMP 线程相似性控制,只是想获得处理器映射方面的快速指南,请在 MIC 上尝试两个 KMP_AFFINITY 选项:

export KMP_AFFINITY=granularity=fine,balanced
export KMP_AFFINITY=granularity=fine,compact

KMP_BLOCKTIME 是另一个影响性能的 OMP 参数。它能够影响 OMP 运行时设置(线程在休眠前的等待时间)——该参数的默认值是 200(毫秒)。OpenMP 在等待间隔内保留其线程池,等待任一并行区成为另一个 OpenMP 区。您可以设置 KMP_BLOCKTIME=<0, 50, infinite> ,查看是否能提升性能。通常情况下,0 值适合存在大量不平衡负载的情况。(请在卸载应用中注意这一点,您必须使用环境变量 MIC_KMP_BLOCKTIME 以及 MIC_ENV_PREFIX=MIC 来设置适当的值。

要点

OpenMP 运行时提供的机制可以将 OpenMP 工作线程绑定到特定处理器上。英特尔® 至强融核协处理器的每个内核可支持 4 线程上下文。一般情况下,用户可通过使用大部分线程上下文提升应用性能。因此,您需要在英特尔® 至强融核协处理器上创建 N-1 4x(N-1) 条线程,N 代表内核数量。 运行四个简单的试验:使用 N-1 条线程来运行应用。运行2x(N-1)3x(N-1) 4x(N-1) 个线程,来确定增加线程上下文是否可以提升您的应用性能。确定适合每个应用的最佳线程数量。接下来,绕开运行 OS 线程的内核,从而避免与 OS 线程产生冲突。尝试示例设置:

·         KMP_AFFINITY=granularity=fine,balanced

·         KMP_AFFINITY=granularity=fine,compact

下一步

要在英特尔® 至强融核协处理器上成功调试您的应用,请务必通读此指南,并点击文中的超链接查看相关内容。本指南提供了实现最佳应用性能所要执行的步骤。

返回高效并行化章节

 

Einzelheiten zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.