显卡和异构计算

article/2025/11/7 2:16:16
显卡和异构计算

本文采用知识共享署名 4.0 国际许可协议进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,可适当缩放并在引用处附上图片所在的文章链接。

  • 显卡GPU
    • 显卡分类
      • 集成显卡
      • 独立显卡
      • 核芯显卡
    • 显卡性能
      • 架构
      • 流处理器
      • 核心频率
      • 显存位宽
  • 异构计算
    • CPU+GPU
  • CUDA
    • CUDA编程模型
      • 检查的GPU的硬件配置
      • _global/device/host
    • kernel

显卡GPU

显卡:将计算机系统需要的显示信息进行转换驱动显示器,并向显示器提供逐行或隔行扫描信号,控制显示器的正确显示,是连接显示器和个人计算机主板的重要组件,是“人机”的重要设备之一,其内置的并行计算能力现阶段也用于深度学习等运算。
用NVIDIA显示芯片的显卡称为N卡,而将采用AMD显示芯片的显卡称为A卡。

显卡分类

集成显卡

集成显卡是将显示芯片、显存及其相关电路都集成在主板上,与其融为一体的元件;集成显卡的显示芯片有单独的,但大部分都集成在主板的北桥芯片中;一些主板集成的显卡也在主板上单独安装了显存,但其容量较小。
集成显卡的优点是功耗低、发热量小,集成显卡的缺点是性能相对略低,且固化在主板或CPU上,本身无法更换,如果必须换,就只能换主板。

独立显卡

独立显卡是指将显示芯片、显存及其相关电路单独做在一块电路板上,自成一体而作为一块独立的板卡存在,它需占用主板的扩展插槽(ISA、 PCI、AGP或PCI-E)。
独立显卡的优点是单独安装有显存,一般不占用系统内存,在技术上也较集成显卡先进得多,但性能肯定不差于集成显卡,容易进行显卡的硬件升级。独立显卡的缺点是系统功耗有所加大,发热量也较大。

核芯显卡

核芯显卡是Intel产品新一代图形处理核心,和以往的显卡设计不同,Intel 凭借其在处理器制程上的先进工艺以及新的架构设计,将图形核心与处理核心整合在同一块基板上,构成一个完整的处理器。智能处理器架构这种设计上的整合大大缩减了处理核心、图形核心、内存及内存控制器间的数据周转时间,有效提升处理效能并大幅降低芯片组整体功耗,有助于缩小核心组件的尺寸,为笔记本、一体机等产品的设计提供了更大选择空间。
需要注意的是,核芯显卡和传统意义上的集成显卡并不相同。笔记本平台采用的图形解决方案主要有“独立”和“集成”两种,前者拥有单独的图形核心和独立的显存,能够满足复杂庞大的图形处理需求,并提供高效的视频编码应用;集成显卡则将图形核心以单独芯片的方式集成在主板上,并且动态共享部分系统内存作为显存使用,因此能够提供简单的图形处理能力,以及较为流畅的编码应用。相对于前两者,核芯显卡则将图形核心整合在处理器当中,进一步加强了图形处理的效率,并把集成显卡中的“处理器+南桥+北桥(图形核心+内存控制+显示输出)”三芯片解决方案精简为“处理器(处理核心+图形核心十内存控制)十主板芯片(显示输出)”的双芯片模式,有效降低了核心组件的整体功耗,更利于延长笔记本的续航时间。

显卡性能

显卡的作用就在于接收CPU送来的影像资料,并经过GPU处理,再送到显示器。显卡相当于一个转运体系,将CPU送来的货经过GPU的加工,再送到显示器。本质上,显卡的性能就是处理“货”,也就是数据的能力强弱。

架构

英伟达从960时代的麦克斯架构 到10时代的帕斯卡架构 再到现在20系显卡采用的图灵架构。(帕斯卡用GP缩写 图灵用TU缩写)。

流处理器

流处理器(简称SP)是显卡参数中核心的核心,其能直接影响到显卡性能,个数说则显卡性能强。流处理器的作用是将图像的像素点一个一个的渲染,也就不难理解上述提到的越多越好的结论了,毕竟人多力量大。

核心频率

一般认为核心频率越高,显卡性能就越强。

显存位宽

显存位宽表示一个时钟周期内所能传送数据的位数,位数越大则传输量越大,常见的有64位、128位和256位显卡。在显存频率相当情况下,显存位宽决定着带宽的大小。(显存带宽=显存频率 * 显存位宽 )

异构计算

异构计算的英文名称是Heterogeneous computing,主要是指使用不同类型指令集和体系架构的计算单元组成系统的计算方式。
常见的计算单元类别包括CPU、GPU等协处理器、DSP、ASIC、FPGA等。我们常说的并行计算正是异构计算中的重要组成部分异构计算近年来得到更多关注,主要是因为通过提升CPU时钟频率和内核数量而提高计算能力的传统方式遇到了散热和能耗瓶颈。而与此同时,GPU等专用计算单元虽然工作频率较低,具有更多的内核数和并行计算能力,总体性能/芯片面积的比和性能/功耗比都很高,却远远没有得到充分利用。

CPU+GPU

CPU的目标是快速执行单一指令流;
CPU将其用于乱序执行、寄存器重命名、分支预测以及巨大的cache上,这些设计都是为了加速单一线程的执行速度;
CPU利用cache来降低内存访问延迟;
CPU通过大量的cache和分支预测来降低延迟,这些机制消耗了大量的晶体管的电能;
CPU每个核心支持1~2个线程;
CPU切换线程的代价是数百个时钟周期;
CPU通过SIMD(单指令多数据)来处理矢量数据;
Intel的CPU没有集成内存控制器

GPU的目标是快速执行大量的并行指令流;
GPU将晶体管用于处理器阵列、多线程管理、共享内存、内存控制器;
这些设计并不着眼于提高单一线程的执行速度,而是为了使GPU可以同时执行成千上万的线程;
实现线程间通信,并提供极高的内存带宽;
GPU使用cache来放大内存带宽;
GPU通过同时运行上千个线程来隐藏延迟,等待内存访问的线程会被切换掉,GPU切换线程不耗时间;
对于支持CUDA的GPU,每个流处理器可以同时处理1024个线程;
GPU切换线程的代价是0,事实上GPU通常每个时钟周期都切换线程;
GPU则使用SIMT(单指令多线程),SIMT的好处是无需开发者费力把数据凑成合适的矢量长度,并且SIMT允许每个线程有不同的分支;
支持CUDA的GPU集成有8个内存控制器,GPU的内存带宽通常是CPU的十倍。

CPU的长项是整数计算,GPU的优势则是浮点计算。

CUDA

CUDA Toolkit Documentation v11.0.3
CUDA是NVIDIA公司所开发的GPU编程模型,它提供了GPU编程的简易接口,基于CUDA编程可以构建基于GPU计算的应用程序,利用GPUs的并行计算引擎来更加高效地解决比较复杂的计算难题。近年来,GPU最成功的一个应用就是深度学习领域,基于GPU的并行计算已经成为训练深度学习模型的标配。

GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,可以看成是CPU的协处理器,因此当我们在说GPU并行计算时,其实是指的基于CPU+GPU的异构计算架构。在异构计算架构中,GPU与CPU通过PCIe总线连接在一起来协同工作,CPU所在位置称为为主机端(host),而GPU所在位置称为设备端(device),如下:

GPU包括更多的运算核心,其特别适合数据并行的计算密集型任务,如大型矩阵运算,而CPU的运算核心较少,但是其可以实现复杂的逻辑运算,因此其适合控制密集型任务。另外,CPU上的线程是重量级的,上下文切换开销大,但是GPU由于存在很多核心,其线程是轻量级的。因此,基于CPU+GPU的异构计算平台可以优势互补,CPU负责处理逻辑复杂的串行程序,而GPU重点处理数据密集型的并行计算程序,从而发挥最大功效。
在这里插入图片描述

CUDA编程模型

CUDA编程入门极简教程
CUDA运算速度和显卡CUDA核心数量关系大吗?

CUDA编程模型是一个异构模型,需要CPU和GPU协同工作。在CUDA中,host和device是两个重要的概念,我们用host指代CPU及其内存,而用device指代GPU及其内存。CUDA程序中既包含host程序,又包含device程序,它们分别在CPU和GPU上运行。同时,host与device之间可以进行通信,这样它们之间可以进行数据拷贝。典型的CUDA程序的执行流程如下:

  1. 分配host内存,并进行数据初始化;
  2. 分配device内存,并从host将数据拷贝到device上;
  3. 调用CUDA的核函数在device上完成指定的运算;
  4. 将device上的运算结果拷贝到host上;
  5. 释放device和host上分配的内存。

检查的GPU的硬件配置

    int dev = 0;cudaDeviceProp devProp;CHECK(cudaGetDeviceProperties(&devProp, dev));std::cout << "使用GPU device " << dev << ": " << devProp.name << std::endl;std::cout << "SM的数量:" << devProp.multiProcessorCount << std::endl;std::cout << "每个线程块的共享内存大小:" << devProp.sharedMemPerBlock / 1024.0 << " KB" << std::endl;std::cout << "每个线程块的最大线程数:" << devProp.maxThreadsPerBlock << std::endl;std::cout << "每个EM的最大线程数:" << devProp.maxThreadsPerMultiProcessor << std::endl;std::cout << "每个EM的最大线程束数:" << devProp.maxThreadsPerMultiProcessor / 32 << std::endl;// 输出如下使用GPU device 0: GeForce GT 730SM的数量:2每个线程块的共享内存大小:48 KB每个线程块的最大线程数:1024每个EM的最大线程数:2048每个EM的最大线程束数:64

_global/device/host

GPU实际上是异构模型,所以需要区分host和device上的代码,在CUDA中是通过函数类型限定词开区别host和device上的函数,主要的三个函数类型限定词如下:

__global__:在device上执行,从host中调用(一些特定的GPU也可以从device上调用),返回类型必须是void,不支持可变参数参数,不能成为类成员函数。注意用__global__定义的kernel是异步的,这意味着host不会等待kernel执行完就执行下一步。
__device__:在device上执行,单仅可以从device中调用,不可以和__global__同时用。
__host__:在host上执行,仅可以从host上调用,一般省略不写,不可以和__global__同时用,但可和__device__,此时函数会在device和host都编译。

kernel

GPU上很多并行化的轻量级线程。kernel在device上执行时实际上是启动很多线程,一个kernel所启动的所有线程称为一个网格(grid),同一个网格上的线程共享相同的全局内存空间,grid是线程结构的第一层次,而网格又可以分为很多线程块(block),一个线程块里面包含很多线程,这是第二个层次。如下:

在这里插入图片描述


http://chatgpt.dhexx.cn/article/jdpJ5QvG.shtml

相关文章

带符号移位运算详解

十进制正整数有符号左移 示例&#xff1a;10 << 2 40 Java代码&#xff1a; public class ShiftTest {public static void main(String []args){int leftShiftBegin 10;System.out.println("十进制数&#xff1a;" leftShiftBegin " , " &quo…

机器对移位运算的看法

1.先说一个运算口诀叫“左乘右除”&#xff0c;如k<<1>k*2; k>>1>k/2; 2.左移 先看左移运算&#xff0c;因为相对于右移较为简单&#xff1b; x向左移动K位&#xff0c;会丢弃最高的K位&#xff0c;并在右端补K个0&#xff0c;移位运算是从左到右课结合的&a…

定点运算——位移运算

位移运算 前提&#xff1a;下述的移位运算推理过程是建立在合理的移位运算基础上的&#xff0c;即移位运算的结果和实际运算结果一致 位移运算的数学意义 位移运算&#xff0c;相当于小数点的移动&#xff0c;对数值进行扩大或者缩小进制数倍 左移运算&#xff0c;小数点右移…

【逻辑位移和算数位移】

<< 运算符 && >> 运算符 正数位移 当 x>>n 中 x 为正数时&#xff0c;会将x的所有位右移x位&#xff0c;同时左边高位补0 显而易见&#xff0c;运算结束后&#xff0c;值为1 。 可知右移n位&#xff0c;结果就是 x / 2^n&#xff1a;7 / 2 ^2 1;…

算术位移和逻辑位移(一篇懂)

位运算程序员的基本功&#xff0c;但是不得不说这一块儿确实挺让人头疼的。不过还好&#xff0c;你遇到了我&#xff0c;哈哈... 文章目录 必备知识算术移位逻辑移位用例子说话总结 必备知识 计算机是以二进制方式来进行运算的,也就是0和1 。所有数据必须转化成0、1代码计算机才…

矩阵乘测试显卡算力

由于pytorch和tensorflow不支持int8 int16的gemm&#xff0c;因此只能测试fp32 fp16 bf16等精度的tflops&#xff0c;如果要测试int8 int16精度下的数值&#xff0c;需要编写cublas脚本&#xff0c;目前不会CUDA编程&#xff0c;可参考大佬的脚本&#xff1a; cuBLAS矩阵乘法性…

逻辑运算和位移指令

逻辑运算指令 AND OR NOT XOR TEST 逻辑位移指令 SHL SHR 算术位移指令 SAL SAR 小循环位移指令 ROL ROR 大循环位移指令 RCL RCR AND 逻辑与指令 汇编格式&#xff1a;AND 目的操作数&#xff0c;源操作数 执行操作&#xff1a;&#xff08;目的操作数&#xff09;&…

Java 移位操作符

如有理解错误的地方&#xff0c;希望大家能够指正。 移位操作符在以前的开发中并没有使用过&#xff0c;估计在日常的开发中也很少会用到&#xff0c;所以记录下来&#xff0c;以后需要的时候方便查阅。 基本概念 Java里面的移位操作符总共有以下三种&#xff1a; 左移操作符 …

java移位操作示例

java移位操作示例 public class Shift4JTest {/***移位操作符有>>&#xff08;右移&#xff09;、<<&#xff08;左移&#xff09;、>>>&#xff08;右移&#xff09;* >>是带符号右移&#xff0c;负数高位补1&#xff0c;正数高位补0* <<左…

Java 移位运算详解

个人网站&#xff1a;生命不息 折腾不止 1、左移运算符&#xff1a;<< 先随便定义一个int类型的数int&#xff0c;十进制的value 733183670&#xff0c;转换成二进制在计算机中的表示如下&#xff1a; value << 1&#xff0c;左移1位 左移1位后换算成十进制的…

java移位运算_Java移位运算符 “

详解 首先举一个样例来说明不是循环移位&#xff1a; 假设上面的程序改为 i 3L << 63 程序的结果仍然为 1000000000000000000000000000000000000000000000000000000000000000 那么就说明Java中的移位运算不是循环的。 那对上面的问题又怎么解释呢&#xff1f; 在JLS(Jav…

java中的移位操作详解

移位运算&#xff0c;这是一个陌生又熟悉的操作。陌生是指不易理解且不常用&#xff0c;熟悉是指“别人家的开发工程师”在代码中经常使用这种方式进行高低位的截取、哈希计算、乘除法的运算&#xff0c;今天&#xff0c;让我们一起来揭开移位运算的神秘面纱。 Java提供了两种…

html 右侧滑动条取消,滚动条可以设置取消吗?

网页中的滚动条可以取消&#xff0c;下面我们就来看一下隐藏网页中滚动条的方法&#xff1a; 1、使用以下CSS可以隐藏滚动条&#xff1a;.container::-webkit-scrollbar {display:none} 但是要兼容其他浏览器的话这个就不太好用了&#xff0c;这个适用于Chrome 2、为了兼容其他…

html网页设计滚动条怎么设置,css怎么设置滚动条?

在我们HTML页面中经常会用到滚动条来优化我们的HTML页面&#xff0c;那么我们该如何设置滚动条呢&#xff1f;下面我们来看一下使用css设置滚动条的方法。 一、我们可以使用overflow属性设置是否出现滚动条overflow:scroll /* x y 方向都会*/ 或者 overflow-x:scroll /*只是x方…

element的表格设置及滚动条的设置

element的Table 表格 1.通过使用elementUI中的表格&#xff0c;达到我们需要的效果&#xff0c;其中包括对滚动条的修改&#xff0c;以及文字颜色修改等… 2.先看效果&#xff0c;是可以滚动的 HTML <div class"content_table"><el-table :data"tab…

改变滚动条样式

在我们开发网页项目中往往会遇到滚动条&#xff0c;然而滚动条原本的样式太丑了&#xff0c;所以要改变滚动条的样式&#xff0c;让滚动条和我们开发的项目更加的美观更加的好看&#xff1b; 案例&#xff1a; <div style"width: 200px; height: 200px;overflow: aut…

网页中滚动条的设置和修改

一、通过css设置滚动条 在所有浏览器&#xff0c;滚动条可定制性最强的当属webkit内核的浏览器了。因为源代码开放的原因&#xff0c;市面上基于webkit内核的浏览器也是很难穷举完。例如有&#xff1a;Google Chrome、Opera&#xff08;opera最近宣布使用webkit内核了&#xf…

如何设置页面滚动条

:root {::-webkit-scrollbar {width: 7px;height: 5px;background: #fff;border-radius: 5px; /*外层轨道*/}::-webkit-scrollbar-thumb {display: block;width: 2px;margin: 0 auto;border-radius: 5px;background: #ccc; /*内层轨道*/transition: all .2s ease-in-out;} } 设…

设置滚动条样式

1.全局设置 ::-webkit-scrollbar {width: 4px;height: 4px; }::-webkit-scrollbar-thumb {border-radius: 5px;-webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);background-color: #99a9bf; }::-webkit-scrollbar-track {-webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2…

div:给div加滚动条 div的滚动条设置

今天做了个例子&#xff1a; div 的滚动条问题&#xff1a; 两种方法&#xff1a; 一、 <div style" overflow:scroll; width:400px; height:400px;”></div> 记住宽和高一定要设置噢&#xff0c;否则不成的 不过在不超出时&#xff0c;会有下面的滚动条&…