我正在尝试查找应用程序性能问题的根源。使用Visual Studio 2017分析工具我得到了以下结果:
我是C ++的新手,所以不确定std::vector<bool,std::allocator<bool> >::operator[]
是什么东西,或者这是否真的是程序中的瓶颈。任何帮助表示赞赏。
这是我的代码: https://github.com/k-vekos/GameOfLife/tree/multithread
答案 0 :(得分:1)
在生活游戏中,您要做的是阅读状态以做出决定。可以肯定,那是大多数时间。
由于您在虚拟地址空间中的std向量的std向量,因此您的访问权限几乎是随机的。具有跨度向量的单个缓冲区将显着提高内存局部性。
如果您在这些位置保留0或1,则执行+=
而不是分支可能会有所帮助。
布尔的向量也被打包;这会使访问速度变慢。使用Simpke算法,单字节向量可以更快。
请注意,奇特的生活类游戏会进行基于区域的哈希运算,以在大范围内跳过帧。