内存使用并行编程

Memory usage an parallel programming

本文关键字:编程 并行 内存      更新时间:2023-10-16

我不太了解并行计算,但我想对作业中的"进一步工作"提出建议,并希望确保我是正确的。我用c++写了一个光线追踪器。我在vector中存储射线信息,如生命值,并在模拟结束时将这些向量写入CSV(这是良好的编程吗?)如果我跟踪1000条光线,模拟要比跟踪100条光线多花10次时间。我认为这是因为我的vector's的大小更大,所以它们占用了堆内存中的大量空间(?)。每条光线都可以在没有其他光线信息的情况下进行跟踪(程序请求并行)。我是说,如果程序是并行的,每个处理器都有自己的内存,所以不会有一个大的向量占用巨大的内存块,而是小的向量分布在周围,可以更有效地处理?

您假设每个处理器都有自己的"内存",这听起来像是在尝试提高CPU缓存使用率(无论任务有多并行,RAM都保持不变—除非您将其分布在集群上)。虽然通常并行化提供了更多的CPU缓存,但由于线程将在内核之间迁移(Windows实际上是这样做的),可能会有更多的缓存丢失。

也许你只是以一种低效的方式使用std::vector。例如,您正在开始插入项或一个接一个地附加项(这些操作可能需要最多O(vector.size()))。或者可能存在其他数据结构,当射线数量增加时,它会减慢速度。这个问题可以在不把任务分配给几个处理器的情况下解决。

尽管程序肯定会从并行化中获益