YouTube

Got a YouTube account?

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

Russian subtitles

← 01-33 Squaring Number Using CUDA Part 2

Get Embed Code
3 Languages

Showing Revision 1 created 11/20/2016 by Алексей Горячих.

  1. Теперь детально рассмотри код, строку за строкой,
  2. чтобы уверенно знать, что делает каждый вызов.
  3. Сперва пройдемся по CPU коду.
  4. И первое, мы делаем это объявляем размер массива и определяем как много байтов он использует.
  5. Затем заполняем его в этом цикле числами с плавающей запятой,
  6. просто задавая i-й элемент массива как i.
  7. Все это стандартный C, ничего специфичного для GPU нет.
  8. Хотя отметим одну вещь, это общая договоренность в CUDA.
  9. Данные CPU, host'а, начинаются с "h_". Данные GPU - с "d_".
  10. Это просто договоренность. Вы можете именовать свои переменные как хотете.
  11. Но именование переменных таким образом, помогает избежать самой распространенной ошибки новичков
  12. в CUDA, когда вы попытаетесь доступиться до данных на CPU из GPU или наоборот.
  13. Если вы доступитесь в данным через указатель на CPU,
  14. ваш указатель будет указывать на что-то в CPU, или получите ошибку.
  15. Тоже самое на GPU. Вы найдете много кода который использует эту договоренность.
  16. Прокрутим немного выше.
  17. И первая интересная вещь, что вы видите это как объявляется указатель на GPU.
  18. Он выглядит также как указатель на CPU. Это просто flaot*.
  19. Теперь говорим CUDA что ваши данные на самом деле на GPU не на CPU, посмотрите на следующие две линии.
  20. Мы используем cudaMalloc с двумя аргументами, указателем и количеством байт для аллоцирования.
  21. cudaMalloc означает аллоцирование данных на GPU,
  22. тогда как просто malloc означает аллоцирование памяти на CPU.
  23. Следующее что происходит это копирование данных с CPU,
  24. массива с "h_", на GPU в массив с "d_".
  25. Это cudaMemcpy - как стандартная memcpy, но она принимает
  26. 4 аргумента вместо 3. Первые два аргумента такие же как в
  27. стандартном memcpy: назначение, источник и кол-во байт.
  28. Четвертый аргумент задает напавление передачи.
  29. Есть 3 варианта c host'а на device, с devic'а на host
  30. и с devic'а на device.