非常适合 Xeon-phi 众核架构的应用程序
Applications well suited for Xeon-phi many-core architecture
由此 https://software.intel.com/en-us/videos/purpose-of-the-mic-architecture 我了解到具有复杂或大量随机内存访问的应用程序不太适合英特尔至强融核。这是因为该架构使用了 61 个内核和 8 个内存控制器。在 L1 和 L2 缓存未命中的情况下,最多需要 100 秒的周期才能将行提取到内存中并准备好供 CPU 使用。此类应用程序称为延迟限制。
然后,教程提到众核架构(仅限 Xeon-phi 协处理器)非常适合高度并行的同构代码。那里有两个问题:
什么叫同构代码?
哪些实际应用可以充分受益于 MIC 架构?
我将英特尔 MIC 架构视为“基于 x86 的 GPGPU”,如果您熟悉 GPGPU 的概念,您会发现自己熟悉英特尔麦克风。
同构集群 是具有多个执行单元(即 CPUs)的系统基础架构,所有执行单元都具有相同的功能。例如,具有四个 Intel Xeon 处理器的多核系统是同构的。
异构集群 是一个系统基础架构,具有多个具有不同功能的执行单元(即像 CPU 和 GPU)。例如,我的 Levono z510 及其 Intel i7 Haswell (4 CPUs)、Nvidia GT740M (GPU) 和 Intel HD Graphics 4600 (GPU) 是一个异构系统。
异构代码的一个示例可能是电子游戏。
一个视频游戏有一个控制代码,由一个 CPU 的一个代码执行,控制其他代理做什么,它发送着色器在 GPU 上执行,物理计算在其他核心或 GPU 上执行等等.
在此示例中,您需要在 CPU 上编写 运行 的代码(因此它是 "CPU aware")并在 GPU 上编写 运行 的代码(因此它是 "GPU aware" ).这实际上是通过使用不同的工具、不同的编程语言和不同的编程模型![=14来完成的=]
同构代码是不需要注意n种不同编程模型的代码,每种不同的代理一种.只是相同的编程模型、语言和工具。
看看 MPI 库的这个非常简单的 sample code。
代码都是用C写的,就是同样的程序只是走不同的流程而已
关于应用程序,这确实是一个广泛的问题...
如上所述,我将英特尔 MIC 视为基于 x86 ISA(至少是其中一部分)的 GPGPU。
一个特别有用(并在您链接的视频中列出)与集群系统一起工作的 SDK 是 OpenCL, it can be used for fast processing of images and computer vision 并且基本上适用于任何需要 相同算法的东西 运行数十亿次不同的输入(如密码学applications/brute强制)。
如果您在 Web 上搜索一些基于 OpenCL 的项目,您就会有所了解。
要回答你的第二个问题,最好问问我们自己“什么不能利用 MIC 架构?”,我们很快就会发现算法离我们越远从Stream Processing and the related topics, including the one of Kernel的概念来看,越不适合MIC。
首先直接回答您的直接问题 - 为了充分利用协处理器,您的代码应该能够使用大量线程并且应该矢量化。多少个线程?好吧,你有 60 个核心(+/- 取决于你获得的版本)和每个核心 4 个线程,在许多代码中每个核心大约有 2 个线程。有时即使不使用每个内核也可以获得良好的性能。但是矢量化非常重要;长(512 字节)向量是协处理器速度的重要来源。
现在开始编程。英特尔至强融核协处理器使用两种不同的编程方式——卸载和本机。
在卸载模型中,您编写一个程序,确定该代码的哪些部分具有足够的并行性以利用协处理器上的大量内核,并使用卸载指令标记这些部分。然后在这些卸载的部分中,您使用某种形式的并行机制(如 OpenMP)编写代码。 (异构)
在本机代码中,您不使用任何卸载指令,而是使用 -mmic 编译器指令。然后你 运行 代码直接放在协处理器上。您编写的代码将使用某种形式的并行机制,如 OpenMP,以利用协处理器拥有的大量内核。 (均匀)
这些编程模型的另一个变体是使用 MPI,通常与 OpenMP 一起使用。您可以使用卸载编程模型,在这种情况下,MPI 系统中的节点将成为系统中的主机节点。 (混合)或者,您可以使用本机编程模型,在这种情况下,您将协处理器视为系统中的另一个节点。 (如果主机和协处理器是节点,则为异构;如果仅使用协处理器,则为同构。)
您可能已经注意到,我所说的没有暗示主机和协处理器的独立编程风格。您可以进行一些优化,将 运行ning 中为协处理器编写的代码也保留在处理器上,但一般来说,您为协处理器编写的代码也可以针对 运行 进行编译在主机上只需更改编译器选项即可。
至于真实世界的应用程序,请参阅 https://software.intel.com/en-us/mic-developer/app-catalogs
由此 https://software.intel.com/en-us/videos/purpose-of-the-mic-architecture 我了解到具有复杂或大量随机内存访问的应用程序不太适合英特尔至强融核。这是因为该架构使用了 61 个内核和 8 个内存控制器。在 L1 和 L2 缓存未命中的情况下,最多需要 100 秒的周期才能将行提取到内存中并准备好供 CPU 使用。此类应用程序称为延迟限制。
然后,教程提到众核架构(仅限 Xeon-phi 协处理器)非常适合高度并行的同构代码。那里有两个问题:
什么叫同构代码?
哪些实际应用可以充分受益于 MIC 架构?
我将英特尔 MIC 架构视为“基于 x86 的 GPGPU”,如果您熟悉 GPGPU 的概念,您会发现自己熟悉英特尔麦克风。
同构集群 是具有多个执行单元(即 CPUs)的系统基础架构,所有执行单元都具有相同的功能。例如,具有四个 Intel Xeon 处理器的多核系统是同构的。
异构集群 是一个系统基础架构,具有多个具有不同功能的执行单元(即像 CPU 和 GPU)。例如,我的 Levono z510 及其 Intel i7 Haswell (4 CPUs)、Nvidia GT740M (GPU) 和 Intel HD Graphics 4600 (GPU) 是一个异构系统。
异构代码的一个示例可能是电子游戏。
一个视频游戏有一个控制代码,由一个 CPU 的一个代码执行,控制其他代理做什么,它发送着色器在 GPU 上执行,物理计算在其他核心或 GPU 上执行等等.
在此示例中,您需要在 CPU 上编写 运行 的代码(因此它是 "CPU aware")并在 GPU 上编写 运行 的代码(因此它是 "GPU aware" ).这实际上是通过使用不同的工具、不同的编程语言和不同的编程模型![=14来完成的=]
同构代码是不需要注意n种不同编程模型的代码,每种不同的代理一种.只是相同的编程模型、语言和工具。
看看 MPI 库的这个非常简单的 sample code。
代码都是用C写的,就是同样的程序只是走不同的流程而已
关于应用程序,这确实是一个广泛的问题...
如上所述,我将英特尔 MIC 视为基于 x86 ISA(至少是其中一部分)的 GPGPU。
一个特别有用(并在您链接的视频中列出)与集群系统一起工作的 SDK 是 OpenCL, it can be used for fast processing of images and computer vision 并且基本上适用于任何需要 相同算法的东西 运行数十亿次不同的输入(如密码学applications/brute强制)。
如果您在 Web 上搜索一些基于 OpenCL 的项目,您就会有所了解。
要回答你的第二个问题,最好问问我们自己“什么不能利用 MIC 架构?”,我们很快就会发现算法离我们越远从Stream Processing and the related topics, including the one of Kernel的概念来看,越不适合MIC。
首先直接回答您的直接问题 - 为了充分利用协处理器,您的代码应该能够使用大量线程并且应该矢量化。多少个线程?好吧,你有 60 个核心(+/- 取决于你获得的版本)和每个核心 4 个线程,在许多代码中每个核心大约有 2 个线程。有时即使不使用每个内核也可以获得良好的性能。但是矢量化非常重要;长(512 字节)向量是协处理器速度的重要来源。
现在开始编程。英特尔至强融核协处理器使用两种不同的编程方式——卸载和本机。
在卸载模型中,您编写一个程序,确定该代码的哪些部分具有足够的并行性以利用协处理器上的大量内核,并使用卸载指令标记这些部分。然后在这些卸载的部分中,您使用某种形式的并行机制(如 OpenMP)编写代码。 (异构)
在本机代码中,您不使用任何卸载指令,而是使用 -mmic 编译器指令。然后你 运行 代码直接放在协处理器上。您编写的代码将使用某种形式的并行机制,如 OpenMP,以利用协处理器拥有的大量内核。 (均匀)
这些编程模型的另一个变体是使用 MPI,通常与 OpenMP 一起使用。您可以使用卸载编程模型,在这种情况下,MPI 系统中的节点将成为系统中的主机节点。 (混合)或者,您可以使用本机编程模型,在这种情况下,您将协处理器视为系统中的另一个节点。 (如果主机和协处理器是节点,则为异构;如果仅使用协处理器,则为同构。)
您可能已经注意到,我所说的没有暗示主机和协处理器的独立编程风格。您可以进行一些优化,将 运行ning 中为协处理器编写的代码也保留在处理器上,但一般来说,您为协处理器编写的代码也可以针对 运行 进行编译在主机上只需更改编译器选项即可。
至于真实世界的应用程序,请参阅 https://software.intel.com/en-us/mic-developer/app-catalogs