内存使用并行编程
Memory usage an parallel programming
我不太了解并行计算,但我想对作业中的"进一步工作"提出建议,并希望确保我是正确的。我用c++写了一个光线追踪器。我在vector
中存储射线信息,如生命值,并在模拟结束时将这些向量写入CSV(这是良好的编程吗?)如果我跟踪1000条光线,模拟要比跟踪100条光线多花10次时间。我认为这是因为我的vector's
的大小更大,所以它们占用了堆内存中的大量空间(?)。每条光线都可以在没有其他光线信息的情况下进行跟踪(程序请求并行)。我是说,如果程序是并行的,每个处理器都有自己的内存,所以不会有一个大的向量占用巨大的内存块,而是小的向量分布在周围,可以更有效地处理?
您假设每个处理器都有自己的"内存",这听起来像是在尝试提高CPU缓存使用率(无论任务有多并行,RAM都保持不变—除非您将其分布在集群上)。虽然通常并行化提供了更多的CPU缓存,但由于线程将在内核之间迁移(Windows实际上是这样做的),可能会有更多的缓存丢失。
也许你只是以一种低效的方式使用std::vector。例如,您正在开始插入项或一个接一个地附加项(这些操作可能需要最多O(vector.size()
))。或者可能存在其他数据结构,当射线数量增加时,它会减慢速度。这个问题可以在不把任务分配给几个处理器的情况下解决。
尽管程序肯定会从并行化中获益
相关文章:
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 如何对并行键盘输入进行编程
- 如何解决在使用动态 2D 数组进行矩阵乘法的 MPI 进行并行编程时的问题
- 锁定如何在并行编程中工作?
- OpenMP 并行编程基于线程数与执行时间的关系
- 如何将GDB与OpenMP和并行编程使用
- 使用Visual Studio 2017的并行编程
- QT 并行编程
- 使用C 异步进行并行编程
- 带有多个线程的锁在C 中并行编程
- 用openMP进行并行编程
- 使用并行阵列的初学者编程学生
- GTX 550 Ti显卡支持动态并行编程
- 并行CUDA编程
- c++并行编程错误
- 如何在并行编程中收集从机到主机返回的值
- 如何在图问题中应用并行编程
- 内存使用并行编程
- 在TBB中使用递归、基于任务的并行编程获得不同的输出
- 什么是改进并行/分布式编程的好项目