CUDA C 编程权威指南 第一章 基于CUDA的异构并行计算

来自GPU的Hello World-基于Win10+VS2019+CUDA 11.0搭建CUDA编程环境 序   CPU和GPU 当代计算机的两个核心,GPU计算与CPU计算的结合,使得原本的计算性能得到大幅度的提高,两者功能的互补性使得CPU+GPU的异构并行计算得到快速发展。为了支持使用CPU+GPU异构架构来执行应用程序,核厂设计了被称为CUDA的一种通用并行计算平台和编程模型。   CUDA Toolkit官方下载传送门! 操作系统版本:Win10 Visual Studio版本:Visual Studio 2019 CUDA版本:CUDA Toolkit 11.0 RC 1、CUDA的安装 1.1 阅读详情

CUDA(Compute Unified Device Architecture, 统一计算设备架构)是NVIDIA提出的并行计算架构,主要用来处理密集型及并行计算。

GPU和CPU是两个独立的处理器,通过单个计算节点中的PCI- Express总线相连,GPU用来提高计算密集型应用程序中并行程序段的执行速度,CPU则负责管理设备端的资源。

9858d90017b44d6f8ee5618e2dddc8f7.png

一、并行计算

并行计算通常涉及两个不同的计算机技术领域。

计算机架构(硬件方面)

并行程序设计(软件方面)

早期的计算机中,一个芯片上只有一个CPU(中央处理单元),这种结构被称为单核处理器。现在,芯片设计的趋势是将多个核心集成到一个单一的处理器上,以在体系结构级别支持并行性,这种形式通常被称为多核处理器。因此,并行程序设计可以看作是将一个问题的计算分配给可用的核心以实现并行的过程。 

1.串行编程和并行编程
2.并行性

在应用程序中有两种基本的并行类型。

· 任务并行

· 数据并行

当许多任务或函数可以独立地、大规模地并行执行时,这就是任务并行。任务并行的重点是利用多核系统对任务进行分配。

当同时处理许多数据时,这就是数据并行。数据并行的重点在于利用多核系统对数据进行分配。

CUDA编程非常适合解决数据并行计算的问题。

43df789278b64435aeaf9f20c9ff9480.png

d7981571acc24d6bae1c6ef43f484e35.png

3. 计算机架构
根据指令和数据进入CPU的方式,将计算机架构分为4种不同的类型。(弗林分类法)

883b0e4727184c6faba6f5c781bc93e4.png

 SISD指的是传统计算机:一种串行架构。在这种计算机上只有一个核心。在任何时间点上只有一个指令流在处理一个数据流。

SIMD是一种并行架构类型。在这种计算机上有多个核心。在任何时间点上所有的核心只有一个指令流处理不同的数据流。向量机是一种典型的SIMD类型的计算机,现在大多数计算机都采用了SIMD架构。优势:程序员可以继续按串行逻辑思考但对并行数据操作实现并行加速,而其他细节则由编译器来负责。

MISD类架构比较少见,在这种架构中,每个核心通过使用多个指令流处理同一个数据流。

MIMD是一种并行架构,在这种架构中,多个核心使用多个指令流来异步处理多个数据流,从而实现空间上的并行性。许多MIMD架构还包括SIMD执行的子组件。

为了实现以下目的,在架构层次上已经取得了许多进展。

·降低延迟

·提高带宽

·提高吞吐量

延迟是一个操作从开始到完成所需要的时间,常用微秒来表示。带宽是单位时间内可以处理的数据量,通常表示为MB/s或GB/s。吞吐量是单位时间内成功处理的运算数量,通常表示为gflops(即每秒十亿次的浮点运算数量),特别是在重点使用浮点计算的科学计算领域经常用到。

根据内存组织方式进一步划分,可以分为两类:

· 分布式内存的多节点系统

· 共享内存的多处理器系统

在多节点系统中,大型计算引擎是由许多网络连接的处理器构成的。每个处理器有自己的本地内存,而且处理器之间可以通过网络进行通信。

多处理器架构的大小通常是双处理器到几十个或几百个处理器之间。这些处理器要么是与同一个物理内存相关联,要么共用一个低延迟的链路(如PCI-Ecpress或PCIe)。

CPU核心和CPU核心

CPU核心比较重,用来处理非常复杂的控制逻辑,以优化串行程序执行。

GPU核心比较轻,用于优化具有简单控制逻辑的数据并行任务,注意并行程序的吞吐量。

二、 异构计算
1. 异构架构

一个典型的异构计算节点包括两个多核CPU插槽和两个或更多个的众核GPU。GPU不是一个独立运行的平台而是CPU的协处理器。因此,GPU必须通过PCIe总线与基于CPU的主机相连来进行操作,CPU所在的位置被称为主机端而GPU所在的位置被称作设备端。

一个异构应用包括两个部分。

· 主机代码

· 设备代码

主机代码在CPU上运行,设备代码在GPU上运行。异构平台上执行的应用通常由CPU初始化。在设备端加载计算密集型任务之前,CPU代码负责管理设备端的环境、代码和数据。

描述GPU容量的两个重要特征:CUDA核心数量和内存大小。

评估GPU的性能的两个指标:峰值计算性能和内存带宽。

峰值性能是用来评估计算容量的一个指标,通常定义为每秒能处理的单精度或双精度浮点运算的数量。峰值性能通常用GFlops(每秒十亿次浮点运算)或TFlops(每秒万亿次浮点运算)来表示。内存带宽是从内存中读取或写入数据的比率。内存带宽通常用GB/s表示。

CPU线程与GPU线程

CPU上的线程通常是重量级的实体。上下文的切换缓慢且开销大。

GPU上的线程是高度轻量级。如果GPU必须等待一组线程执行结束,那么它只要调用另一组线程执行其他任务即可。

CPU的核被设计用来尽可能减少一个或两个线程运行时间的延迟,而GPU的核是用来处理大量并发的、轻量级的线程,以最大限度地提高吞吐量。

2. CUDA:一种异构计算平台

CUDA是一种通用的并行计算平台和编程模型。

CUDA提供了两层API来管理GPU设备和组织线程。

· CUDA驱动API

· CUDA运行时API

驱动API是一种低级API,它相对来说较难编程,但是它对于在GPU设备使用上提供了更多的控制。运行时API是一个高级API,它在驱动API的上层实现。每个运行时API函数都被分解为更多传给驱动API的基本运算。

本书中所有例子都使用运行时API。

一个CUDA程序包含了以下两个部分的混合。

· 在CPU上运行的主机代码

· 在GPU上运行的设备代码

主机代码是标准的C代码,使用C编译器进行编译。设备代码,也就是核函数,是用扩展的带有标记数据并行函数关键字的CUDA C语言编写的。设备代码通过nvcc进行编译。在链接阶段,在内核程序调用和显示GPU设备操作中添加CUDA运行时库。

三、用GPU输出Hello World

修饰符__global__告诉编译器这个函数将会从CPU中调用,然后在GPU上执行。

三重尖括号意味着从主线程到设备端代码的调用。一个内核函数通过一组线程来执行,所有线程执行相同的代码。三重尖括号里面的参数是执行配置,用来说明使用多少线程来执行内核函数。在这个例子中,有10个GPU线程被调用。

CUDA核中有3个关键抽象:线程组的层次结构,内存的层次结构以及障碍同步。

CUDA C编程权威指南与实践 CUDA,全称Compute Unified Device Architecture,是由NVIDIA公司推出的一种用于通用并行计算的架构。它允许开发者利用NVIDIA的GPU进行大规模数据处理和计算,极大提高了计算效率和程序性能。CUDA技术自2007年首次推出后,经历了多次迭代和升级,现已发展成为并行计算领域的重要工具。从最初支持简单的图形处理任务,到现在支持复杂的科学计算,CUDA不仅在学术界得到广泛应用,也被工业界认可和采纳,成为高性能计算的首选技术之一。 阅读详情

相关推荐

7.CUDA C编程权威指南 (1)1

前言致谢第1章 基于CUDA的异构并行计算1.1 并行计算1.1.1 串行编程和并行编程1.1.2 并行性1.1.3 计算机架构1.2 异构计算1.2.1 异构

CUDA C编程权威指南Chapter1&2

基于这些坐标,你可以将部分数据分配给 不同的线程。全局类似于CPU的系统内存,而共享内存类似于CPU的缓存。然而GPU的共享内存可以由CUDA C的内核直接控制。构成,一个线程块包含一组线程,同一线程块内 的线程协作可以通过同步和共享内存来实现。不同块内的线程不能协作。同一网格中的所有线程共享相同 的全局内存空间。(线程格的维度,用每个线程格中的线程数来表示)(线程块的维度,用每个线程块中的线程数来表示)形式,一个线程块会被组织成线程的。一个线程格会被组织成线程块的。(线程块在线程格内的索引)

m0_73535031的博客 1045

Cuda C 编程指南(程润伟)

CUDA C 编程指南,美国华裔教授大牛程润伟最新力作,学习CUDA必备经典图书

CUDA编程学习 (1)——CUDA C介绍

这篇文章是关于CUDA编程的基础介绍,主要聚焦于CUDA C的概念与内存管理。文章首先阐明了CUDA的异构计算模型,区分了CPU(host)和GPU(device)的角色,并介绍了它们之间的数据移动和通信机制。接着,详细说明了CUDA程序的执行流程,包括内存分配、数据传输和核函数的调用。

qq_41399144的博客 1636

CUDA_C_Programming_Guide.pdf

NVIDIA CUDA编程指南,CUDA_C_Programming_Guide.pdf

CUDA C编程权威指南.pdf

CUDA C编程权威指南.pdf

CUDA C 编程权威指南 学习笔记:第一章 基于CUDA的异构并行计算

并行性 这个主要分为任务并行和数据并行,CPU适应任务并行,GPU更假适合数据并行,虽然CPU和GPU结构类似,但是其实很不一样, CPU的核心比较重,用来处理非常复杂的控制逻辑,已优化串行程序执行 GPU的核心比较轻,用于优化具有简单控制逻辑的数据并行任务,注重并行程序的吞吐量 CUDA CUDA提供两层API来管理GPU设备和组织线程 CUDA驱动API CUDA运行时AP...

JackZhangNJU的专栏 602

在Ansys Simplorer中设计三相逆变器,并与Maxwell FEA耦合,实现160kW PMSM

在这篇博文中,我们将探讨如何使用设计三相逆变器,并将其与Ansys Maxwell中的电磁有限元分析模型耦合,以获得准确的系统级结果。Ansys Electronics为多域仿真提供了强大的生态系统,可实现跨各种物理领域的无缝集成。Maxwell用于电磁有限元分析 (FEA),Simplorer(Twin Builder) 用于系统级逆变器和控制器设计,Icepak用于电子热仿真。例如,我们将使用 Simplorer 介绍160 kW、8 极永磁同步电机 (PMSM)的逆变器设计过程。让我们开始吧!

jkh920184196的博客 1427

CUDA C编程权威指南笔记

CUDA C编程权威指南笔记,浅谈CUDA编程的思想和原理

weixin_74277223的博客 1046

AHP层次分析法在项目风险评估中的实战应用(含Excel模板)

本文详细介绍了AHP层次分析法在项目风险评估中的实战应用。通过构建风险层次模型、利用判断矩阵量化主观判断,并结合Excel工具进行权重计算与一致性检验,将模糊的定性风险转化为清晰的量化排序。文章以新产品上线项目为例,提供了完整的分析流程和可操作的Excel模板,帮助项目经理高效识别并优先处理核心风险。

weixin_29061465的博客 572

YOLOv8模型RKNN量化策略与RK3588部署实战解析

本文详细解析了YOLOv8模型在RK3588平台上的RKNN量化策略与部署实践。通过对比INT8和FP16量化方式的性能差异,结合实际测试数据,为开发者提供了从模型导出、转换到板端部署的完整解决方案,帮助实现高效的边缘AI应用部署。

oil88的博客 1111

CUDA C编程(一) - 基于CUDA的异构并行计算

《CUDA C编程权威指南》第一章 并行计算 就我们程序员而言,一个程序包含了指令和数据,对于一个具体问题,我们会尝试将问题进行拆解形成子问题或者子模块,模块之间可能会存在依赖关系,即一个模块的输出会作为另一个模块的输入,这样的关系只能串行。 并行条件 只有相互没有依赖关系的相互独立的模块才能并行执行,所以分析模块间的相关性就显得非常重要。 并行的类型 有两种类型的并行,分别是任务并行和数据并...

tanglinjie的优快云博客 2894

OpenCV图像拼接实战:用SIFT+透视变换打造无缝全景图(附完整代码)

本文详细介绍了使用OpenCV和SIFT算法实现图像拼接的全过程,包括特征匹配、透视变换和高级融合技术。通过实战代码演示,帮助开发者掌握无缝全景图生成的核心技术,适用于旅行摄影、无人机航拍等多种场景。

eee77的博客 1002

基于CUDA的异构并行计算

本文介绍基于CUDA的异构并行计算,GPU程序设计的基本要素,CPU和GPU编程的区别。

zyh15的博客 1682

LABVIEW学习之MODBUS-TCP通讯

LABVIEW学习之MODBUS-TCP通讯 1,MODBUS-TCP通讯介绍: MODBUS通讯是工业上面经常用到的一种通讯协议。该协议的原理及介绍不在此累述,下面直接介绍LABVIEW对此协议的应用。 2,MODBUS通讯所需的函数: 安装了DSC模块之后可以在数据通信内找到相关函数 3 ,主VI 主要思路就是使用状态机来进行连接 读取 写入 断开。使用枚举类型来选择状态: 1,连接 2,写入多个M继电器: 3,写入单个M继电器 4,写入双字节D...

风动9527的博客 2万+

sql server安装并SSMS连接

  SQL Server是一种广泛应用于网络业务数据处理的关系型数据库管理系统。SQL Server 2016是微软公司研发的新一代旗舰级数据库和分析平台,突出高级分析和丰富可视化,并融合了关键创新功能。其可提供对企业基础架构最高级别的支持,专门针对关键业务应用的多种功能与解决方案提供最高级别的可用性,并提供更多、更全面的功能以满足不同人群对数据的需求,包括支持来自不同网络环境的数据交互、全面的自助分析等创新功能。百度搜索sql server,在官网下载 地址是:SQL Server 下载| Microso

jiankang66的博客 5187

【亲测免费】 CUDA C编程权威指南简介

CUDA C编程权威指南简介 【下载地址】CUDAC编程权威指南简介 本资源是《CUDA C编程权威指南》系列的一部分,具体为第一部分(1/1)。本书面向希望深入学习和掌握CUDA技术的开发者,CUDA是一种由NVIDIA推出的通用并行计算平台和编程模型,它允许开发者利用GPU的强大计算能力来加速计算密集型任务 ...

gitblog_06620的博客 568

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

XiaoqiangClub的博客 1万+

CUDA C编程权威指南习题解析

6.为执行核函数的每个线程提供了一个唯一的线程ID,通过内置变量threadIdx.x可以在内核中对线程进行访问。3.用cudaDeviceSynchronize 函数来替换hello.cu中的cudaDeviceReset函数,然后编译运行,看看会发生什么。4.参考1.3节,从编译器命令行中移除设备架构标志,然后按照下面的方式进行编译,看看会发生什么。2.从hello.cu中移除cudaDeviceReset函数,然后编译运行,看看会发生什么。(1)对于二维数据,沿x轴进行块划分。

谢白羽 1516

python实现纵横向拉开档次法 (附完整源码)

python实现纵横向拉开档次法 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 784

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

CUDA C编程权威指南 第一章

基础 CUDA(Compute Unified Device Architecture)是NVIDIA提出 CPU和GPU是的PCI-Express总线相连 cpu CPU则负责管理设备端的资源; CPU核心比较重,用来处理非常复杂的控制逻辑,以优化串行程序执行。 CPU线程:操作系统必须交替线程使用启用或关闭CPU执行通道以提供多线程处理功能。上下文的切换缓慢且开销大 gpu G...

Claroja 788

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Cuda C编程权威指南 读书笔记

cuda编程

rookie的博客 536

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【亲测免费】 探索CUDA并行编程的宝藏:《CUDA并行程序设计 GPU编程指南》与源码资源

探索CUDA并行编程的宝藏:《CUDA并行程序设计 GPU编程指南》与源码资源 【下载地址】CUDA并行程序设计资源下载 CUDA并行程序设计资源下载本仓库提供了一个重要的资源文件下载,内容包括《CUDA并行程序设计 GPU编程指南》522页的电子书以及《CUDA C编程权威指南》的源码 ...

gitblog_09736的博客 992

【快速上手】探索CUDA编程的奥秘:《CUDA C 编程指南》推荐

探索CUDA编程的奥秘:《CUDA C 编程指南》推荐 ????【免费下载地址】CUDAC编程指南程润伟资源下载 本仓库提供了一份珍贵的资源文件——《CUDA C 编程指南》,由美国华裔教授大牛程润伟最新力作。这本书是学习CUDA编程的必备经典图书,适合所有对CUDA编程感兴趣的开发者、研究人员和学生。 ...

gitblog_09774的博客 803

CUDA_C_编程权指南-professional_CUDA_C_programming_chapter-one_基于CUDA的异构并行计算

CPU+GPU的异构系统在高性能计算领域已经是main streaming,GPU执行数据并行工作,CPU执行串行和任务并行工作。要掌握CUDA编程,需要对GPU架构相当的了解,并且掌握内存层次分层,因不同的内存的带宽不相同,数据传输的延迟也不相同,内存层次主要是:全局内存:数量最多基本就是显存的大小,

邹九的个人博客 372

CUDA C 编程指南

CUDA C 编程指南 【下载地址】CUDAC编程指南 本仓库提供《CUDA C 编程指南》PDF文件,是一份全面且实用的技术文档,专为开发者设计,帮助掌握CUDA C编程的核心知识与技巧。指南详细介绍了CUDA C的基本概念、编程模型以及性能优化方法,适合希望提升并行计算编程能力的开发者。通过结合实际编程实践,您可以更...

gitblog_06779的博客 495
上一篇: C++ Primer 第五版 第十一章 关联容器
下一篇: C++ Primer 第五版 第12章 动态内存
青禾子的夏
博客等级 码龄8年 405粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值