C++ 英特尔至强Phi-运行多个单线程可执行文件

C++ 英特尔至强Phi-运行多个单线程可执行文件,c++,concurrency,xeon-phi,C++,Concurrency,Xeon Phi,我正在尝试找出是否可以使用Intel Xeon Phi协处理器“并行化”以下问题: 假设我有2000个文件需要由一个单线程可执行文件处理。对于每个文件,可执行文件读取它,执行它的操作并将其输出到相应的输出文件,然后退出 例如: FILES=/path/to/* for f in $FILES do # take action on each file ./executable $f outFileCorrespondingTo_f done 这些工具的编码不是为了多线程执行,也

我正在尝试找出是否可以使用Intel Xeon Phi协处理器“并行化”以下问题:

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

例如:

FILES=/path/to/*
for f in $FILES
do
    # take action on each file
    ./executable $f outFileCorrespondingTo_f
done
这些工具的编码不是为了多线程执行,也不是为了在文件中循环,我们现在也不希望更改它们的代码中的任何内容。它们是用C语言编写的,带有一些外部库

我的问题是:

  • 这种“脚本循环”是否可以在Xeon Phi的本机操作系统上运行,从而使对可执行文件的调用并行化,从而在其所有内核上并发运行?这“通用”就足够了吗

  • 文件本身非常小,因此它的8GB内存足以在运行时存储数据,但不能将所有输出保存在设备上,因此我需要在主机上进行输出。所以我的第二个问题是:这种内存交换是“外部”的吗

  • i、 e.不是编码到工具中,而是由主机操作系统和设备为每次执行可执行文件进行管理

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

  • Xeon phi协处理器运行的是功能非常全面的Linux操作系统版本,因此您在Linux机箱上使用的大部分功能可能也适用于Xeon phi

    现在,对于你的具体问题,我想这应该能让你一口气做你想做的事。简单地说,您必须将文件系统安装在卡上,以便直接访问文件,但这只是Xeon Phi节点的标准配置。请注意,这将在主机和协处理器之间的PCIe链路上为文件传输生成一些流量


    关于性能,这很难说:Xeon Phi内核较低的单线程性能以及传输时间无疑意味着这一领域的巨大成功,但您可以从设备中提取的并行级别可能很好地克服这一点,这取决于您的工作负载的计算密集程度。最好的答案是让你试一试…

    这是对Gilles给出的答案的补充

    是的,Xeon Phi应该能够在基本操作级别执行您想要的操作

    即便如此,出于以下几个原因,我认为这是一个错误的平台

    • 至强Phi上的每个核心都是奔腾核心。尽管它得到了增强(4线程/核心、512位向量引擎等),但它仍然是奔腾。这意味着它可以像奔腾一样运行标量代码。你的任务听起来像是一大堆并行运行的串行进程。因此,每个进程都将像在奔腾上运行一样运行
    • 为了获得卓越的性能,您需要并行化良好的代码(可以理解为OpenMP、轻量级线程和线程池)以及向量化(利用512位向量引擎)。如果没有这两个增强功能,您将在奔腾上运行,这将助长许多奔腾
    • 通过PCIe总线移动数据速度较慢。如果要传输大量文件,则传输速度可能会更慢,尽管可以通过隐藏延迟(取决于应用程序)稍微减少争用。如果您在启动时使用244个文件读取请求访问PCIe总线,那么这将是相当多的争用。即使是在稳定状态下,听起来您在任何给定的时间都将读取20多个文件(我甚至怀疑,如果我们以奔腾的方式执行标量代码的话)
    现在,KNL体系结构可能更适合您的需要,但这还没有出现


    如果您仍然认为Xeon Phi可能适合您想要做的事情,您可以咨询专家。如果您的应用程序是专有/敏感的,您可以向英特尔专家发出私人信息。

    关于同时运行多个进程的性能,可能会导致大量二级缓存争用/抖动。良好的L2使用对于在KNC上获得良好的性能通常非常重要。这取决于工作量,但这正是问题所在,我们目前还没有一个,我想知道这项投资是否值得。谢谢如果我能在60个奔腾上运行5-10倍的加速,而不是一个xeon,那仍然是一个巨大的进步。在我们的时间范围内,使用openMP并行化工具本身不是一个选项。