GPU 并行计算入门

news2024/11/25 12:54:37

文章目录

    • 0. 前言
    • 1. CPU vs GPU
    • 2. 并行计算简介
    • 3. CUDA 简介
    • 4. CUDA 的处理流程

0. 前言

在没有GPU之前,基本上所有的任务都是交给CPU来做的。有GPU之后,二者就进行了分工,CPU负责逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务(大规模计算任务)。

GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,可以看成是CPU的协处理器,因此当我们在说GPU并行计算时,其实是指的基于CPU+GPU的异构计算架构。

NVIDIA 和 AMD 是主要的独立显卡制造商,其显卡分别称为N卡和A卡;N卡主要⽀持CUDA编程,A卡主要⽀持OpenCL编程。NVIDIA 公司是GPU界的⻰头,其GPU产品占市场份额的80%左右。

1. CPU vs GPU

本节推荐看博客 CPU和GPU到底有什么区别?

CPU 和 GPU 的架构如下图所示:

在这里插入图片描述
可以形象的理解为:

CPU 有25%的ALU(运算单元)、有25%的Control(控制单元)、50%的Cache(缓存单元)

GPU 有 90%的ALU(运算单元),5%的Control(控制单元)、5%的Cache(缓存单元)

因此二者的架构不同,导致了不同的特点:

CPU: 强控制弱计算,更多资源⽤于缓存
GPU: 强计算弱控制,更多资源⽤于数据计算

因此 GPU 在设计时更多的晶体管用于数据处理,而不是数据缓存和流量控制,,可以高度实现并行计算。

此外,GPU的优势还有:

  • 专注于浮点运算 / 性价比高:GPU在设计时避免或减弱了类似分⽀处理、逻辑控制等与浮点计算⽆关的复杂功能,专注于浮点计算,因此在制造成本上有着巨⼤优势。
  • 绿⾊功耗⽐:GPU集成了⼤量的轻量级微处理单元,时钟频率有限,使得运算产⽣的功耗极⼩。

NVIDIA公司有三个主流的GPU产品系列:

  1. Teals 系列:专为⾼性能计算设计、价格昂贵;如著名的深度学习训练神器 A100、V100、P100 都是 Teals 系列
  2. Geforce 系列:专注游戏、娱乐,当然也可以用于深度学习计算;如 Geforce RTX 3060、Geforce RTX 4090 等
  3. Quadro 系列:专为图形图像处理⽽⽣,我个人没用过,不做介绍。

2. 并行计算简介

并⾏计算是指使用多个处理器共同解决同⼀个问题,其中每个处理器承担计算任务中的⼀部分内容。

并行计算包括时间并行(流水线式独立工作)和空间并行(矩阵分块计算),需要保证负载均衡和通信量小(CPU和GPU之间的通讯)。

并行计算的前提是应⽤问题必须具有并⾏度,即可以分解为多个可以并⾏执⾏的⼦任务

单独的⾼性能计算节点主要分为:

  1. 同构节点:仅采⽤相同厂家的硬件,如 CPU,Intel Xeon CPU、AMD Opteron CPU
  2. 异构节点:使用不同厂家的硬件,分为主机端和设备端,分别注重逻辑运算和浮点计算。一般的并行计算都是异构节点。

3. CUDA 简介

CUDA (Compute Unified Device Architecture),通用并行计算架构,是一种运算平台。CUDA 由 NVIDIA 公司在 2007 年发布,⽆需图形学API,采⽤类C语⾔,开发简单。

CUDA 是一种专⽤异构编程模型,CUDA是基于C语⾔的扩展,例如扩展了⼀些限定符 device、shared等,从3.0开始也⽀持 C++ 编程。

基于 CUDA 开发的程序代码在实际执⾏中分为两种:

  • 运⾏在CPU上的宿主代码(Host Code)
  • 运⾏在GPU上的设备代码(Device Code)

运⾏在 GPU 上的 CUDA 并⾏计算函数称为 kernel函数(内核函数),⼀个完整的 CUDA 程序是由⼀系列的设备端 kernel 函数并⾏部分和主机端的串⾏处理部分共同组成的。

kernel 在GPU上以多个线程的⽅式被执⾏,我们学的 CUDA 编程主要就是学怎么写 kernel 函数

4. CUDA 的处理流程

CUDA 的处理流程为:

  1. 从系统内存中复制数据到 GPU 内存
  2. CPU 指令驱动 GPU 运⾏
  3. GPU 的每个 CUDA 核⼼并⾏处理
  4. GPU 将CUDA处理的最终结果返回到系统的内存

CUDA 程序执⾏的基本流程为:

  1. 分配内存空间和显存空间
  2. 初始化内存空间
  3. 将要计算的数据从 Host 内存上复制到 GPU 内存上
  4. 把自己的程序写成 kernel 函数,执⾏ kernel 计算
  5. 将计算后 GPU 内存上的数据复制到 Host 内存上
  6. 处理复制到 Host 内存上的数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python如何横着输入优化网站SEO

Python如何横着输入优化网站SEO 简介 Python作为一种强大的编程语言,在网络开发、数据处理、机器学习、人工智能等领域得到了广泛应用。随着互联网的发展,优化网站SEO已成为网站管理者不可或缺的重要职责,而如何横着输入也是优化SEO的重要一…

chatgpt赋能python:Python求平方:简单方便的方法

Python求平方:简单方便的方法 Python是一种功能强大、易学易用的编程语言,许多人使用它来进行数学计算。在Python中求一个数的平方是非常简单的。本文将介绍一些方法来实现这一任务。 使用**操作符 Python中的**操作符是求平方的快捷方式。它将一个数…

Golang每日一练(leetDay0097) 顶端迭代器、寻找重复数

目录 284. 顶端迭代器 Peeking Iterator 🌟🌟 287. 寻找重复数 Find the Duplicate Number 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练…

应聘求职自荐信优秀范文5篇

应聘求职自荐信优秀范文篇1 尊敬的领导: 您好!衷心的感谢您在百忙之中翻阅我的这份材料,并祝愿贵单位事业欣欣向荣,蒸蒸日上! 我是哈尔滨理工大学测控技术及通信工程学院________届毕业生,自从今日大学之后,高考后的轻…

【MySQL数据库 | 第十八篇】索引分类与语法

前言: 在上一篇我们讲解了什么是索引以及索引的结构,这一篇我们将更进一步的讲解索引的分类以及语法介绍,大家准备好了嘛? 索引分类: 1. 主键索引 主键索引是一种特殊的唯一索引,它强制保证某列的值…

chatgpt赋能python:Python-查看已安装的库

Python - 查看已安装的库 Python 作为一种流行的编程语言,具有丰富的标准库和大量的第三方库,这些库可以方便地进行开发,缩短开发周期并提高代码质量。但是,随着时间的推移和项目累积,我们可能会忘记在当前机器上已经…

【瑞萨RA_FSP】电位器电压采集

文章目录 一、硬件设计二、软件设计1. 文件结构2. FSP配置3. ADC初始化函数4. ADC中断回调函数5. 如果未启用中断6. ADC读取转换结果函数7. hal_entry入口函数 一、硬件设计 野火启明6M5开发板的 ADC 电位器电路图如图所示。 可知,开发板板载的电位器连接到 P000 …

随机森林特征重要性(Variable importance)评估方法

Random Forest Variable importance 算法介绍实现算法流程分类回归 实验实验1:waveform数据集(分类)实验2:superconductivity数据集(回归)实验3:power-consumption数据集(回归&#…

UNIX环境高级编程——进程间通信

15.1 引言 本章将说明进程之间相互通信技术——进程间通信(InterProcess Communication,IPC)。 IPC类型包括: 前10种IPC形式通常限于同一台主机的两个进程之间的IPC;最后2种是仅有的支持不同主机上两个进程之间的I…

5G NR SRS功率控制

3GPP TS 38.213 7.3.1节中,关于SRS的功率控制算法如下: 其中, : 表示在载波f服务小区c以及SRS的发送时隙i UE被配置的最大发射功率; : 表示在载波f,BWP b, 服务小区c,SRS资源集qs所配置的p0值&#xff1…

【GateWay快速入门】 —— 每天一点小知识

💧 Z o o K e e p e r 快速入门 \color{#FF1493}{ZooKeeper快速入门} ZooKeeper快速入门💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 《数据结构与算法》专…

子线程不显示Toast?

Handler不仅在ANR过程中有用到,Toast中也用到了Handler。 代码如下: public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.lay…

chatgpt赋能python:Python如何进行高效的查询?

Python如何进行高效的查询? 在Python中,查询是一项非常常见的操作,而高效的查询在数据量增大时可以显著提高程序的性能和效率。本文将介绍Python中的查询方式以及如何进行高效的查询操作。 Python中的查询方式 Python中查询的方式主要分为…

嵌入式容器源码解析

问题分析 不同于使用springmvc,在我们使用springboot时无需配置tomcat就可以直接使用,这就说明springboot已经在我们启动项目时将tomcat配置好了,接下来我们就来看看springboot底层是怎么实现的。 源码解析 ServletWebServerFactoryAutoConfiguratio…

基于Java乡镇自来水收费系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

chatgpt赋能python:如何使用Python查看当前路径

如何使用Python查看当前路径 作为一名有10年Python编程经验的工程师,我今天想和大家分享如何使用Python来查看当前路径。这在开发过程中非常有用,尤其是当需要导入文件或访问某个文件夹时。在本文中,我将介绍在Windows、Mac和Linux系统上如何…

深蓝学院C++基础与深度解析笔记 第 3 章 数组、 vector 与字符串

第 3 章 数组、 vector 与字符串 一、数组 将一到多个相同类型的对象串连到一起,所组成的类型 int a → int b[10] b的类型是int[10]; A、 数组的初始化方式: ● 缺省初始化 ● 聚合初始化( aggregate initialization ) int b[3…

ansible的部署和命令模块和playbooks剧本

系列文章目录 文章目录 系列文章目录一、Ansible1、Ansible简介2、Ansible特点及优势3、Ansible核心程序4、Ansible工作原理及流程5.部署Ansible自动化运维工具6、Ansible常用模块 二、playbooks剧本1.playbooks2、playbooks组成部分3、playbooks启动及检测 总结 一、Ansible …

简单的TCP网络程序·多进程、多线程(后端服务器)

前文链接 -- 简单的TCP网络程序单进程 上篇文章中,实现了TCP网络通信的的单进程版本,因为实现的是一个死循环的逻辑,是串行实运行的,显然这和实际中的TCP通信是不同的,为了解决这方面的问题,需要使用多进程…

B+树:MySQL数据库索引的实现

作为一个软件开发工程师,你对数据库肯定再熟悉不过了。作为主流的数据存储系统,它在我们的业务开发中,有着举足轻重的地位。在工作中,为了加速数据库中数据的查找速度,我们常用的处理思路是,对表中数据创建…