从这个https://software.intel.com/en-us/videos/purpose-of-the-mic-architecture我明白,具有复杂或大量随机内存访问的应用程序不适合英特尔至强通。这是因为该架构使用61个内核和8个内存控制器。在L1和L2高速缓存未命中的情况下,需要多达100个周期才能将线路读入内存并使其可供CPU使用。此类应用程序称为延迟限制。
然后,该教程提到许多核心架构(仅限Xeon-phi协处理器)非常适合高度并行的同类代码。那里有两个问题:
什么叫同类代码?
什么是可以从MIC架构中充分受益的真实应用程序?
答案 0 :(得分: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 库,请查看这个非常简单的sample code 代码全部用 C 编写,相同的程序只是采用不同的流程。
关于申请,这真的是一个广泛的问题......
如上所述,我将Intel MIC视为基于x86 ISA的GPGPU(至少是其中的一部分)。
用于群集系统的SDK特别有用(并在您关联的视频中列出)OpenCL,它可用于快速processing of images and computer vision,基本上用于需要相同的任何内容算法将以不同的输入运行数十亿次(如加密应用程序/强制执行) 如果您在网上搜索一些基于OpenCL的项目,您将会有一个想法。
要回答第二个问题,最好问自己" 什么不能利用MIC架构?"我们很快就会发现,算法越远离Stream Processing的概念和相关主题,包括Kernel之一,它就越适合MIC。
答案 1 :(得分:0)
首先直接回答您的直接问题 - 为了充分利用协处理器,您的代码应该能够使用大量线程并且应该进行矢量化。多少线程?好吧,你有60个核心(+/-取决于你得到的版本)和每个核心4个线程,在许多代码上每个核心有2个线程的最佳位置。即使您不使用每个核心,有时您也可以获得良好的性能。但矢量化非常重要;长(512字节)向量是协处理器上的一个重要来源。
现在,开始编程。英特尔至强融核协处理器使用两种不同的编程 - 卸载和本机编程。
在卸载模型中,您编写一个程序,确定该代码的哪些部分具有足够的并行性,以利用协处理器上的大量内核,并使用offload指令标记这些部分。然后在这些卸载的部分中,使用某种形式的并行性编写代码,如OpenMP。 (多相)
在本机代码中,您不使用任何offload指令,而是使用-mmic编译器指令。然后直接在协处理器上运行代码。您编写的代码将使用某种形式的并行机制(如OpenMP)来利用协处理器所具有的大量内核。 (均相)
这些编程模型的另一个变体是使用MPI,通常是在OpenMP之外。您可以使用卸载编程模型,在这种情况下,MPI系统中的节点将成为系统中的主机节点。 (混合)或者,您可以使用本机编程模型,在这种情况下,您将协处理器视为系统中的另一个节点。 (如果主机和协处理器是节点,则为异构;如果仅使用协处理器,则为同类。)
您可能已经注意到,我所说的内容并不意味着主机和协处理器具有单独的编程风格。您可以进行一些优化,以保持为协处理器编写的代码在处理器上运行,但是,通常,您为协处理器编写的代码也可以通过更改编译器选项来编译并在主机上运行
就真实世界的应用而言,请参阅https://software.intel.com/en-us/mic-developer/app-catalogs