GPU上缘何没有大量的cache
2015-05-29 09:48
302 查看
近年来,GPU广泛应用与高性能领域,其通用计算能力也得到了进一步的利用。与传统的CPU相比,GPU在处理能力和储存器带宽上有着明显的优势,在成本和功耗上也不需要付出太大的代价。
在当前主流的CPU+GPU架构中,CPU和GPU一般经过北桥芯片相互连接,各自有各自的外部储存器,分别为内存和显存。在这种混合架构中CPU负责逻辑性较强的事物运算,而GPU主要负责计算密集度较高的部分。其设计目的的不同导致了设计时的架构的不同。而这些架构的不同也最终影响了他们的性能。
CPU为何需要大量cache
对于单个的CPU核心通常在一个时刻只能运行一个线程的指令,其多线程机制也是在软件层次上的并行。当一个线程中断,或等待某些资源的时候,操作系统需要进行一个上下文转换,这通常会带来巨大的开销。因此需要大量的cache来过滤过多内存的访问,减少访存的延迟,提升CPU的响应速度。而为了缓存的一致性,还需要复杂的替换机制,需要复杂的逻辑控制单元。
另一方面,为了提升单核指令级的并行,现代的CPU中使用了超标量、超流水、超长指令字。这些方式的运行也需要借助复杂的分支预测机制和大量的cache。
GPU为何不需要大量cache
在GPU中没有复杂的缓存体系和替换机制,其cache都是只读的,因此不用考虑cache一致性问题。GPU缓存的主要作用是过滤对存储器控制器的请求,减少对显存的访问,从而解决显存带宽。
GPU不需要大量的cache,另一个重要的原因是GPU处理大量的并行任务。其大量的block和同一个block的大量thread保证了GPU可以实现零开销的线程切换。当一个线程因等待资源而中断的时候就转到另一个已经就绪线程去执行,在这里线程切换反而成了一件好事。能通过计算来隐藏延迟。
在当前主流的CPU+GPU架构中,CPU和GPU一般经过北桥芯片相互连接,各自有各自的外部储存器,分别为内存和显存。在这种混合架构中CPU负责逻辑性较强的事物运算,而GPU主要负责计算密集度较高的部分。其设计目的的不同导致了设计时的架构的不同。而这些架构的不同也最终影响了他们的性能。
CPU为何需要大量cache
对于单个的CPU核心通常在一个时刻只能运行一个线程的指令,其多线程机制也是在软件层次上的并行。当一个线程中断,或等待某些资源的时候,操作系统需要进行一个上下文转换,这通常会带来巨大的开销。因此需要大量的cache来过滤过多内存的访问,减少访存的延迟,提升CPU的响应速度。而为了缓存的一致性,还需要复杂的替换机制,需要复杂的逻辑控制单元。
另一方面,为了提升单核指令级的并行,现代的CPU中使用了超标量、超流水、超长指令字。这些方式的运行也需要借助复杂的分支预测机制和大量的cache。
GPU为何不需要大量cache
在GPU中没有复杂的缓存体系和替换机制,其cache都是只读的,因此不用考虑cache一致性问题。GPU缓存的主要作用是过滤对存储器控制器的请求,减少对显存的访问,从而解决显存带宽。
GPU不需要大量的cache,另一个重要的原因是GPU处理大量的并行任务。其大量的block和同一个block的大量thread保证了GPU可以实现零开销的线程切换。当一个线程因等待资源而中断的时候就转到另一个已经就绪线程去执行,在这里线程切换反而成了一件好事。能通过计算来隐藏延迟。
相关文章推荐
- 分析Cache 在 Ruby China 里面的应用情况
- asp 页面允许CACHE的方法
- web 应用中常用的各种 cache详解
- ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验
- ASP.NET笔记之 viewstate与cache的使用
- 解决php中Cannot send session cache limiter 的问题的方法
- IE cache缓存 所带来的问题收藏
- 用PHP的ob_start() 控制您的浏览器cache
- Asp.Net中Cache操作类实例详解
- IIS设置CACHE过期时间的教程
- php cache类代码(php数据缓存类)
- ASP.NET Cache的一些总结分享
- 对于mysql的query_cache认识的误区
- Linux下用dnsmasq做dns cache server的配置方法
- ASP.NET中Application和Cache的区别分析
- 自动加载缓存框架
- PHP高效文件缓存类FCache
- Pg结果集缓存工具--pqc
- android 清除缓存cache
- 用python做GPU计算(1)——安装以及配置