我对并行计算知之甚少,但我想对作业的“进一步工作”提出建议,并希望确保我是对的。
我用C ++编写了一个光线跟踪器。我在vector
中存储光线的信息,例如生命点,我在模拟结束时将这些向量写入CSV(这是一个很好的编程吗?)如果我跟踪一些光线说1000,模拟需要更多时间与追踪100次射线相比10次。我假设这是因为我的vector's
的大小更大,因此它们在堆内存中占用了大量空间(?)。可以在没有来自其他光线的信息的情况下跟踪每条光线(程序正在乞求平行)。我是否正确的说,如果程序是并行的,每个处理器将有自己的内存,因此不会有一个大的向量占用大块内存,而是围绕着可以更有效地处理的小向量?
答案 0 :(得分:1)
您对每个处理器都有自己的内存的假设'听起来像是尝试提高CPU缓存使用率(无论您的任务与多少并行,RAM都保持不变 - 除非您将其分发到群集上)。虽然通常并行化会提供更多的CPU缓存,但是当线程在核心之间迁移时,可能会有更多的缓存未命中(Windows实际上会这样做)。
也许你只是以低效的方式使用std :: vector。例如。您在开头插入项目或逐个附加项目(这些操作可能需要达到O(vector.size()
))。或者可能有其他数据结构在光线数量增加时减慢。这可能是固定的,无需在多个处理器之间拆分任务。
虽然程序肯定会从并行化中获益。