我正在尝试使用我的应用程序找到性能问题的根源。使用Visual Studio 2017分析工具,我得到了这个结果:
我对C ++比较陌生,所以我不确定这个std::vector<bool,std::allocator<bool> >::operator[]
是什么,或者这是否真的是我程序中的瓶颈。任何帮助表示赞赏。
这是我的代码:https://github.com/k-vekos/GameOfLife/tree/multithread
在一场生活游戏中,你所做的就是阅读状态来做出决定。当然,这是大部分时间。
由于虚拟地址空间中std向量的std向量,您的访问几乎是随机的。具有跨度向量的单个缓冲区将显着改善存储器局部性。
如果在这些位置保留0或1,那么执行+=
而不是分支可能有所帮助。
bool的矢量也是打包的;这使得访问速度变慢。使用simpke算法,单个字节的向量可以更快。
请注意,生活中的花哨游戏会进行基于区域的散列以跳过大范围内的帧。