多个内核写入单个文件

Several cores writing in a single file?

本文关键字:单个 文件 内核      更新时间:2023-10-16

我一直在编写一个多线程模拟,将输出存储在文件中。到目前为止,我从一开始就将一个文件分配给核心(带有ofstream myfiles[NUMBER_OF_CORES]),但它有点混乱,因为我正在使用几台具有 20+ 内核的计算机。我一直在这样做以避免在使用一个文件时覆盖,但是我可以在每个核心使用类似流之类的东西,最后使用类似的东西:

for(int i =0; i < NUMBER_OF_CORES; i++){
  myfile << CORE_STREAM[i];
  }

CORE_STREAM[NUMBER_OF_CORES]数组开始?我从未以这种方式操作过流。如果存在,我应该从哪个类构造它?

您可以使用

ostringstream将中间结果存储在内存中。与ofstream一样,它实现了ostream接口,因此您现有的代码可能会按原样工作。

要将一个流转储到另一个流上,您需要执行myfile << core_stream[i].rdbuf() . = 读取缓冲区

您是否考虑过使用 ZMQ 管道? 您的模拟线程可以写入ZMQ_PUSH套接字(参见zmq_socket(3)),并且写入文件的任何内容(另一个线程或进程,ZMQ 不在乎)都可以从ZMQ_PULL套接字读取。 这样,模拟线程就有可能摆脱执行任何阻塞 IO 的操作,而不会在内存中暂存结果。 我无法想象现在在分布式计算项目上工作而不使用 ZMQ。