欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 【CUDA C实战演练】CUDA介绍、安装、C代码示例

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

2025/5/8 10:43:32 来源:https://blog.csdn.net/m0_49963403/article/details/147718002  浏览:    关键词:【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 Toolkit的安装以及CUDA 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项目
    在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词