Что такое CUDA?Для чего это?Каковы преимущества?А с чего начать? - PullRequest
23 голосов
/ 06 марта 2011

Я заинтересован в разработке под какой-то новой технологией, и я думал о том, чтобы попробовать CUDA.Теперь ... их документация слишком техническая и не дает ответов, которые я ищу.Кроме того, я хотел бы услышать ответы от людей, которые уже имели некоторый опыт работы с CUDA.

В основном мои вопросы приведены в заголовке:

Что такое CUDA?(это фреймворк? Или API? Что?)

Для чего он нужен?(есть ли что-то большее, чем просто программирование на GPU?)

На что это похоже?

В чем преимущества программирования на CUDA вместо программирования на CPU?

Какое хорошее место, чтобы начать программирование с CUDA?

Ответы [ 2 ]

29 голосов
/ 06 марта 2011

CUDA объединяет несколько вещей:

  • Массивно параллельное оборудование, разработанное для выполнения общего (неграфического) кода, с соответствующими драйверами для этого.
  • Язык программирования, основанный наC для программирования указанного аппаратного обеспечения и языка ассемблера, который другие языки программирования могут использовать в качестве цели.
  • Комплект разработки программного обеспечения, который включает в себя библиотеки, различные средства отладки, профилирования и компиляции, а также привязки, позволяющие программировать на стороне процессораязыки вызывают код на стороне GPU.

Цель CUDA - писать код, который может работать на совместимых массивно параллельных архитектурах SIMD: это включает в себя несколько типов графических процессоров, а также аппаратное обеспечение не-GPU, такое как nVidia Tesla,Параллельное аппаратное оборудование может выполнять значительно большее количество операций в секунду, чем центральный процессор, при довольно схожих финансовых затратах, обеспечивая повышение производительности в 50 раз или более в ситуациях, которые позволяют это.

Одним из преимуществ CUDA по сравнению с более ранними методами является то, что доступен язык общего назначения вместо необходимости использовать пиксельные и вершинные шейдеры для эмуляции компьютеров общего назначения.Этот язык основан на C с несколькими дополнительными ключевыми словами и концепциями, что позволяет программистам не-GPU легко их освоить.

Это также признак того, что nVidia желает поддерживать распараллеливание общего назначения на своем оборудовании: теперь это звучит не так, как "взлом с помощью графического процессора", а скорее как "использование технологии, поддерживаемой поставщиком", и этооблегчает его принятие в присутствии нетехнических заинтересованных сторон.

Чтобы начать использовать CUDA, загрузите SDK, прочитайте руководство (серьезно, это не , что сложно, если вы уже знаете C) икупите CUDA-совместимое оборудование (вы можете сначала использовать эмулятор, но конечной целью этого является производительность, лучше, если вы действительно сможете опробовать свой код)

1 голос
/ 06 марта 2011

(Отказ от ответственности: я использовал CUDA только для семестрового проекта в 2008 году, поэтому с тех пор все могло измениться.) CUDA - это набор инструментов разработки для создания программ, которые могут работать на графических процессорах nVidia, а также API для управления такими программы из процессора.

Преимущество программирования на GPU по сравнению с программированием на CPU заключается в том, что для некоторых задач с высокой степенью параллелизации вы можете получить массовых ускорения (примерно на два порядка быстрее). Однако многие проблемы трудно или невозможно сформулировать так, чтобы они подходили для распараллеливания.

В некотором смысле CUDA довольно прост, потому что вы можете использовать обычный C для создания программ. Однако для достижения хорошей производительности необходимо принимать во внимание много вещей, в том числе множество низкоуровневых деталей архитектуры графического процессора Tesla.

...