CUDA Handbook 补充 CPU和GPU硬件架构2

2024-04-07 21:18

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883698

相关文章

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Android如何获取当前CPU频率和占用率

《Android如何获取当前CPU频率和占用率》最近在优化App的性能,需要获取当前CPU视频频率和占用率,所以本文小编就来和大家总结一下如何在Android中获取当前CPU频率和占用率吧... 最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下:目前没有标准的

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应