CUDA编程入门系列(一) 什么是GPU运算?

一、GPU架构

        下图为Tesla C2050的GPU架构,其核心由16个组所构成,其中红色方框为单个组的示例,称为SM(Stream Multiprocessor), 每个SM里面又有32个SP(Stream Processor)(即小绿快)

下图为Fermi的GPU架构,其由16个SM组成,每个SM中含有32个SP core。

 

下图为其他类型的GPU架构,其有三级的结构,第一级为GPC(图像处理簇),第二级为SM, 第三级为SP,其中每个GPC由16个SM组成,每个SM里有32个SP。

二、什么是GPU计算 

        NVIDIA公司发布了CUDA,它是建立在NVIDIA的CPUs上的一个通用并行计算平台和编程模型,基于CUDA编程可以利用GPUs的并行计算引擎来更加高效地解决比较复杂的计算难题。
        GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,可以看成是CPU的协处理器,因此当我们在说GPU并行计算时,其实是指的基于CPU+GPU的异构计算架构。
        在异构计算架构中,GPU与CPU通过PCle总线连接在一起来协同工作。CPU所在位置称为为主机端(host),而GPU所在位置称为设备端(device).

三、为什么要使用GPU计算

        GPUs的并行计算引擎强大,可以大幅度加快计算速度,例如15倍左右

        机器学习以及人工智能需要训练模型,需要大量的计算,特别是稠密矩阵向量计算,GPU可以快十倍以上。 GPU最成功的一个应用就是深度学习领域,基于GPU的并行计算已经成为训练深度学习模型的标配。

四、CPU与GPU的分工与协作

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

        CPU和GPU通过PCIe总线连接在一起来协同工作.CPU和GPU各自拥有自己的内存。

 

五、CUDA程序架构

        其中Host代表CPU,Device代表GPU。一般在CPU做初始化和逻辑控制,如果需要并行控制的话,就把数据放到GPU上进行运算,再返回到CPU上进行处理。

六、语言选取

         CUDA是NVIDIA公司所开发的GPU编程模型,它提供了GPU编程的简易接口,基于CUDA编程可以构建基于GPU计算的应用程序。
        CUDA提供了对其它编程语言的支持,如C/C++,Python,Fortran等语言,这里我们选择CUDA C/C++接口对CUDA编程进行讲解。

七、编译器

        CUDA: NVIDIA, latest CUDAv10, nvcc
        Windows, Mac OSX, Linux
        Linux:Fedora, Ubuntu, RHEL, CentOs
        推荐Linux :1)容易写编译脚本, Makefile; 2)很多命令行可以尝试;3)轻量级操作环境;4)免费

八、CUDA工具

        编译器:nvcc(C/C++)
        调试器: nvcc-gdb
        性能分析: nsight, nvprof
        函数库: cublas, nvblas, cusolver, cufftw, cusparse, nvgraph

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01认识微服务

一、微服务架构演变 1.单体架构 将所有的功能集中在一个项目开发,打成一个包部署。优点架构简单,部署成本低。缺点耦合度高,不利于大型项目的开发和维护 2.分布式架构 根据业务功能对系统进行拆分,每个业务模块作为独立的项目…

核酸管外观缺陷检测(二)

1.1应用示例思路 (1)创建分类器; (2)向分类器中添加样本; (3)训练分类器; (4) 测试数据,并将检测结果写入txt文件中。 1.2 应用示例相关算子介绍 (1) create_class_mlp( : : NumInput, NumHidden, NumOutput, OutputFunctio…

Flow深入浅出系列之在ViewModels中使用Kotlin Flows

Flow深入浅出系列之在ViewModels中使用Kotlin FlowsFlow深入浅出系列之更聪明的分享 Kotlin FlowsFlow深入浅出系列之使用Kotlin Flow自动刷新Android数据的策略 Flow深入浅出系列之在ViewModels中使用Kotlin Flows Flow出现后,LiveData仍然可以用,并且…

进阶JAVA篇-异常处理:解读与解决编程中的意外情况

目录 1.0 什么是异常? 1.1 异常主要分为两个情况分别是运行时异常、编译时异常。 2.0 怎么处理异常呢? 2.1 捕获异常(Catch Exception) 2.2 声明异常(Declare Exception) 3.0 自定义异常 3.1 如何定义异常类…

第60节——使用redux-toolkit实战一个商品列表的增删查改

一、样例 二、需求 调用goods.js这个单例完成对goods数据的增删查改 class Goods {constructor() {const data localStorage.getItem("qf-goods-data");this.goods data ? JSON.parse(data) : [];}time 500;/*** 获取商品* returns*/getGoods() {return new Pr…

spring6-资源操作:Resources

资源操作:Resources 1、Spring Resources概述2、Resource接口3、Resource的实现类3.1、UrlResource访问网络资源3.2、ClassPathResource 访问类路径下资源3.3、FileSystemResource 访问文件系统资源3.4、ServletContextResource3.5、InputStreamResource3.6、ByteAr…

联合体(共用体)

1. 联合类型的定义 联合也是一种特殊的自定义类型。 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间。 2.联合大小的计算 联合的大小 至少是最大成员的大小 。 当最大成员大小不是最大对齐数的整数倍的时候,就要对 齐到最大对齐数…

【AI视野·今日CV 计算机视觉论文速览 第268期】Mon, 16 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Mon, 16 Oct 2023 Totally 61 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Vision-by-Language for Training-Free Compositional Image Retrieval Authors Shyamgopal Karthik, Karsten Roth, Massi…

C#中List、Dictionary、HashSet用法以及区别

前言 在C#编程中,List、Dictionary和HashSet是常用的集合类型,它们都有自己的特点和适用场景。本篇博客将介绍它们的用法、区别及常见操作。深入了解这些集合类型,能够帮助我们更好地组织和处理数据。 1. List: List是一个有序可重复集合,可…

SpringBoot实战(二十五)集成 Shiro

目录 一、Shiro 简介1.1 Shiro 定义1.2 Shiro 核心组件1.3 Shiro 认证过程 二、SpringBoot集成2.1 集成思路2.2 Maven依赖2.3 自定义 Realm2.4 Shiro 配置类2.5 静态资源映射2.6 AuthController2.7 User 实体2.8 用户接口类2.9 用户接口实现类2.10 OrderController(…

stable diffusion和midjourney哪个好

midjourney和stable diffusion哪个好?midjourney和stable diffusion的区别?那么今天就从这2款软件入手,来探索一下他们的功能的各项区别吧,让你选择更适合你的一款ai软件。 截至目前,我们目睹了生成式人工智能工具的在…