热路径的分析和 std::vector 部分?
Profiling and std::vector part of Hot Path?
我正在尝试查找我的应用程序性能问题的根源。使用 Visual Studio 2017 分析工具我得到了这个结果:
我对 C++ 比较陌生,所以我不确定这个 std::vector<bool,std::allocator<bool> >::operator[]
是什么东西,或者这是否真的是我程序的瓶颈。感谢任何帮助。
这是我的代码:
https://github.com/k-vekos/GameOfLife/tree/multithread
在人生的游戏中,你所做的就是阅读状态来做出决定。当然,大部分时间都是这样。
由于虚拟地址 space 中的 std 向量的 std 向量,您的访问几乎是随机的。具有跨度向量的单个缓冲区将显着改善内存局部性。
如果您在这些位置保留 0 或 1,则执行 +=
而不是分支可能会有所帮助。
bool的向量也是packed bits;这使得访问速度变慢。使用您的 simpke 算法,单字节向量可能会更快。
请注意,精彩的生活游戏会进行基于区域的哈希处理以在大范围内跳帧。
我正在尝试查找我的应用程序性能问题的根源。使用 Visual Studio 2017 分析工具我得到了这个结果:
我对 C++ 比较陌生,所以我不确定这个 std::vector<bool,std::allocator<bool> >::operator[]
是什么东西,或者这是否真的是我程序的瓶颈。感谢任何帮助。
这是我的代码: https://github.com/k-vekos/GameOfLife/tree/multithread
在人生的游戏中,你所做的就是阅读状态来做出决定。当然,大部分时间都是这样。
由于虚拟地址 space 中的 std 向量的 std 向量,您的访问几乎是随机的。具有跨度向量的单个缓冲区将显着改善内存局部性。
如果您在这些位置保留 0 或 1,则执行 +=
而不是分支可能会有所帮助。
bool的向量也是packed bits;这使得访问速度变慢。使用您的 simpke 算法,单字节向量可能会更快。
请注意,精彩的生活游戏会进行基于区域的哈希处理以在大范围内跳帧。