【发布时间】:2013-04-02 15:47:24
【问题描述】:
我对并行计算了解不多,但我想就某项作业的“进一步工作”提出建议,并希望确保我是对的。
我用 C++ 编写了一个光线追踪器。我在vector 中存储了射线的信息,例如命中点,并在模拟结束时将这些向量写入 CSV(这是好的编程吗?)如果我跟踪许多射线,比如 1000 条,则比较模拟需要更多时间跟踪 100 条光线 10 次。我认为这是因为我的vector's 的大小更大,因此它们在堆内存中占用了大量空间(?)。每条光线都可以在没有来自其他光线的信息的情况下被追踪(程序正在乞求并行)。我是否正确地说,如果程序是并行的,每个处理器都将拥有自己的内存,因此不会有一个大向量占用一大块内存,而是散布在周围的小向量可以更有效地处理?
【问题讨论】:
-
或者让程序线程化 (
std::thread) 以允许并行执行。 -
很可能您在 1x1000 与 10x100 测试中使用了不同的光线。如果是这样,我会调查相同的光线正在测量它们的时间。我愿意打赌一个不那么小的身体部位,向量的大小完全无关紧要。主存速度以 GB/s 为单位测量 - “一对”(数千或百万)额外元素对执行速度没有明显影响。为什么不编写一些分析代码来查看向量的速度(或查找其他人的结果)QueryHighPerformanceFrequency 和 QueryHighPerformanceTimer - 如果在 Windows 上工作,它们都很方便。
-
好的 - 这基本上回答了我的问题。与较小的向量相比,具有几百万个元素的向量不会对模拟产生实质性影响。谢谢
标签: c++ memory parallel-processing