代码之家  ›  专栏  ›  技术社区  ›  foobarfuzzbizz

当进行并行搜索时,内存带宽何时会成为限制因素?

  •  1
  • foobarfuzzbizz  · 技术社区  · 15 年前

    我有一些大文件(从几千兆字节到数百千兆字节),我正在搜索并尝试查找给定字符串的每一个匹配项。

    我一直在研究如何将此操作并行进行,并有一些问题。

    1. 我该怎么做?我无法将整个文件复制到内存中,因为它太大了。多个文件*指针可以工作吗?

    2. 在磁盘带宽成为限制因素而不是CPU之前,我可以在文件上放置多少线程?我该怎么解决这个问题?

    目前,我认为我将使用4个线程,每个线程都有一个文件*以0%、25%、50%和75%的方式通过文件,并让每个线程将其结果保存到一个文件或内存中,然后作为最后一步收集结果。尽管使用这种方法,根据带宽的不同,我可以轻松地添加更多线程,并可能获得更大的加速。

    你怎么认为?

    编辑:当我说内存带宽的时候,实际上我指的是磁盘I/O。抱歉。

    3 回复  |  直到 15 年前
        1
  •  6
  •   Nick Lewis    15 年前

    有了这个新修订版的问题,答案是“几乎立刻”。硬盘不太擅长同时读取磁盘上的两个位置。:)如果您有多个硬盘驱动器并将文件拆分到它们之间,那么您可能会利用一些线程。不过,公平地说,磁盘速度是 已经 限制因素。我强烈怀疑您的磁盘读取数据的速度比处理器处理数据的速度快。

        2
  •  1
  •   Reed Copsey    15 年前

    我怀疑内存带宽会和磁盘IO限制一样大。对于大多数硬件,每个线程从磁盘上读取的方式将受到非常严格的限制。-

    如果您想要最大化吞吐量,您可能需要做一些事情,比如让一个线程来处理磁盘IO(大多数硬件一次只能从磁盘流一个块,所以这是一个限制因素)。然后,它可以将内存块推送到某些类型的线程池中的单个线程进行处理。

    我猜你的处理速度会很快——可能比磁盘IO快得多——但是如果速度慢的话,拥有多个处理线程可以加速你的整个操作。

    多个文件*指针将起作用-但实际上可能比只有一个指针慢,因为它们最终将以时间切片来读取文件,而您将在磁盘上跳跃更多。

        3
  •  0
  •   Janaka    15 年前

    如果您使用的是SSD驱动器。您可以通过使用多个文件指针并行搜索文件来解决这个问题。