Intel Xeon Phi - 运行多个单线程可执行文件

时间:2015-10-01 07:34:46

标签: c++ concurrency xeon-phi

我正在试图找出是否可以使用英特尔至强融合协处理器“并行化”以下问题:

假设我有2000个文件需要由单线程可执行文件处理。对于每个文件,可执行文件读取它,执行其操作并将其输出到相应的输出文件,然后退出。

例如:

FILES=/path/to/*
for f in $FILES
do
    # take action on each file
    ./executable $f outFileCorrespondingTo_f
done

这些工具不是为了多线程执行或循环遍历文件而编码的,我们也不想在其代码中更改任何内容。它们是用C语言编写的,带有一些外部库。

我的问题是:

  1. 这种“脚本循环”是否可以在Xeon Phi的本机操作系统上运行,以便并行化对可执行文件的调用,以便它们在所有内核上同时运行?是否足够“通用”?

  2. 文件本身相当小,所以它的8GB内存足以在运行时存储数据,但不能保留设备上的所有输出,所以我需要在主机上输出。所以我的第二个问题是:这种内存交换是否可能“外部”?

  3. 即。对于每次执行可执行文件,都没有编码到工具中,而是由主机操作系统和设备管理。

    1. 如果可以,它是否可以以任何方式提升性能,或者内存和线程分配瓶颈是否过于密集?基本上每次执行都需要几秒钟,具体取决于输入文件的长度,但我非常有信心这比传输文件所需的时间长几个数量级。

2 个答案:

答案 0 :(得分:0)

Xeon phi协处理器运行Linux操作系统的功能完备版本,因此您在Linux机器上习惯的大部分内容也可能适用于Xeon Phi。

现在,针对您的具体问题,我想GNU Parallel应该只允许您一口气做您想做的事。简单地说,您必须将文件系统安装在卡上,以便您可以直接访问文件,但这只是Xeon Phi节点的标准内容。请注意,这将在主机和协处理器之间的PCIe链路上产生一些流量以进行文件传输。

关于性能,这很难说:Xeon Phi核心的较低单线程性能以及传输时间肯定会在这个领域引起很大的冲击,但是你可以从设备中提取的并行性水平可能非常高很好地解决了这个问题,具体取决于您的工作量是如何计最好的答案是你尝试一下......

答案 1 :(得分:0)

这是吉尔斯给出的答案的补充。

是的,Xeon Phi应该能够在基本的操作级别上做你想做的事。

即便如此,出于某些原因,我认为这是错误的平台

  • Xeon Phi上的每个核心都是奔腾核心。虽然它是增强的(4线程/核心,512位矢量引擎等),它仍然是奔腾。这意味着它将标量代码作为奔腾运行。您的任务听起来像是一大堆并行运行的串行进程。因此,每个进程都将像在Pentium上运行一样运行。
  • 要获得卓越的性能,您需要能够很好地并行化的代码(读取为OpenMP,轻量级线程和线程池)以及矢量化(利用512位向量引擎)。如果没有这两种增强功能,那么你就可以在Pentium上运行,并且需要很多Pentiums。
  • 通过PCIe总线移动数据的速度很慢。如果要传输大量文件,虽然可以通过隐藏延迟(取决于您的应用程序)来减少争用,但这可能会更慢。如果你在启动时用244个文件读取请求命中PCIe总线,那就是很多争论。即使在稳定的状态下,听起来你在任何给定时间都会读取超过20个文件(我怀疑我们正在执行标量代码作为奔腾)。

现在KNL架构可能更适合您的需求,但目前还没有。

如果你仍然认为Xeon Phi可能适合你想做的事情,你可以问Xeon Phi Intel forum专家。如果您的应用程序是专有/敏感的,您可以将英特尔专家作为私人消息。