专栏名称: Ai fighting
本公众号主要分享自动驾驶感知实战,从算法训练到模型部署。主要致力于3D目标检测,3D目标追踪,多传感器融合,Transform,BEV,OCC,模型量化,模型部署等方向的实战。
目录
相关文章推荐
低维 昂维  ·  复旦大学Nat. ... ·  3 天前  
低维 昂维  ·  复旦大学Nat. ... ·  3 天前  
今天看啥  ›  专栏  ›  Ai fighting

面试官面试问:你能写出十种矩阵加法的cuda程序吗?(三)

Ai fighting  · 公众号  ·  · 2024-08-27 22:35

主要观点总结

文章主要介绍了CUDA编程中线程、线程块和网格的概念,以及矩阵相加操作的GPU实现。

关键观点总结

关键观点1: 线程、线程块和网格的定义和角色

文章介绍了在CUDA编程中,线程是执行基本计算任务的最小单元,线程块是一组线程的集合,可以共享数据并通过同步机制协调工作,网格是多个线程块的集合,所有线程块并行执行任务。

关键观点2: 矩阵相加操作的GPU实现

文章给出了几个不同版本的GPU矩阵相加操作实现,包括不同维度的网格和线程块的使用,以及使用warps的处理方式。

关键观点3: 代码实现的不同之处

文章中的07、08与前面的05、06的区别在于具体实现的细节不同,包括线程块和网格的维度、索引计算方式等。

关键观点4: 读者参与和互动

文章最后鼓励读者参与,留下了编程思路,并提醒读者点赞和在看,以表达对其创作的支持。


文章预览

前言 在CUDA编程中,线程、线程块和网格是三个基本的并行计算单位: 线程 (Thread) :线程是执行基本计算任务的最小单元,每个线程执行相同的代码但处理不同的数据。 线程块 (Thread Block) :线程块是一组线程的集合,这些线程可以共享数据并通过同步机制协调工作,线程块的大小在执行时固定。 网格 (Grid) :网格是多个线程块的集合,所有线程块并行执行任务,网格的大小同样在执行时固定。 欢迎加入自动驾驶实战群 07 grid2d_block1d // grid 2D block 1D __global__ void sumMatrixOnGPUMix(float *MatA, float *MatB, float *MatC, int nx, int ny) { unsigned int index = blockIdx.x; unsigned int col = index % nx; unsigned int row = index / nx; unsigned int idx = row * nx + col; if (index < nx * ny) { MatC[idx] = MatA[idx] + MatB[idx]; printf("index col row idx c %d %d %d %d %d %f \n", ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览