YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Chinese, Simplified subtitles

← 31_l

Get Embed Code
3 Languages

Showing Revision 2 created 05/03/2013 by Michael Xiao.

  1. 让我们一行一行地仔细看一下代码,
  2. 所以我们能肯定我们知道每个调用的作用。
  3. 我们首先看一遍CPU代码。
  4. 我们要做的第一件事是声明数组大小,决定它用多少字节。
  5. 然后我们用浮点数填充这个循环,
  6. 其中数组元素 i 简单地设为 i。
  7. 所有这些都是标准的C语言,目前还没有GPU特定的内容。
  8. 不过,值得注意的一点是一个常用的CUDA约定。
  9. 主机CPU上的数据以h_ 开头,
    设备GPU上的数据以d _ 开头。
  10. 这只是一个约定,你可以对你的变量任意命名。
  11. 但以这个方式对变量进行命名有助于
    避免CUDA中初学者最常犯的错误,
  12. 在其中你试图从GPU访问CPU上的数据,反之亦然。
  13. 如果你通过CPU上的指针访问数据,
  14. 你的指针最好指向CPU内存中某位置,不然你将遇到困难。
  15. 对GPU也是如此。你会发现你看到的很多CUDA代码都用这约定。
  16. 让我们向上滚动一点。
  17. 你看到的第一样有趣的东西是如何在GPU声明指针。
  18. 这看起来就像在CPU上声明指针,就是一个float *。
  19. 现在要告诉CUDA你的数据实际在GPU上,
    而不在CPU上,看下面两行。
  20. 我们用带两个参数的cudaMalloc,指针和分配的字节数。
  21. CudaMalloc意思是分配GPU上的数据,
  22. 而普通的Malloc意思是分配CPU上的数据。
  23. 我们接下来做的是从CPU数组h_in
  24. 复制数据到GPU的数组d_in。
  25. 这个调用是cudaMemcpy,它就像普通的Memcpy,

  26. 但它有四个参数,而不是3个。前3个参数与
  27. 普通C Memcpy一样,目标地址、源地址和字节。
  28. 第4个参数是转移方向。
  29. 3个选项是CUDA内存主机到设备、CUDA内存设备到主机以及
  30. CUDA内存设备到设备。