【发布时间】:2011-09-25 00:42:49
【问题描述】:
我有一个包含 50 万个数字的排序向量(在 C++ 中)。将其存储到文本文件大约需要 10 秒,并且仅使用 50% 的 CPU(1 个核心)。我正在考虑并行化它,保存 2 个单独的文件(矢量的前半部分和后半部分),然后连接这些文件。
问题是,除了逐字节读取并加入第一个文件之外,我无法找到任何不同的连接方式...是否有任何独立于平台的方式(Boost 或 Windows 特定)有效地加入文件?
【问题讨论】:
-
文件不支持这样的操作。
-
操作可能会更慢,因为磁盘必须在两个不同的文件之间不断寻找。
-
你试过缓冲输出到文本文件吗?
-
你的 CPU 在这里可能无关紧要。很可能,此操作的瓶颈是您的硬盘驱动器,而不是 CPU。写入磁盘不可避免地是线性操作。除非您有两个硬盘驱动器,否则无法并行化它。对不起。如果您需要更快地写入,您只需购买速度更快的硬盘即可。
-
将数据分成 2 块写入不太可能有帮助;磁盘必须按顺序写入您拥有的所有数据,这可能是(最终)瓶颈。您是否考虑过以本机二进制格式写入数据,例如,为这些浮点数写入二进制值而不是相应的文本?这避免了很多格式化开销,并且可能会更小并且相应地更快。您还应该考虑使用内存映射 I/O 工具来避免所有标准缓冲废话和正常顺序 I/O 的开销。你可以用同样的方法读回数据。
标签: c++ file join parallel-processing concatenation