当前位置: 首页 > ds >正文

【CUDA C实战演练】CUDA介绍、安装、C代码示例

文章目录

  • 0. 前言
  • 1. 并行计算与异构计算
    • 1.1 并行计算(Parallel Computing)
    • 1.2 异构计算(Heterogeneous Computing)
  • 2. CUDA 的核心概念
    • 2.1 主机(Host)与设备(Device)
    • 2.2 线程层次结构
    • 2.3 内存模型
    • 2.4 执行模型
  • 3. CUDA 与 C 语言的关系
    • 3.1 语法扩展
    • 3.2 混合编程
    • 3.3 与标准C的差异
  • 4. CUDA安装

0. 前言

📣按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。

CUDA(Compute Unified Device Architecture)是NVIDIA推出的GPU通用计算编程模型和工具链,让开发者能用 C/C++ 直接调用 GPU 的并行计算能力。如果没有 CUDA,GPU 将只能用于图形渲染,无法高效加速科学计算、AI 训练等通用计算任务。

本文是CUDA的基础介绍,涵盖CUDA的基础介绍,CUDA Toolkit的安装以及C语言代码示例。

在这里插入图片描述

1. 并行计算与异构计算

1.1 并行计算(Parallel Computing)

并行计算(Parallel Computing)是一种 同时使用多个计算资源 解决单个问题的计算模式,其核心目标是通过 任务分解协同执行 来显著提升计算效率。与传统的串行计算(一步一步顺序执行)不同,并行计算允许多个操作同时进行。

在这里插入图片描述

并行计算按任务可以分为:

类型描述典型应用
数据并行同一操作在不同数据上并行执行(如GPU处理图像像素)图像处理、矩阵运算
任务并行不同任务同时执行(如同时下载文件和解压数据)服务器多任务处理

按硬件层级可以划分为:

层级实现方式示例
指令级并行CPU流水线、超标量架构Intel Hyper-Threading
线程级并行多核CPU/GPU的多线程OpenMP、CUDA
节点级并行多台计算机协同(分布式系统)MPI(消息传递接口)

1.2 异构计算(Heterogeneous Computing)

异构计算是指联合使用不同架构的计算单元(如CPU+GPU+FPGA),发挥各自优势。

  • CPU:擅长逻辑控制、串行任务。
  • GPU:擅长高吞吐量并行计算。
  • CUDA 的实现
    • 统一内存管理cudaMallocManaged 分配CPU/GPU共享内存。
    • 异步执行:通过 cudaStream_t 实现计算与数据传输重叠。

在这里插入图片描述

2. CUDA 的核心概念

2.1 主机(Host)与设备(Device)

概念描述关键操作
HostCPU及其内存malloc, free
DeviceGPU及其显存cudaMalloc, cudaFree

2.2 线程层次结构

  • Kernel(核函数):GPU上并行执行的函数,标记为 __global__
  • Grid → Block → Thread
    • Grid:所有线程块的集合。
    • Block:一组线程(最多1024线程,依架构而定)。
    • Thread:最小执行单元。

在这里插入图片描述

2.3 内存模型

内存类型作用域典型用途
全局内存所有线程主存储区,访问速度较慢
共享内存单个Block高速缓存,减少全局内存访问
寄存器单个线程最快,但容量有限
常量内存所有线程(只读)存储不变数据(如系数矩阵)

2.4 执行模型

  • SIMT(单指令多线程)
    GPU以32线程为一组(Warp)执行相同指令,但可处理不同数据。
  • 隐式同步:同一Block内的线程可通过共享内存和 __syncthreads() 同步。

3. CUDA 与 C 语言的关系

3.1 语法扩展

CUDA 在标准C语言基础上扩展了:

  • 函数限定符
    • __global__:核函数,由CPU调用、GPU执行。
    • __device__:GPU端函数,仅GPU可调用。
    • __host__:CPU端函数(默认)。
  • 变量限定符
    • __shared__:定义共享内存变量。
    • __constant__:定义常量内存变量。

3.2 混合编程

CUDA 程序通常是 C/C++ 主机代码 + GPU 核函数 的混合体:

#include<stdio.h>
#include<cuda_runtime.h>//GPU核函数
__global__ void helloCUDA(){printf("hello world from thread %d\n", threadIdx.x);  //threadIdx.x表示当前线程在 Block内的x维度的编号(从0开始)}//主机代码
int main() {helloCUDA << <1, 5 >> > ();  //启动5个线程cudaDeviceSynchronize();  //阻塞主机线程,直到GPU上所有任务(包括核函数、内存传输)完成return 0;
}

输出为:
在这里插入图片描述

3.3 与标准C的差异

特性标准CCUDA C
内存管理malloc/freecudaMalloc/cudaFree
函数调用直接调用通过 <<<...>>> 启动核函数
并行模型需依赖多线程库原生支持GPU大规模并行

4. CUDA安装

  1. 首先要先安装VS: https://visualstudio.microsoft.com/zh-hans/
    在这里插入图片描述

  2. 下载CUDA Toolkit: https://developer.nvidia.com/cuda-toolkit
    在这里插入图片描述

  • 选择合适的版本
    在这里插入图片描述
  • 下载完成在这里插入图片描述
  1. 安装
    在这里插入图片描述
    在这里插入图片描述

  2. 安装完成
    在这里插入图片描述

  3. 打开CMD输入nvcc -V,有返回版本号,确认安装成功
    在这里插入图片描述

  4. 打开VS,创建CUDA项目
    在这里插入图片描述

http://www.xdnf.cn/news/4678.html

相关文章:

  • 电商双十一美妆数据分析(代码)
  • MapReduce中的分区器
  • Ceph 原理与集群配置
  • 网络技术基础,NAT,桥接,交换机,路由器
  • 关于Stream
  • paddle ocr 或 rapid ocr umi ocr 只识别了图片的下部分内容 解决方案
  • 如何避免“救火式管理”消耗精力
  • EEG设备的「减法哲学」:Mentalab Explore如何用8通道重构高质量脑电信号?
  • C++20新特新——02特性的补充
  • 数字乡村综合管理与服务平台软件需求规格说明文档
  • Office365功能特点
  • vue3:十二、图形看板- 基础准备+首行列表项展示
  • MySQL基础关键_011_视图
  • MCU怎么运行深度学习模型
  • 跨境电商生死局:动态IP如何重塑数据生态与运营效率
  • 【PhysUnits】2.2 Scalar<T> 标量元组结构体(scalar/mod.rs)
  • 文章记单词 | 第66篇(六级)
  • 数据库 postgresql 修改密码 sh
  • 大模型赋能:2D 写实数字人开启实时交互新时代
  • 利用并行处理提高LabVIEW程序执行速度
  • 详解0-1背包的状态转移表
  • 前端实现文件下载
  • 案例分享 | 攻克ADAS开发测试难题,实现单元动态测试新突破
  • 力扣刷题Day 34:随机链表的复制(138)
  • MySQL大数据量查询优化
  • angular的cdk组件库
  • 苍穹外卖(订单状态定时处理、来单提醒和客户催单)
  • hadoop中的序列化和反序列化(4)
  • 快连LetsVPN安装指南
  • LeetCode20_有效的括号