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)
提升cache性能的一些方法,只总结开发者可控部分吧,类似增加cache size,增加cache level这种是硬件开发者的事情,就飘过。
- 数据的alignment----这个可以保证数据会占用尽可能少的cache line,cache performance也会变小
- 压缩数据----bitfield替换bool,尽可能小的数据格式,编译时候选择最小size而不是最优化(优化instruction cache)都是不错的选择
- 常访问的数据集中化
- prefetch,在知道后面要用这个数据了,就先把数据读进来
最后要说的就是现在硬件过于复杂,在某个平台上开发经验有限的情况下,general的知识最好只做指导方向用,真正优化还是要跟着硬件手册和profile结果来,而不是主观推测。
假设经常出错呃。
分享到:
相关推荐
Erlang and OTP in Action Martin Logan, Eric Merritt, and Richard Carlsson MEAP Began: August 2008 Softbound print: May 2010 (est.) | 500 pages ISBN: 1933988789 Part One: Getting Past Pure Erlang; ...
《Lucene实战源码(Lucene in Action Source Code)part1》是针对知名图书《Lucene in Action》的源代码,这部分主要涵盖了Lucene搜索引擎库的基础应用和核心概念。Lucene是一个高性能、全文本搜索库,它允许开发者...
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m; server { location /static/ { proxy_pass http://backend; proxy_cache my_cache; proxy_cache_bypass $http_pragma;...
Praise for the Third Edition of Spring in Action Preface Acknowledgments About this Book 1. Core Spring Chapter 1. Springing into action 1.1. Simplifying Java development 1.1.1. Unleashing the power ...
15. **缓存(Caching)**:ASP.NET MVC支持多种缓存策略,如Output Cache、Action Filter等,可以显著提高性能。 通过阅读"ASP.NET MVC in Action"这本书,开发者可以深入了解这些概念,并学习如何在实际项目中有效地...
"AJAX in Action" 是一本专门探讨AJAX技术的书籍,源代码的提供为读者提供了实践和学习AJAX的宝贵资源。** 在深入讲解AJAX的知识点之前,让我们先了解一下AJAX的基本组成部分: 1. **XMLHttpRequest对象**:这是...
《HTML5 in Action》这本书籍是一本关于HTML5网络开发的完整入门书籍,它详细地介绍了如何利用HTML5开发功能丰富、响应式强的网页应用。书籍包含了三个主要部分:引言、基于浏览器的应用和交互式图形、媒体以及游戏...
"HTML5 in Action"是一本深入探讨HTML5实践应用的书籍,其例子代码库包含了各种示例,旨在帮助读者更好地理解和掌握HTML5的新特性。 在HTML5中,最重要的更新之一是引入了语义化元素,如、、、和等,这些元素帮助...
《Hibernate in Action》是一本深度探讨Java持久化框架Hibernate的专业书籍。Hibernate作为Java领域最流行的ORM(对象关系映射)工具之一,它极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。这...
在《AJAX In Action》这本书中,中文版为我们提供了深入理解AJAX技术的详细指南。本书旨在帮助开发者熟练掌握AJAX的核心概念和实践技巧,从而构建出高效、用户友好的Web应用。 1. **AJAX基础** - **XMLHttpRequest...
- **缓动动作(Easing Action)**:如`EaseIn`、`EaseOut`和`EaseInOut`,它们改变动作的速度曲线,产生加速或减速效果。 - **动作继承**:所有动作都继承自`CCAction`类,你可以通过继承来创建自定义动作。 3. *...
"AJAX In Action"这本书深入探讨了AJAX技术及其在实际开发中的应用。** ### 一、AJAX基础 1. **XMLHttpRequest对象**:AJAX的核心是XMLHttpRequest(XHR)对象,它是JavaScript内置的对象,负责在后台与服务器进行...
《Hibernate in Action》是一本深度探讨Java持久化框架Hibernate的专业书籍。这本书详尽地介绍了如何使用Hibernate进行数据库操作,帮助开发者高效地管理Java应用程序中的数据。Hibernate作为一个对象关系映射(ORM...
《AJAX_in_Action》这本书是关于Asynchronous JavaScript and XML(AJAX)技术的深度探讨,它引领了Web开发领域的一场革命。AJAX的核心在于利用JavaScript在后台与服务器进行异步数据交换,无需刷新整个页面就能实现...
《Spring In Action 使用Spring发送和接收JMS消息》 在Java世界中,Spring框架以其强大的功能和灵活性,被广泛应用于企业级应用开发。本篇主要探讨如何利用Spring框架来发送和接收Java消息服务(Java Message ...
actionCache - Variable in class swarm.simtoolsgui.GUISwarmImpl ActionCache - interface swarm.simtoolsgui.ActionCache. A class to manage threads and Swarms.. ActionCacheC - interface swarm....