Fia*_*Lux 7 c++ parallel-processing optimization file-io
在我的程序中,我正在模拟大量迭代的N体系统.对于每次迭代,我生成一组6N坐标,我需要将其附加到文件,然后用于执行下一次迭代.代码是用C++编写的,目前使用ofstream的方法write()在每次迭代时以二进制格式写入数据.
我不是这个领域的专家,但我想改进这部分程序,因为我正在优化整个代码.我觉得与在每个周期写入计算结果相关的延迟会显着降低软件的性能.
我很困惑,因为我没有实际并行编程和低级文件I/O的经验.我想到了一些我想象的可以实现的抽象技术,因为我正在使用Unix操作系统编写现代(可能是多核)的机器:
mmap(文件大小可能很大,按GB的顺序,这种方法足够强大吗?)但是,我不知道如何最好地实施它们并适当地组合它们.
当然,每次迭代写入文件的效率很低,并且很可能会减慢计算速度。(根据经验,取决于您的实际情况)
\n\n您必须使用生产者->消费者设计模式。它们将通过队列连接起来,就像传送带一样。
\n\n通过将两者分开,您可以更轻松地提高性能,因为每个过程都更简单并且彼此之间的干扰更少。
\n\n没有必要同时优化两者。只优化最慢的(瓶颈)。
\n\n实际上,您使用线程和它们之间的同步队列。有关实现提示,请查看此处,尤其是 \xc2\xa718.12“生产者-消费者模式”。
\n\n关于流管理,您必须通过选择“最大队列大小”并在队列没有足够空间时让生产者等待来增加一点复杂性。然后小心死锁,仔细编码。(请参阅我给出的维基百科链接)
\n\n注意:使用 boost 线程是个好主意,因为线程不太可移植。(嗯,它们是从 C++0x 开始的,但 C++0x 的可用性还不是很好)
\n