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

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

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"%