Skip to content

Commit

Permalink
Update 06.1-Data Locality.md
Browse files Browse the repository at this point in the history
  • Loading branch information
kislyl committed Oct 21, 2014
1 parent 5866259 commit 143c5af
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions 06.1-Data Locality.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@
![](http://gameprogrammingpatterns.com/images/data-locality-things.png)
请注意,并没有Thing,Another或Also指向的指针。这就是它们的实际数据,在各自恰当的位置,一个接一个线性排列。只要CPU读取完Thing,它将接着开始读取Another 和Also,(具体取决于他们的大小以及缓存线的尺寸)。当你开始对它们进行处理时,他们已经在缓存中准备就绪了。你的芯片和你都笑了。
## 数据区域化模式
## (数据区域化)模式
当代CPU带有多级缓存以提高内存访问速度。这一机制加快了对最近访问过的数据其邻近内存的访问速度。通过增加数据区域化来利用这一点以提高性能:保持数据位于连续的内存中以供你的程序进行处理。
## 使用情境
如同多数优化措施,指引我们使用数据区域化模式的第一条准则就是找到出现性能问题的地方。不要在那些代码库里非频繁执行的部分浪费时间,它们不需要本模式。对那些非必要的代码进行优化将使你的人生变得艰难——因为结果总是更加复杂且笨拙的。
Expand All @@ -117,7 +117,7 @@
为了做到缓存友好,你可能需要牺牲一些之前所做的抽象化。你越是在程序的数据区域上化下功夫,你就越要牺牲继承,接口以及这些手段所带来的好处。要时刻记得没有银弹(译者注:一句话说就是技术上什么包治百病且立竿见影的良药,[参见这里](http://www.cnblogs.com/cute/archive/2012/09/27/2705253.html)),只有充满着挑战的牺牲与交换。当然拆东墙补西墙也是很有趣的事情!
## 例子
## 示例
假如你真的钻研到数据区域化优化的深处,你将发现有无数种办法,将你的数据结构拆解成片段以供CPU更好地进行处理。为了让你知道如何下手,我将在对几个最常见的组织数据的方法各做一个简单的实例。我们将在特定的游戏引擎环境下来完成它们,但(正如其他设计模式一样)要牢记只要符合条件,这一技术在任何情境中都是通用的。
## 连续的数组
Expand Down Expand Up @@ -468,7 +468,7 @@ class LootDrop

做这样的优化就像是在挖老鼠洞和黑色艺术之间徘徊。我们很容易花费大量陷在对数据与速度的测试上,但要相信你的努力总会换来收获的。

## 设计中的一些考虑
## 设计决策
这种设计模式更适合叫做一种思维模式。它提醒着你,数据的组织方式乃是游戏性能的一个关键部分。这一块的实际拓展空间很大,你可以让你的数据区域化影响到游戏的整个架构,又或者它只是应用在一些核心模块的数据结构上。

对这一模式的应用,你最需要关心的就是该何时何地使用它。而随着这个问题我们也会看到一些新的顾虑。
Expand Down

0 comments on commit 143c5af

Please sign in to comment.