0

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

假设我有 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 内存足以在运行时存储数据,但不能将所有输出保存在设备上,所以我需要在主机上输出。所以我的第二个问题是:这种内存交换是否可能“在外部”?

即不是编码到工具中,而是由主机操作系统和设备管理,用于可执行文件的每次执行。

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

2 回答 2

0

Xeon phi 协处理器运行功能非常完整的 Linux 操作系统版本,因此您在 Linux 机器上使用的大部分功能也可能在 Xeon Phi 上运行。

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

关于性能,这很难说:Xeon Phi 内核的较低单线程性能以及传输时间肯定表明该领域大受欢迎,但您可以从设备中提取的并行度水平可能会很好地克服这一点,具体取决于您的工作负载的计算密集程度。最好的答案是让你试一试...

于 2015-10-01T07:45:24.093 回答
0

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

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

即便如此,出于几个原因,我认为它对于您的目的来说是错误的平台。

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

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

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

于 2015-10-02T15:33:57.753 回答