关于CUDA编程的面试问题?

8

我即将参加一场面试,职位是入门级CUDA编程(希望使用C语言)。

我想知道是否有人可以建议我在面试中可能会遇到的问题。

我已经阅读了官方编程指南,但目前还不太熟练。

谢谢。


你尝试过编写一些非平凡的东西吗?例如N体模拟之类的?为了从CUDA中获得任何性能,您需要仔细规划合作式内存访问。如果没有任何实际经验,您将会失败。 - drxzcl
遗憾的是,N体模拟等类似任务对我来说过于复杂!但我已经涉猎CUDA大约4-5个月了。我编写了一些程序,以便更好地理解例程和架构。 - Gitmo
我不是特指N体问题,只要是利用线程合作的程序都能得到额外的好处。如果没有这样做,就无法从GPU中获得任何有意义的性能提升。 N体问题只是一个(简单)的例子,但其他也可以。矩阵乘法、计算距离矩阵等等。如果你试图通过记忆用户指南来学习CUDA,你将会失败。 - drxzcl
3个回答

24

我认为你需要准备的一些问题是:

  • GPU中有多少种不同类型的内存?
  • 什么是合并/非合并?
  • 你能实现一个矩阵转置核吗?
  • 什么是warp?
  • 在多处理器内部,可以同时运行多少个warp?
  • 块和线程之间的区别是什么?
  • 线程之间可以相互通信吗?块之间呢?
  • 你能描述一下缓存是如何工作的吗?
  • 共享内存和寄存器之间的区别是什么?
  • 哪些算法在GPU上表现更好?数据绑定还是CPU绑定?
  • 将应用程序移植到CUDA需要执行哪些步骤?
  • 什么是屏障?
  • 什么是流?
  • 你能描述一下内核的占用率是什么意思吗?
  • 结构数组与数组结构有什么区别?

1
非常感谢!那确实帮了我很多。我可以回答大部分这些问题 :) 现在感觉有点自信了。 - Gitmo
8
面试应该是面试,而不是问答节目。你需要问一些能够展示他们头脑中转动的轮子的问题,而不是验证他们是否读过用户指南。 - drxzcl

9
您有N个长度为M的向量(N>>M)。请告诉我您将如何设计核以评估距离矩阵。特别注意问题的分割方式以及线程协作可以用于提高占用率的方式。
如果M>>N,那么您对这个问题的回答会发生什么变化?
这里的想法不是让您编写代码,而是让您大声思考。这表明您真正知道如何使用GPGPU技术,而不仅仅是重复用户指南。

5
如果是科学角色,那么可以预期会涉及到浮点数和数值精度的问题,特别是应该查看 NVIDIA SDK 中的降维示例,因为它阐述了 Fabrizio 文章中的许多观点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接