1

从这个https://software.intel.com/en-us/videos/ purpose-of-the-mic-architecture 我了解到具有复杂或大量随机内存访问的应用程序不太适合英特尔至强融芯片。这是因为该架构使用 61 个内核和 8 个内存控制器。在 L1 和 L2 缓存未命中的情况下,最多需要 100 秒的周期才能将行读取到内存中并准备好供 CPU 使用。这样的应用程序被称为延迟绑定。

然后,本教程提到多核架构(仅限 Xeon-phi 协处理器)非常适合高度并行的同构代码。来自那里的两个问题:

  1. 什么叫做同构代码?

  2. 哪些实际应用程序可以充分受益于 MIC 架构?

4

2 回答 2

2

我将英特尔 MIC 架构视为“基于 x86 的 GPGPU ”,如果您熟悉GPGPU的概念,您会发现自己对英特尔 MIC 很熟悉。


同构集群是具有多个执行单元(即 CPU)的系统基础设施,它们都具有相同的特性。例如,具有四个 Intel Xeon 处理器的多核系统是同构的。

异构集群是具有多个具有不同特性的执行单元(例如CPU和GPU)的系统基础设施。例如,我的 Levono z510 及其 Intel i7 Haswell(4 个 CPU)、Nvidia GT740M(GPU)和 Intel HD Graphics 4600(GPU)是一个异构系统。

异构代码的一个示例可能是视频游戏。
视频游戏有一个控制代码,由一个 CPU 的一个代码执行,控制其他代理做什么,它发送着色器在 GPU 上执行,物理计算在其他内核或 GPU 上执行等等。
在此示例中,您需要编写在 CPU 上运行的代码(因此它是“CPU 感知的”)和在 GPU 上运行的代码(因此它是“GPU 感知的”)。这实际上是通过使用不同的工具不同的编程语言和不同的编程模型来完成的!

同构代码是不需要了解n 个不同编程模型的代码,每个模型对应一种不同的代理。它只是相同的编程模型、语言和工具。
看看MPI库的这个非常简单的示例代码。 代码都是用C编写的,它是同一个程序,只是采用不同的流程。


关于应用程序,这确实是一个广泛的问题......

如上所述,我将英特尔 MIC 视为基于 x86 ISA 的 GPGPU(至少是其中的一部分)。

与集群系统一起工作特别有用(并在您链接的视频中列出)的 SDK 是OpenCL,它可用于快速处理图像和计算机视觉,基本上可用于需要相同算法以不同方式运行数十亿次的任何事物输入(如加密应用程序/暴力破解)。
如果你在网上搜索一些基于 OpenCL 的项目,你就会知道。

要回答你第二个问题,最好问问自己“什么不能利用 MIC 架构? ”我们很快就会发现,算法与流处理的概念和相关主题越远,包括Kernel越少,越适合MIC。

于 2015-07-13T10:52:21.907 回答
0

首先直接回答您的直接问题 - 为了充分利用协处理器,您的代码应该能够使用大量线程并且应该矢量化。多少线程?好吧,您有 60 个内核(+/- 取决于您获得的版本)和每个内核 4 个线程,在许多代码中每个内核有 2 个线程左右的最佳位置。有时即使您不使用每个内核,也可以获得良好的性能。但是矢量化非常重要;长(512 字节)向量是协处理器速度的重要来源。

现在,开始编程。英特尔至强融核协处理器使用两种不同类型的编程 - 卸载和本机。

在卸载模型中,您编写一个程序,确定该代码的哪些部分具有足够的并行性以利用协处理器上的大量内核,并用卸载指令标记这些部分。然后在这些卸载的部分中,您使用某种形式的并行性编写代码,例如 OpenMP。(异质)

在本机代码中,您不使用任何卸载指令,而是使用 -mmic 编译器指令。然后直接在协处理器上运行代码。您编写的代码将使用某种形式的并行性,例如 OpenMP,以利用协处理器拥有的大量内核。(同质)

这些编程模型的另一个变体是使用 MPI,通常除了 OpenMP 之外。您可以使用卸载编程模型,在这种情况下,您 MPI 系统中的节点将是您系统中的主机节点。(混合)或者,您可以使用本机编程模型,在这种情况下,您将协处理器视为系统中的另一个节点。(如果主机和协处理器是节点,则为异构;如果仅使用协处理器,则为同构。)

您可能已经注意到,我所说的一切都没有暗示主机和协处理器的编程风格不同。您可以进行一些优化,以防止为协处理器编写的代码也可以在处理器上运行,但通常,您为协处理器编写的代码也可以通过更改编译器选项在主机上编译和运行.

至于现实世界的应用程序,请参阅https://software.intel.com/en-us/mic-developer/app-catalogs

于 2015-07-13T17:30:18.230 回答