CUDA C 编程入门学习记录

这是本人21年读书时学习CUDA基础知识保留的一些笔记,学习时的内容出处和图片来源不记得了,仅作为个人记录!

CUDA编程

host:主机端CPU

device:设备端GPU

kernels:核函数

  • global:定义一个kernel函数
    • 入口函数,CPU调用,GPU执行,返回void
  • 线程层次
    grid-> block -> threads : 找到一个线程:需要每个线程的编号(threadIdx)和对应的block
  • <<<1个block,block的索引是2维的>>>
  • int i 获取索引的下标
  • 块索引 blockIdx
  • 块维度 blockDim
  • 上面的代码可以只用了一个block,可使用多个block
  1. 线程的全局位置更改(int i)
  2. 定义每个线程块空间大小(16,16)
  3. 需要多少个block(N/16,N/16)
  • 例如N=32
  • 每块16×16个线程(threadIdx([0,15],[0,15]))
  • Grid有2×2个线程块Block(blockIdx([0,1],[0,1]) blockDim = 16)
  • 那么int i = blockIdx.x * blockDim.x + threadIdx.x
  • 线程同步:
  • Host与device数据传输
    • global memory 全局存储器
    • Constant memory 常量存储器
    • cudaMalloc() global memory分配
    • cudaFree()释放空间
  • 拷贝cudaMmcpy(目的地址,原地址,size, cudaMemcpyHostToDevice)
例如矩阵相乘,每个元素互不影响
  • cpu实现:

  • gpu实现:

  1. 对输入和输出数据内存进行管理,分配内存
  2. 并行处理
  3. 拷贝回cpu,释放内存
  4. 伪代码
  5. cuda核函数实现:
  6. 调用
线程同步

每一个块block可以使用__syncthreads()等待上面程序所有线程都执行完成调用下面方法。

参考

图片来源

很老的一个视频但是入门确实是够了,推荐~

相关推荐
Z21-X16 分钟前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
路溪非溪19 分钟前
python标准库使用总结
开发语言·python
red_redemption1 小时前
自由学习记录(230)
学习
Zwawa1 小时前
嵌入式OLED表驱动菜单:用一张表、一个栈和一个窗口重写表驱动菜单
c语言·单片机·嵌入式
SomeOtherTime2 小时前
Rust 面向对象介绍(AI回答)
开发语言·python·rust
zh_xuan2 小时前
kotlin常见面试题
开发语言·kotlin·面试题
草莓熊Lotso4 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试
晓梦林5 小时前
BUUCTF-菜刀流量-MISC-学习笔记
笔记·学习
huaqianzkh5 小时前
WinForm C#:循环修改控件UI闪烁卡顿?SuspendLayout / ResumeLayout 与 BeginUpdate 优化
开发语言·ui·c#
Godspeed Zhao14 小时前
从零开始学AI25——无监督学习之层次聚类
学习·机器学习·聚类