cuda 面试题整理(长期更新)

整理了校招面试时遇到的cuda 八股文
涉及岗位:异构计算/AI框架研发/高性能计算/模型部署/算法优化/算子研发

1.cpu与gpu的区别?
CPU的设计着重于处理单个线程的复杂计算和控制流程。
GPU 被设计用于高密度和并行计算,更多的晶体管投入到数据处理而不是数据缓存和流量控制
体现在GPU的ALU(算术逻辑运算单元)数量更多

2.cuda编程中的SM SP 是什么?
SP(streaming processor),计算核心,最基本处理单元
SM(Streaming multiprocessor),多个SP加上其他找资源组成一个SM

3.cuda编程的内存模型
全局内存
共享内存
寄存器

4.cuda编程的软件模型
Block,线程块
Grid,线程格
thread,线程

5.stream(cuda 流)概念的理解
主机发出的在一个设备中执行的CUDA操作(和CUDA有关的操作,包括主机-设备数据传输和kerenl执行)

6.使用共享内存时需要注意什么?
(1)线程同步
__syncthreads() 在利用共享内存进行线程块之间合作通信前,都要进行同步,以确保共享内存变量中的数据对线程块内的所有线程来说都准备就绪
(2)避免共享内存的 bank 冲突 
bank 冲突概念:同一线程束内的多个线程试图访问同一个 bank 中不同层的数据时,造成bank冲突
只要同一线程束内的多个线程不同时访问同一个 bank 中不同层的数据,该线程束对共享内存的访问就只需要一次内存事务

7.对一个cuda kernel的进行优化可以从哪些角度入手

8.GPU L1/L2缓存介绍
9.同步stream和异步stream的理解

手撕
矩阵乘
softmax规约
nchw转nhwc
长度为n的数组 统计每个元素出现的频率 元素大小为0-256 统计的频率放在另一个数组里面
将数组里面的奇数位置的数放在左边,偶数位置的数放在右边,原地操作
全部评论
大佬能分享一下高性能计算学习路线吗?
4 回复 分享
发布于 2023-09-06 21:41 江苏
你说的这些好基础一般面试官都会问我CUDA中某stream中kernel遇到数据依赖导致切换时保存的上下文是什么,还有计算强度,occupancy,内存墙这些
3 回复 分享
发布于 2023-09-18 21:07 安徽
码住了,之前实习做过cpu加速,但gpu的东西还不太会。
1 回复 分享
发布于 2023-08-21 13:19 浙江
矩阵乘的手撕要写优化版本吧,优化版本很多,要优化到哪个程度,不可能写navie版本吧
点赞 回复 分享
发布于 08-15 11:28 海南
大佬,请问手撕cuda的代码应该怎么准备
点赞 回复 分享
发布于 2024-02-19 16:17 北京
催更大佬!
点赞 回复 分享
发布于 2023-09-06 21:41 江苏
狠狠订阅!冲冲冲
点赞 回复 分享
发布于 2023-08-23 16:10 上海
佬,催更ing
点赞 回复 分享
发布于 2023-08-23 10:06 山东
AI Lab不能没有你
点赞 回复 分享
发布于 2023-08-21 13:17 北京

相关推荐

09-02 21:00
已编辑
西南交通大学 Java
面经 自我介绍一些课程安排(主要是听到我学校的课程里没有计网, 这估计也是没有问我计网的主要原因)操作系统内核态和用户态- 从概念扯到了在Linux中的实现, 内核态本质上是内核空间和权限的集合, 说了下进入到内核态怎么发生的用户栈切换到内核栈哪些操作是内核态的操作- 中断, 异常, I/O等用户进程怎么进入到内核态- 用户进程主动发起的系统调用, 以及中断(缺页中断), 异常系统调用和普通函数之间的区别- 普通函数是用户创建存在elf文件的text区域里面, 系统调用是写入系统内核源码的, 通过make来完整编译出来- 执行普通函数在用户的栈区里, 执行系统调用在这个进程的内核栈里执行上, 普通函数和系统调用之间区别- 系统调用会走内核栈, 申请内存也是通过伙伴系统分配物理内存, 通过slab内存管理器来分配内核对象Linux查看和CPU相关的参数, 使用什么命令查看- Top查看动态的排行- ps获取快照- perf查看某个进程的调用栈中每个函数的CPU占用比例怎么看一个系统在内核态占用的CPU的使用率- 当时忘记了, 和面试官说了下不记得了, 只记得怎么看内核对象的内存占用率了(slabtop), 实际上是pidstatCPU的IO_WAIT数量是怎么统计出来的- 大概说了IO_WAIT指的是因为IO操作被阻塞了IO_WAIT状态的时候, CPU是忙碌的吗- 现代IO设备里面都有DMA设施, 搬运数据的操作是交给DMA来做的, 不会阻塞CPU什么是零拷贝- 只有一次系统调用, 并且开启了某个内核参数以后, 能实现在内核空间不会有冗余拷贝- 在用户态是通过mmap直接将内核缓冲区映射到用户的虚拟地址空间上的什么是虚拟内存- 提供完全隔离的运行地址空间, 屏蔽了操作物理内存的问题- swap机制(也会导致程序抖动)- 内核里一段虚拟内存对应一个vma- 通过mm_struct管理vma什么时候开始分配物理内存- 触发缺页中断的时候会从伙伴系统里分配对应数量的页出来数据库什么是聚簇索引- 从聚簇到非聚簇, 再到非聚簇存在回表聚簇索引B+树的非叶子节点存储的是什么- 我说的索引, 但是面试官想让我回答的是id, 两个人因为这个问题都笑出来了主键是什么字段- 64位的int, 为什么是64位的int. 不使用32位- 32位太小了, 现在单张表很容易超主键一般有什么修饰- prime key- Unique- Autoincreament为什么是单增的- 能避免B+树出现页分裂什么是联合索引- 形式到最左前缀匹配规则到常见的用途, 索引下推和索引覆盖优化查询MySQL的一个查询最多可以用几个索引- 是一个trick向的问题(笑哭), 就是一个非主键索引加上回表的时候的主键索引, 两个索引, 也是说完两个人都笑了下Java线程的状态- CREATE, INTERRUPTABLE, BLOCK, RUNNING, STOP, TERMINATEDINTERRUPTABLE和BLOCK之间的区别- 说了下什么时候会分别出来这两种状态, BLOCK说了IO阻塞, 让我下去重新看下项目我自己说项目问为什么使用的rabbitmq- 我回答的是调研的结果是这个mq最简单易用, 但是被问到的为什么别的更复杂, 回答的只有简单的了解rabbitmq是保序的吗- 我说的是, 然后扯了些可靠性保证的一些内容rabbitmq是怎么做高可用的- 我回答的是不清楚, 但是为了避免mq成为单点问题, 是肯定有成熟的解决方案的, 不是很难的问题, 能很容易搜到解决方案场景题目超大文件排序- 两个人交流着写完了, 中间给了我一些提示算法原地操作的合并数组(第一个数组大小是m+n)反问对我的评价我的优缺点(没问业务是上一个面试官那问得挺清楚的)面试总结总体上看发挥还好, 就是Java上有点薄弱, 对于技术选型的考量上也太简单了.
点赞 评论 收藏
分享
评论
32
329
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务