避免工作线程与实体组件系统之间的错误共享

时间:2017-08-29 00:38:28

标签: c++ multithreading caching game-engine false-sharing

在ECS中存储组件的缓存高效方法是将组件类型划分为大型阵列,然后让每个系统迭代组件。 但是,让我们说我还想避免渲染和物理线程之间的错误共享,试图同时访问实体的坐标。

假设缓存行大64字节。而且,让我们说我有一个“职位”&#39;数组为1 GiB。我可以把它分成64个字节的页面,我只需要一个布尔值来存储页面繁忙(正在写入)或不存在。使用std::vector<bool>,每个bool仅使用1位,这将占用2 Mib的内存。

到目前为止听起来可行。但是,我还没有办法有效地处理工作线程发现页面繁忙的情况。

我应该等忙吗?有没有一个共同的模式来解决这个问题?

或者更重要的是,这是无痛的过度工程吗?我只是想做我的&#34;家庭作业&#34;框架扩展证明,用于学习。从来没有制造过大型引擎,在这种情况下,我不知道虚假共享是否真的是一个值得注意的性能上限。

0 个答案:

没有答案