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

sam*_*moz 1 c c++ file-io

我有一些大文件(从几千兆字节到几千千兆字节),我正在搜索并试图找到给定字符串的每一个出现.

我一直在考虑让它并行运行并有一些问题.

  1. 我该怎么做?我不能将整个文件复制到内存中,因为它太大了.多个FILE*指针会起作用吗?

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

目前,我在想的是我将使用4个线程,每个都使用FILE*以0%,25%,50%和75%的方式通过文件,并将每个结果保存到文件或内存,然后收集结果作为最后一步.虽然采用这种方法,但根据带宽,我可以轻松添加更多线程,并可能获得更大的加速.

你怎么看?

编辑:当我说内存带宽时,我实际上是指磁盘I/O. 对于那个很抱歉.

Nic*_*wis 6

有了这个问题的新修订版,答案就是"几乎立即".硬盘不是很擅长同时从磁盘上的两个位置读取.:)如果你有多个硬盘驱动器并将文件分割成它们,你可能会利用一些线程.但公平地说,我会说磁盘速度已经是限制因素了.我非常怀疑您的磁盘能够以比处理器处理数据更快的速度读取数据.