Chinese, Simplified subtitles

← cs_344_u1_38_q_配置内核启动_2

Get Embed Code
3 Languages

Showing Revision 9 created 05/09/2013 by Lian7.

  1. 我们能做的最普通的内核启动看起来像这个:
    3 个参数的平方。
  2. 第一个参数是网格块的维数,
  3. 那有 bx X by X bz 个块。
  4. 这些块中的每一个都由这个参数指定:
    具有 tx X ty X tz 个线程的线程块,
  5. 回顾一下,这有一个最大尺寸。
  6. 最后,还有第三个参数,默认值为零,如果你不使用它,
  7. 我们今天不会专门讨论它。
  8. 它是以字节表示的每个线程块分配的共享内存量。
  9. 借助这一个内核调用,你可以启动大量线程。
  10. 让我们都记住,能力越大,责任越大,所以明智地启动你的内核。
  11. 另一件有关块和线程的重要事情。
  12. 从我们的平方内核回忆一下,
    每个线程知道其在一个块内的线程 ID。
  13. 它其实知道很多事情。
  14. 如我们所见,第一个是线程id x,它是在块内的线程。
  15. 在这里我们有一个块。
  16. 每个线程,比如这里的这个线程,
    知道其索引中的每个 x、y和z的维度值,
  17. 那么我们能以线程idx.x、线程idx.y和线程idx.z来访问那些线程。
  18. 我们也知道了块的维度,即块的大小。
  19. 这个块中有多少线程
  20. 在x 方向,y 方向,还有可能的 z 方向?
  21. 所以我们知道了块的这两件事情。
  22. 我们知道网格的类似事情。
  23. 例如,块索引,就是我在网格内的哪一块。同理,点x、 点y和点z。
  24. 网格维度会告诉我们网格的大小,有多少块位于
  25. x 方向、 y 方向和 z 方向。
  26. 我需要你从这小讨论中明白的只是以下内容。
  27. 当你的问题有多个维度时,拥有多维网格和块很方便。
  28. CUDA与生俱来能够高效地实现这个。
  29. 当您调用 idx.x,或块 dim.y,这在CUDA中非常高效。
  30. 因为我们在这课程中做图像处理,
  31. 你应该指望找到很多的二维网格和块。
  32. 让我们以小测验来结束。
  33. 比方说我启动了以下内核。
  34. 带有 dim 3(8, 4, 2,2)和dim 3 (16,16)两个参数的内核。
  35. 这个调用将启动多少块,
  36. 每个块有多少线程,另外总的线程有多少?