Russian subtitles

← 01-41 Configuring the Kernel Launch Parameters 2

Get Embed Code
3 Languages

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

  1. Наиболее общая форма запуска kernel выглядит так, square от трех параметров.
  2. Первый размерность сетки блоков
  3. здесь bx x by x bz блоков.
  4. Каждый из блоков задан таким параметром: блок thread'ов по tx x ty x tz в каждом,
  5. и помним, что у них есть максимальный размер.
  6. Наконец, есть третий параметр, который по умолчанию 0, если мы его не используем,
  7. и сегодня мы не будем его рассматривать.
  8. Это количества shared памяти в байтах аллоцированной для каждого блока.
  9. С таким вызовом kernel'а вы можете запускать огромное количество thread'ов.
  10. Только помним, что в великой силой приходит великая ответственность, т.е. запускаем kernel'ы разумно.
  11. Еще одна важная вещь о блоках и thread'ах.
  12. Вспомним из нашего kernel'а square, что каждый thread знает свой thread ID в блоке.
  13. Он на самом деле многое знает.
  14. Во-первых это threadID.x, как мы уже видели это определяет что за поток в блоке.
  15. Здесь у нас блок.
  16. Каждый thread, например этот, знает свой индекс в каждом из измерений x, y, z,
  17. и мы можем получить к ним доступ как threadId.x, threadId.y, threadId.z.
  18. Мы также знаем blockDim, размер блока.
  19. Т.е. Как много thread'ов в каждом блоке
  20. по направлению x, y и z.
  21. Итак мы знаем это про блок.
  22. Аналогичной мы знаем для сетки.
  23. blockIdx, например, определяет что это за блок в сетке. И опять c .x, .y, .z.
  24. И gridDim говорит нам о размере сетки, как много блоков в ней
  25. по направлению x, направлению y, и направлению z.
  26. Я бы хотел чтобы вы запомнили из этого разговора следующее.
  27. Это удобно иметь многомерные сетки и блоки, когда задача имеет несколько измерений.
  28. CUDA реализует это изначально и эффективно.
  29. Когда вы вызываете threadId.x или blockDim.y это очень эффективно в CUDA.
  30. Т.к. у нас будет много обработки изображений в это курсе,
  31. вам следует рассчитывать на обнаружение множества двумерных сеток и блоков.
  32. Завершим небольшим опросом.
  33. Пусть я запускаю следующее ядро.
  34. С двумя параметрами dim3(8, 4, 2, 2) и размерностью dim3(16, 16).
  35. Как много блоков запустится при этом вызове,
  36. как много thread'ов в блоке и какое их итоговое кол-во.