博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cache in action
阅读量:6347 次
发布时间:2019-06-22

本文共 1448 字,大约阅读时间需要 4 分钟。

  hot3.png

cache这个东西在游戏开发中绝对是扮演超级巨星的角色。

在处理器(cpu,gpu)发展如此神速的今天,几乎ALU计算很难成为瓶颈,而数据访问则常常成为问题所在。

 

cache是一个硬件上的结构(virtual memory则是由操作系统来控制),是对processor访问memory的一种优化。

概率问题在软硬件设计中起了很大作用像cache这个依照space和时间上的重用高概率,像swizzle格式的texture遵守texture访问在块状(而不是线性的)上的高概率。

cache就是对物理内存最近常用的部分做备份,以cache line为单位(类似virtual memory以page为单位),cacheline是硬件决定的。

其中有n-way associative和write through/back等需要注意的地方。

所有这些性质决定了写程序时候会产生非常大的效率差别。

 

先来个powerpc的例子吧(见到什么说什么,也不局限于cache了)


 

InstructionUnit

  • L1 cache----32k, 2way associative, 128B cache line(cache line大小和page没关系的,一个是硬件的事情,一个是操作系统的事情)
  • 64 entry, 2way associative, TLB-----page table的cache
  • 4k*2 branch hitory table-----有根据历史记录预测branch的能力呃
  • out of order completion of load cache miss instructions----会导致processor级别的读乱序,必要时候注意多线程同步呃,参见前面lockless programming处理情况。sync系列函数搞定。
  • 12 stage issue queue for separate handling of VXU/FPU instructions----(应该是instruction pipeline)

FixedPoint and Load/store execution Unit

  • 32k, 4way, 128B cache line, write through
  • 64 entry, 2way, TLB
  • 8 load miss queue, 16 store queue,

Vector/Scaler Unit(VSU)

  • no L1 cache


 

 提升cache性能的一些方法,只总结开发者可控部分吧,类似增加cache size,增加cache level这种是硬件开发者的事情,就飘过。

  • 数据的alignment----这个可以保证数据会占用尽可能少的cache line,cache performance也会变小
  • 压缩数据----bitfield替换bool,尽可能小的数据格式,编译时候选择最小size而不是最优化(优化instruction cache)都是不错的选择
  • 常访问的数据集中化
  • prefetch,在知道后面要用这个数据了,就先把数据读进来

最后要说的就是现在硬件过于复杂,在某个平台上开发经验有限的情况下,general的知识最好只做指导方向用,真正优化还是要跟着硬件手册和profile结果来,而不是主观推测。

假设经常出错呃。

原文链接:

转载于:https://my.oschina.net/dtec/blog/44928

你可能感兴趣的文章
Runtime 学习:消息传递
查看>>
你了解BFC吗?
查看>>
linux ssh tunnel使用
查看>>
十、详解FFplay音视频同步
查看>>
自定义元素探秘及构建可复用组件最佳实践
查看>>
小猿圈Python教程之全面解析@property的使用
查看>>
mpvue开发小程序所遇问题及h5转化方案
查看>>
View和Activity的生命周期
查看>>
解决PHP下载大文件失败,并限制下载速度
查看>>
java B2B2C Springcloud电子商城系统—Feign实例
查看>>
java B2B2C Springcloud多租户电子商城系统 (五)springboot整合 beatlsql
查看>>
Throwable是一个怎样的类?
查看>>
Python基础(一)
查看>>
三条代码 搞定 python 生成验证码
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
无线和有线路由哪种性能更好
查看>>
Dwr3.0纯注解(纯Java Code配置)配置与应用浅析三之后端反向调用前端
查看>>
Ubuntu下安装遨游浏览器
查看>>
自定义Linux service脚本
查看>>