【问题标题】:Is it possible: Using multiple threads to stream output to different files /是否可能:使用多个线程将输出流式传输到不同的文件/
【发布时间】:2017-03-04 05:25:01
【问题描述】:

我正在做一个 C++ 项目,通过一些已知的力场来跟踪粒子。该代码以粒子的位置和动量的形式生成大量数据。我已经在粒子跟踪例程中使用了openmp指令。但是,整体性能最终取决于编写输出文件所花费的时间。我知道不建议使用线程将数据写入输出文件(我已经尝试过)。我很好奇是否有任何方法可以使用多个线程将数据写入多个文件(比如我有 4 个线程,每个线程同时写入 4 个文件)。你能建议我如何进行吗?关于如何有效地将数据流式传输到文件的任何提示? 提前致谢

【问题讨论】:

  • 您可以访问并行文件系统吗?如果没有,那么就不要费心尝试并行化您的 IO...
  • @Gilles 我不会再为此烦恼了:D

标签: c++ multithreading openmp


【解决方案1】:

这是一篇关于并发 I/O 主题的有趣文章: http://www.drdobbs.com/parallel/multithreaded-file-io/220300055

有一些基本障碍限制了这种方法的收益。第一是硬件能力。 HDD 和 SSD 的读取和写入速度有限,尝试同时读取/写入多个文件可能不会显着提高速度。事实上,在硬盘上尝试同时执行多项操作实际上会在许多情况下损害性能,这可以在我提供的链接的基准测试中看到。似乎使用 2-4 个线程可以在阅读中获得显着的收益,但写作规范令人失望。不过,多线程肯定会有助于加快数据的序列化。

【讨论】:

    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多