admin / 07.01.2018

Cuda — основы, примеры.

Обзоры и статьи про CUDA

Развитие вычислений на GPU: преимущества архитектуры Fermi

/

Прошло всего три года со дня выхода в свет GPU c поддержкой CUDA, но за это время не только производительность видеокарт NVIDIA выросла на порядок, но и программная архитектура приобрела практически завершенный вид.

FermiCUDAGPGPU

Проблемы и преимущества Fermi

/

Выход представителей нового поколения графических процессоров NVIDIA несколько раз откладывался, в итоге первые GeForce и Tesla на новой архитектуре вышли урезанными, относительно первоначально заявленных спецификаций. Они так же неприятно удивили довольно высоким уровнем энергопотребления. Что послужило причиной задержек? И стоило ли ждать? Какие особенные архитектурные инновации выделяют Fermi и делают его уникальным?

FermiAMDNVIDIATSMCCUDAGPGPU

Обзор видеоредактора vReveal с поддержкой NVIDIA CUDA

В условиях съемки с мобильного телефона или ручной камеры конечная видеозапись далеко не всегда оказывается приемлемой для показа. Различные шумы, дрожания, лишние тени появляются кадр за кадром. Все мы не раз сталкивались с этим. Но как же избежать столь неловкой ситуации (конкурсная работа)?

CUDAвидеоконкурс

Параллельные вычисления на GPU NVIDIA или суперкомпьютер в каждом доме

/

До недавнего времени забытый пароль архивов RAR означал потерю заархивированных данных практически навсегда. Мощностей отдельно взятого компьютера было в принципе недостаточно для атаки методом перебора «в лоб», а распределённые вычисления и более сложные способы подбора были доступны лишь немногим. Но мощные графические процессоры и технология NVIDIA CUDA внесли коррективы (конкурсная работа).

CUDAGPGPUконкурсбезопасность

Pentium4 производства AMD

/

Он любит SIMD векторизацию и не любит ветвления, он обладает большой абсолютной пиковой теоретической производительностью при использовании надлежащей оптимизации на некоторых задачах. Можно подумать, что это характеристики ушедшего из роадмэпов процессора Intel, который скоро станет легендарным. Однако…

FermiRadeonAMDCUDAGPGPUOpenCLEvergreen

Проблемы трассировки лучей — из будущего в реальное время

В данной статье рассмотрен перспективный метод формирования изображения, так называемый метод трассировки лучей, или ray tracing. Описаны принцип работы метода и приведены примеры использования. Также затронуты аспекты его применения в реальных приложениях, рассмотрены плюсы и минусы использования данного метода на современных системах.

FermiLarrabeeCUDARay-TracingрэйтрейсингIntel

Параллельные вычислительные процессоры NVIDIA: настоящее и будущее

/

Когда пишут об архитектуре NVIDIA CUDA, принято начать с экскурса в историю развития GPU, роста их функциональных возможностей, как они, шаг за шагом, превращались в универсальные вычислительные устройства. Но, в данной статье этому не будет уделено никакого внимания, видеоускорители уже эволюционировали в процессоры. И разработчикам, и пользователям программного обеспечения в принципе все равно, был ли этот путь ровным или извилистым.

FermiCUDAпрограммированиеOpenCLNVIDIAархитектура

Развитие современнных графических процессоров для видеокарт привело к тому, что вычислительная мощность видеокарты зачастую превышает вычислительную мощность центрального процессора. Например, в видеочипах NVIDIA основной блок — это мультипроцессор с несколькими десятками ядер. Кроме того, видеокарта содержит быструю глобальную память с доступом к ней всех мультипроцессоров, локальную память в каждом мультипроцессоре, а также специальную память для констант. Самое главное — эти несколько ядер мультипроцессора в GPU являются SIMD (одиночный поток команд, множество потоков данных) ядрами. И эти ядра исполняют одни и те же инструкции одновременно, такой стиль программирования является обычным для графических алгоритмов и многих научных задач.

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

Технология параллельного программирования CUDA

В этом разделе мы расскажем о технологии CUDA, которая разрабтывается корпорацией NVIDIA.

NVIDIA CUDA – это «архитектура, т.е. совокупность программных и аппаратных средств, которые позволяют производить на GPU вычисления общего назначения». Официально аббревиатура CUDA расшифровывается так: Compute Unified Device Architecture. На данный момент есть готовый SDK, для языков программирования C, C++ и Fortran.

CUDA — это доступная каждому разработчику ПО технология, её может использовать любой программист, знающий язык Си или Fortran. Придётся только привыкнуть к иной парадигме программирования, присущей параллельным вычислениям. Но если алгоритм в принципе хорошо распараллеливается, то изучение и затраты времени на программирование на CUDA вернутся в многократном размере.

Ещё один ключевой момент архитектуры CUDA – лёгкая масштабируемость. Единожды написанный код будет запускаться на всех устройствах, поддерживающих CUDA. Для разработки и отладки кода для запуска на GPU можно использовать обычные видеокарты. А когда продукт готов – запускать его уже на мощных Tesla. Это очень удобно.

В следующем параграфе мы рассмотрим способ распараллеливания решения задачи Эйлера с помощью CUDA.

NVIDIA CUDA – доступный билет в мир больших вычислений

АрхивИнтерактив

автор : Игорь Осколков   30.04.2009

О NVIDIA CUDA знают очень многие, но знания эти обычно не слишком глубоки. Поэтому мы попросили Юрия Уральского — ведущего специалиста по технологиям NVIDIA рассказать о ней подробнее.

Сразу предупрежу, что это не интервью в классическом формате "вопрос-ответ", данный материал представляет собой скорее пересказ слов собеседника.

Так всё-таки интереснее и воспринимать проще. А смысл мы не переврали, честное слово. Итак, на вопросы "Компьютерры-Онлайн" отвечал Юрий Уральский — ведущий специалист по технологиям NVIDIA. В ходе нашей с ним беседы было затронуто множество тем и самые интересные из них и изложены ниже.

Расчёты на GPU. Предыстория

Само по себе такое направление, как расчёты на GPU, не такое уж и молодое. Идея таких расчётов впервые появилась примерно в 2003 году. Выход NV30 обеспечил достаточно высокий уровень программируемости GPU – произвольный код стало возможно запускать в виде графических шейдеров. Тогда использовался исключительно графический интерфейс как для ввода начальных данных и кода, так и для считывания результата. Об удобстве не было и речи, но тем не менее какие-то реальные задачи уже можно было решать. Это был первый фактор.

Вообще же любой видеоускоритель в основе имеет массивно-параллельную архитектуру, когда великое множество относительно медленных элементов (ядер) работают одновременно. Это значит, что пиковая мощность типичного GPU намного выше, чем у CPU. Встаёт только вопрос об утилизации этой мощности. И это был второй фактор.

Именно эти два фактора стали предпосылками для развития GPGPU (концепция вычислений общего назначения на GPU) в целом.

Что такое CUDA?

Главная проблема заключалась в том, что не было никакого стандартного интерфейса для программирования GPU. Разработчики использовали OpenGL или Direct3D, но это было не очень удобно. По этой причине NVIDIA занялась разработкой некоего единого и удобного стандарта и к выходу G80 представила технологию CUDA.

NVIDIA CUDA – это "архитектура, т.е. совокупность программных и аппаратных средств, которые позволяют производить на GPU вычисления общего назначения". Официально аббревиатура CUDA расшифровывается так: Compute Unified Device Architecture. На данный момент есть готовый SDK, который пока что использует язык программирования C. Но в скором будущем появится поддержка Fortran (очень популярный язык в научной среде) и C++. Вообще никаких принципиальных ограничений на язык или модель программирования нет, лишь бы была возможность создавать параллельный код. Причём параллелизм несколько отличается от того, который подразумевается при работе с CPU. В случае разработки приложений для традиционных CPU речь идёт о параллелизме задач – один программный модуль исполняется на одном ядре, другой на втором и т.д. Когда мы говорим о CUDA, то мы говорим о параллелизме данных. Подразумевается, что данных у вас всегда много и больше, чем физических процессоров.

Ещё один ключевой момент архитектуры CUDA – лёгкая масштабируемость. Единожды написанный код будет запускаться на всех устройствах, поддерживающих CUDA. Для разработки и отладки кода для запуска на GPU можно использовать обычные видеокарты. А когда продукт готов – запускать его уже на мощных Tesla. Это очень удобно.

Проблемы традиционных CPU.

CUDA мы катимся: технология NVIDIA CUDA

Роль GPGPU в жизни NVIDIA

Направление GPU-компьютинга очень важно для NVIDIA. С момента запуска архитектуры G80 в 2006 году было выпущено более 100 млн. видеоускорителей, которые поддерживают CUDA. И каждую неделю продаётся ещё один миллион CUDA-capable устройств. Это даёт право называть технологию массовой.

Еще несколько лет назад казалось, что интерес к параллельному программированию утих – мощные кластеры стали собираться из компонентов для обычных PC. Но примерно с 2005 года скорость роста производительности обычных CPU сильно упала, а GPU – нет. NVIDIA же предлагает с каждым годом всё большую производительность и масштабируемость. Именно это привлекает потребителей и разработчиков. А если спрос на решения компании есть и будет в дальнейшем, то отказываться от этого направления смысла нет – его надо усиленно развивать.

Переход от традиционных решений к NVIDIA CUDA

Для начала надо отметить, что NVIDIA не предлагает полноценную замену традиционным CPU. Нельзя собрать кластер на базе ускорителей Tesla и запустить на нём произвольный код. Решения GPGPU являются подспорьем в сложных расчётах, а Tesla можно скорее назвать очень мощным сопроцессором. В любом коде есть участки, которые хорошо исполняются на CPU. Их нет смысла портировать. Но часто можно выделить небольшие по объёму, но критичные по времени исполнения участки кода. И за счёт них можно значительно увеличить конечную производительность. В качестве примера можно привести работу, которую провели в Национальном центре исследования погоды США. У них уже был код, который исполнялся на обычном кластере. Они переписали всего 1% кода для работы на GPU, а в итоге получили суммарный прирост скорости в 20%!

Однако основная проблема заключается в необходимости переосмысления задачи. Традиционные модели программирования не годятся для расчётов на GPU. Разработчику необходимо найти параллелизм в задаче и правильно его выразить. Для некоторых задач переход довольно прост и зачастую очевиден, для некоторых – с точностью до наоборот.

Ускорители Tesla

Основными продуктами NVIDIA для расчётов на GPU являются устройства из серии Tesla. Существуют 3 модификации этих продуктов:

  • Tesla C – внешне не отличается от типичной видеокарты (нет только видеовыходов) и подключается по интерфейсу PCI-E. Он потребляет около 200 Вт и имеет пиковую производительность в 1 Тфлоп.
  • Tesla D – так называемый "приставной суперкомпьютер", внутри которого находятся 2 ускорителя Tesla C. Достаточно мощное и компактное решение. Подключается к рабочей станции отдельным кабелем.
  • Tesla S – это компактный сервер стандартного формфактора 1U, предназначенный для установки в стойку. Позиционируется как дополнение к уже существующему кластеру на обычных CPU.

Чем отличаются продукты серий GeForce и Tesla? Во-первых, у этих продуктов совершенно разный целевой рынок (Tesla – профессиональное решение, GeForce – консьюмерское), а значит и требования к качеству и прочим параметрам заметно отличаются. Все ускорители Tesla проходят дополнительный контроль качества и производитель гарантирует их бесперебойную работу в режиме 24×7. Во-вторых, жизненный цикл Tesla намного больше, чем у GeForce. Любого рода поддержка (техническая, программная etc) осуществляется в течение очень длительного срока.

NVDIA CUDA в российской научной среде

В научной среде наблюдается повышенный интерес к CUDA. На данный момент 41 вуз по всему миру вплотную работает с этой технологией и активно разрабатывает приложения на её основе. Большинство таких заведений не обладает нужными бюджетами для покупки дорогих кластеров, но зато они имеют много человеческих ресурсов и могут позволить себе переписать уже готовый код для переноса его на GPU. В России компания NVIDA сотрудничает с МГУ – там уже есть люди, которые непосредственно занимаются GPU-расчётами, а также имеется специальный курс для обучения студентов CUDA-программированию. Курс в МГУ рассчитан на один семестр. Это открытый курс, занятия могут посещать не только студенты и аспиранты МГУ, но и сторонние разработчики. Лекции и материалы курса доступны на сайте CUDA группы в Google. Это пока что первый опыт компании, но уже нескольких других вузов дали согласие на внедрение этого курса, и есть надежда, что в дальнейшем это направление будет активно развиваться.

Top500 и реальная производительность CUDA

Среди машин, входящих в знаменитый рейтинг Top500, уже есть те, в которых используются ускорители Tesla. В ноябре 2008 года одна из таких машин занимала 29-е место.

Отдельно стоит вопрос о производительности NVIDIA CUDA в реальной жизни. Дело в том, что заявленных пиковых значений можно достичь не на каждой задаче. И в этой области есть некоторое отставание от традиционных процессоров. Получить заявленную производительность на CPU несколько легче, чем на GPU.

Конкурентные технологии от ATI и Intel

Технологию ATI Stream в NVIDIA не считают очень сильным конкурентом. CUDA и Stream – это две разные технологии, которые стоят на различных уровнях развития. Программирование для продуктов ATI намного сложнее – их язык скорее напоминает ассемблер. CUDA C, в свою очередь, гораздо более высокоуровневый язык. Писать на нём удобнее и проще. Для крупных компаний-разработчиков это очень важно. Если говорить о производительности, то можно заметить, что её пиковое значение в продуктах ATI выше, чем в решениях NVIDIA. Но опять всё сводится к тому, как эту мощность получить.

Сравнивать же CUDA и Intel Larrabee нет никакого смысла. Larrabee ещё не выпущен и делать какие-то выводы слишком преждевременно.

Экономичность расчётов на GPU

В качестве наглядной демонстрации экономичности применения ускорителей Tesla взгляните на нижеследующий слайд. При одинаковой производительности использование платформы CUDA оказывается в 10 раз дешевле и в 21 раз энергоэкономичнее, чем традиционный кластер. С точки зрения производительности на ватт и производительности на доллар GPU значительно более привлекательны, особенно для выстраивания серверов.

Светлое будущее

В будущем NVIDIA CUDA будет обязательно развиваться. Планируется дальнейшее увеличение энергоэффективности и снижение тепловыделения. Обязательно появятся более производительные продукты. При этом все они будут обратно совместимы с уже существующими.

В программной модели CUDA глобальных изменений не будет. Будут мелкие постоянные улучшения для более гибкого использования GPU и расширения круга охватываемых задач. Также платформа станет более лояльно относиться к ошибкам в коде, которые могут сильно влиять на производительность.

Заключение

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

Ну а в самом конце не могу не привести замечательное сравнение GPU и CPU от господина Уральского: "CPU – это внедорожник. Он ездит всегда и везде, но не очень быстро. А GPU – это спорткар. На плохой дороге он просто никуда не поедет, но дайте хорошее покрытие и он покажет всю свою скорость, которая внедорожнику и не снилась."

nVidia 6xx: CUDA делась производительность?


Внимание! Данный материал потерял свою актуальность, поскольку относился к конкретным поколениям видеокарт, рекомендую перейти к прочтению следующей части. Зачем нужны видеокарты Quadro (часть 5)…

Продолжая «железную» тему выбора компьютера для занятий 3D-графикой, вынужден особо подчеркнуть неприятную особенность нового поколения 6xx видеокарт от nVidia. Информация будет интересна тем, кто связан с GPU-вычислениями (вычисления, рендеринг с использованием видеокарты).

Если вы не в курсе, то в компьютерной технике готовится очередной качественный скачок производительности за счет переноса вычислений с центрального процессора на специализированные вычислительные устройства. Примерами таких устройств являются, например, видеокарты nVidia, содержащие CUDA-ядра (семейства GeForce, Quadro, Tesla). А также анонсированный процессор Xeon Psi от Intel, который по сути является отдельным многоядерным устройством аналогичным CUDA.

Поскольку мы фактически говорим о многоядерных процессорах, то их производительность линейно зависит от количества ядер. Так, например, если мы берем видеокарту GeForce GTX 430 (96 ядер) и GeForce GTX 480 (480 ядер), то производительность второй в GPU-вычислениях будет примерно в 5 раз выше.

Поколение nVidia 5xx подарило нам невероятно классную видеокарту GeForce GTX 580 (512 CUDA-ядер). Карта оказалась феноменально производительной… чем похоже испугала саму компанию nVidia. На настоящий момент она остается наиболее выгодным решением для GPU-рендеринга.

Успех GTX 580 породил целый ряд проблем для nVidia:
1) Взята слишком высокая планка CUDA-производительности, в то время когда конкурент AMD (ATI) строго говоря даже не ступил на это поле (мне неизвестно ни об одной удачной реализации многоядерных вычислений на устройствах этого производителя).
2) Видеокарта GTX 580 оказалась пригодной практически для любых задач, а из-за своей CUDA-производительности она начисто разгромила карты Quadro («в-четыредорога») и сделала сомнительным приобретение устройств Tesla (просто «космический» ценник).

Ну и что же отчебучила nVidia?! nVidia просто сделала еще раз то же самое, но по-другому!

В видеокартах поколения 6xx используется новое ядро Kepler. Если коротко изложить суть нововведений, то из архитектуры предыдущих поколений выкинули часть блоков, вдвое понизили частоту (!), кое-что упростили. В результате чего ПРОИЗВОДИТЕЛЬНОСТЬ CUDA УПАЛА ВТРОЕ!!!

Чтобы пользователи не заметили подставы весь маркетинг построили вокруг двух тезисов:
1) Энергопотребление снизилось (чистая правда и это действительно важно и полезно)
2) Ядер CUDA стало больше (да-да, ядер стало больше, но, вот незадача, сами ядра втрое слабее)

Получился парадокс. Новое поколение 6xx по CUDA-производительности практически ничем не лучше чем предыдущие поколения (прирост 10-15% очень трудно почуствовать)! А некоторые функции по обработке геометрических данных, особенно необходимые для работы с 3D-сценами в них умышленно урезаны!

Это nVidia сделала себе задел на будущее.

Обзоры и статьи про CUDA

Через год она снова возьмет тот же рубеж, что уже был взят картой GTX 580. Разумеется в маркетинговых материалах все сплошь радостные известия (конечно, нужно просто сравнивать по нужным параметрам и отчеты будут какие надо).

А обрадовавшиеся пользователи побежали в магазины за «мега-производительными» видеокартами и обнаружили, что их как обычно «обули».

Не буду голословным. Например, при сравнении на Blender Cycles экспериментально получено время рендеринга:

GTX 660Ti (1344 CUDA-ядра Kepler) — 83 сек.
GTX 560Ti (384 CUDA-ядра Fermi) — 94 сек.

Т.е. получается, что 660Ti быстрее на 13,25% чем 560Ti.
Если привести результаты, то по производительности получается четко:
1 ядро Fermi = 3 ядра Kepler

Запомните это и не впадайте в эйфорию при виде спецификаций новых видеокарт (втрое возросшее количество ядер кружит голову, но это лишь уловка).

Подведу итог. Два последних года нет сколько-нибудь заметного роста CUDA-производительности. Такой маркетинг.

P.S. В качестве недорогого решения для GPU-рендера я сейчас рекомендую брать либо GTX 660Ti (оптимальное соотношение цена/производительность на сегодняшний день) либо что-то поколений 4хх или 5хх с большим количеством ядер. Проверяйте по формуле 1 ядро Fermi = 3 ядра Kepler. Ну а если у вас с деньгами порядок, то можете подумать также про GeForce GTX 680 и GeForce GTX 690.

Прочтите также продолжение Зачем нужны видеокарты Quadro (часть 5)…

Автор: Александр Миловский

Часть 1. Общие рекомендации по выбору компьютера для 3D
Часть 2. Хараткеристики видеокарт
Часть 3. Промежуточные Итоги
Часть 4. Бюджетные решения
Часть 5. Зачем нужны видеокарты Quadro
Часть 6. nVidia 6xx: CUDA делась производительность?

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*