本文主要是介绍CUDA Handbook 补充 CPU和GPU硬件架构2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Latency Hiding = Latency tolerance
延迟隐匿又叫延迟容忍。通过在同一时间执行更多的warp来获得更高的吞吐量,叫做延迟容忍。所谓warp就是一个线程区里面一起执行的线程,一般是32个线程一起执行。它的意义是为了“隐藏”延迟性,也就是说最大化利用GPU的计算功能,计算相对多了,数据传输则相对就小了(比如同样执行100个操作,其中90个是计算,10个是传输,计算密度就比30个计算,70个传输大)。当然,有时候延迟也是隐匿不了的,(内容来自一本叫做 understanding latency hiding in GPUs的英文书,估计是没有中文翻译的一本比较不太流行的书??)因为功能运算单元利用率太低。阻塞一般分为两类:延迟阻塞和带宽阻塞。延迟阻塞可以通过降低处理器延迟来解决,即加速处理器存取指令等。带宽延迟则是与内存访问速度等有关。因为目前我做图形学方面还仅限于软件,所以硬件内部机制也不太懂,也不敢胡说,所以先了解这些应该就足够了。
多CPU系统需要利用多线程程序,这样才能发挥多CPU的功能。SMP系统(对称多处理器),所有CPU都是一样的,它们对内存的访问接口都是一样的,都是通过北桥芯片(上一节讲的)连接到CPU内存,也叫统一内存访问。
上一博客说的北桥可以集成到CPU里也不矛盾,这样的话,CPU就包含了内存控制器,以及连接外部IO设备(如鼠标接口)的功能,同时外部设备接口还连接了GPU设备。也就是说GPU通过连接到IO控制器,再连接到CPU。
而多CPU系统就有点意思了(CUDA handbook说这个结构有点意思),首先每个CPU都有属于自己的内存空间,而且在AMD处理器和英特尔处理器还各自用了HT总线和QPI总线:
借用CUDA handbook的一张图
其实这种结构中,CPU也可以访问到任意地方的内存,比如左边的CPU想用右边CPU的内存,则需要通过HT/QPI总线来获取,也就是说这个总线通过缓存来复制右边的内存内容,再传给左边的CPU,这样速度肯定比左边的CPU用左边CPU的内存慢很多呀!好在CPU芯片上的缓存非常大,可以减轻这种内存的传输(毕竟假设只有一个缓存空间,很可能在传输的时候不够用,导致阻塞耽误了时间)。而且windows,Linux等都提供了API,可以使程序很好的分配内存到执行它的CPU中,比如左边的CPU要操作一个数组,那么这个数组就分配在左边的CPU,这样内存访问就都是访问本地的内存了。
这篇关于CUDA Handbook 补充 CPU和GPU硬件架构2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!