- В развитии современных процессоров намечается тенденция к постепенному увеличению количества ядер, что повышает их возможности в параллельных вычислениях. Однако уже давно имеются GPU, значительно превосходящие центральные процессоры в данном отношении. И эти возможности графических процессоров уже взяты на заметку некоторыми компаниями. Первые попытки использовать графические ускорители для нецелевых вычислений предпринимались еще с конца 90-х годов. Но только появление шейдеров стало толчком к развитию абсолютно новой технологии, и в 2003 году появилось понятие GPGPU (General-purpose graphics processing units). Немаловажную роль в развитии данной инициативы сыграл BrookGPU, который является специальным расширением для языка C. До появления BrookGPU программисты могли работать с GPU лишь через API Direct3D или OpenGL. Brook позволил разработчикам работать с привычной средой, а уже сам компилятор с помощью специальных библиотек реализовал взаимодействие с GPU на низком уровне.
- Что-же такое технология CUDA? Технология NVIDIA CUDA™ — это единственная среда на C, которая раскрывает возможности графических процессоров для решения самых сложных ресурсоемких задач.Так написано на сайте NVIDIA. Говоря простым языком обывателя, наконец то мы можем задействовать нашу видеокарту для вычислений. Или вот что написано по этому поводу в википедии.
- CUDA (англ. Compute Unified Device Architecture) — технология GPGPU (англ. General-Purpose computing on Graphics Processing Units), позволяющая программистам реализовывать на упрощённом языке программирования Си алгоритмы, выполнимые на графических процессорах ускорителей GeForce восьмого поколения и старше (GeForce 8 Series, GeForce 9 Series, GeForce 200 Series), Nvidia Quadro и Tesla компании Nvidia. Технология CUDA разработана компанией nVidia.
- Фактически CUDA позволяет включать в текст Си программы специальные функции. Эти функции пишутся на упрощённом языке программирования Си и выполняются на графическом процессоре. CUDA даёт разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического ускорителя и управлять его памятью, организовывать на нём сложные параллельные вычисления. Графический ускоритель с поддержкой CUDA становится мощной программируемой открытой архитектурой приближаясь к сегодняшним центральным процессорам.
- Использует grid-модель памяти, кластерное моделирование потоков и SIMD инструкции. Применим в основном для высокопроизводительных графических вычислений и разработок NVIDIA-совместимого графического API. Включена возможность подключения к приложениям, использующим Microsoft Direct3D 9 и OpenGL. Создан в версиях для Linux, Mac OS X и Windows.
- Первоначальная версия CUDA SDK была представлена 15 февраля 2007 года. В основе CUDA API лежит язык Си с некоторыми ограничениями. Для успешной трансляции кода на этом языке, в состав CUDA SDK входит собственный Си-компилятор командной строки nvcc компании Nvidia. Компилятор nvcc создан на основе открытого компилятора Open64 и предназначен для трансляции host-кода (главного, управляющего кода) и device-кода (аппаратного кода) (файлов с расширением .cu) в объектные файлы, пригодные в процессе сборки конечной программы или библиотеки в любой среде программирования, например в Microsoft Visual Studio.
Оборудование
- Первая серия оборудования, поддерживающая CUDA SDK, G8x, имела 32-битный векторный процессор одинарной точности, использующий CUDA SDK как API (CUDA поддерживает тип double языка Си, однако сейчас его точность понижена до 32-битного с плавающей запятой). Более поздние процессоры GT200 имеют поддержку 64-битной точности (только для SFU), но производительность значительно хуже, чем для 32-битной точности (из-за того что SFU всего 2 на каждый потоковый мультипроцессор, а скалярных процессоров 8). Графический процессор организует аппаратную многопоточность, что позволяет задействовать все ресурсы графического процессора. Таким образом, открывается перспектива переложить функции физического ускорителя на графический ускоритель (пример реализации — nVidia PhysX). Также открываются широкие возможности использования графического оборудования компьютера для выполнения сложных неграфических вычислений: например, в вычислительной биологии и в иных отраслях науки.
Преимущества
- По сравнению с традиционным подходом к организации вычислений общего назначения посредством возможностей графических API, у архитектуры CUDA отмечают следующие преимущества в этой области:
- Интерфейс программирования приложений CUDA (CUDA API) основан на стандартном языке программирования Си с некоторыми ограничениями. По мнению разработчиков, это должно упростить и сгладить процеcс изучения архитектуры CUDA(1)
- Разделяемая между потоками память (shared memory) размером в 16 Кб может быть использована под организованный пользователем кэш с более широкой полосой пропускания, чем при выборке из обычных текстур
- Более эффективные транзакции между памятью центрального процессора и видеопамятью
- Полная аппаратная поддержка целочисленных и побитовых операций
Ограничения
- Все функции, выполнимые на устройстве, не поддерживают рекурсии и имеют некоторые другие ограничения
- Архитектуру CUDA поддерживает и развивает только производитель NVidia
Перечень устройств от производителя оборудования Nvidia с заявленной полной поддержкой технологии CUDA приведён на официальном сайте Nvidia: CUDA-Enabled GPU Products
Ознакомительная презентация по CUDA на ВМК МГУ (Юрий Уральский)Ообенности прогрммирования на CUDA, особенности архитектуры GPU, конкретные задачи, решаемые на CUDA
- Теперь после ознакомительной части, давайте поразмышляем на тему, а что нам простым смертным до этого странного слова CUDA? А оказывается, что мы (архитекторы-дизайнеры) получаемя самыми пристрастными пользователями данной технологи, потому как речь дальше пойдет о так называемом (real time rendering)или по русски, визуализации в кратчайшие сроки.
Nvidia CUDA — обработка частиц в реальном времени
Nvidia CUDA обработка волн DerectX
Nvidia CUDA — изменяемые частицы теней
Nvidia CUDA — обработка воды
- Конечно хотелось бы поскорее увидеть данную технологию, так сказать воочию, но к сожалению пока о каких-то готовых продуктах, которые используют CUDA для визуализации говорить рано. Уже достаточно давно компания NVIDIA работает в этом направлении, можно отметить существование библиотеки NVRT демонстрация, которой была на SIGGRAPH 2007, она уже успешно применяется для визуализации. Многие компании из индустрии её используют. Но это незаконченный финальный продукт — именно библиотека, которая позволяет вам использовать CUDA GPU для решения задач трассировки лучей. Это базовый уровень. Предполагается, что на основе этой библиотеки вы будете строить свои приложения — визуализация с использованием Raytracing, или какие либо другие задачи. Это оптимизированная реализация трассировки лучей в общем смысле не обязательно для рендеринга и оптимизированная для NVIDIA процессоров GPU. Внутри компании идет серьезная работа в этом направлении например, вопрос реализации альтернативных конвейеров рендеринга на GPU. Компания специально развивает проект реализации Rays на CUDA. Так же проект из Microsoft Research где, они реализовали RenderMan с помощью CUDA и получили очень хорошее ускорение. Но пока это находится на стадии разработки и экспериментов.
- Студия PIXAR очень заинтересована в использовании CUDA в своих разработках и проектах. Просто пока еще рано говорить о каких то финальных продуктах, которые будут готовы для индустриального применения. В ближайшее время, учитывая то, что GPU становятся более доступными, а производительность растет не по дням, а по часам, в ближайшие несколько лет мы увидим, какие то готовые решения.
- Еще можно наверное сказать относительно применения CUDA вообще в задачах для симуляции. Есть такой plug-in к 3ds Max — Ray Fire он не использует CUDA на прямую, а использует PhysX, а PhusX в свою очередь базируется на CUDA. Это как пример, как CUDA может помочь в решении задач не связанных на прямую с визуализацией.
Дополнение. OptiX, iray, RealityServer
- OptiX — интерактивный визуализатор трассировки лучей, базирующийся на NVIDIA CUDA, и который может быть встроен в любой софт. Дело только за разработчиками. OptiX был представлен на SIGGRAPH 2009 на стенде NVIDIA.
- На данный момент, OptiX на финальной стадии разработки, но то, что сделано уже сейчас впечатляет. Давайте посмотрим на то, что мы получаем и, что можно рассчитывать с помощью OptiX’a:
- Программируемые — поверхности, шейдеры, камеры; Не лимитированы только расчетом графики — лучи могут содержать любые пользовательские данные;
- Возможность масштабирования оборудования
- Ambient Occlusion
- Reflections
- Refractions
- Photon Mapping GI
- Photon Mapping GI
- При этом, главное преимущество OptiX практически полная открытость для расширения и надстроек. Вы можете создавать свои собственные шейдеры, ИС, виртуальные камеры и многое другое. После чего, используя GPU NVIDIA Quadro FX создавать свои проекты с меньшими затратами времени на ожидание и исправления. Хотя пока на данный момент все это требует серьезной доработки в плане дружественности с пользователем, но в течение ближайшего года следует ожидать кардинальных изменений в нашем с вами программном обеспечении.
- NVIDIA OptiX является частью AXE — Application Acceleration Engines, набор модулей для разработчиков в который помимо OptiX включены еще такие модули как SceniX и CompleX, но о них я расскажу в одной из следующих статей.
- Наконец, для пользователей системы визуализации mental ray появилась возможность использовать все потенциалы GPU для визуализации самых сложных и насыщенных различными сложными поверхностями сцены. На SIGGRAPH 2009 был презентован новый продукт от mental images – iray. iray базируясь на архитектуре NVIDIA CUDA, позволяет использовать для визуализации все возможности GPU. iray является как компонента mental ray, так и RealityServer. Плюс ко всему, mental ray 3.8 с iray в течение ближайшего года будет интегрирован во все программы, создаваемые в OEM партнерстве с mental images. К примеру, следующие 3ds Max или Maya, а также SI, возможно будут обладать возможностью расчета финальной картинки с помощью mental ray и iray.
- Если взглянуть на это с технической стороны, то модель данных решений выглядит следующим образом. Данные из приложения посылаются системе визуализации, в свое время программа проанализировав эти данные и настройки запускает визуализатор, а он, базируясь на архитектуре NVIDIA CUDA выполняет вычисления с помощью CPU и GPU.
- Вот как раз для расчетов на GPU применяется драйвер с поддержкой CUDA. Драйвер для работы с OptiX должен быть не ниже версии 190.38. Данный драйвер уже поддерживает CUDA версии 2.3.
- Но, а на какую графическую подсистему рассчитывается применение технологии OptiX и iray? Все как всегда сводится к вопросу о производительности и стабильности, и здесь как всегда ответ сам приходит на ум — Quadro FX и Tesla. Преимущество Tesla состоит в том, что она занимается исключительно расчетами — в таком случае можно использовать её как мощнейший сопроцессор. В случае с Quadro и Tesla мы получаем стабильность и гарантию того что все будет выполнено как задумано художником и не будет такого момента как перегоревшая в самый неподходящий момент GPU или сбои в работе оборудования. Хотя это можно и приписать к минусу — ведь далеко не все пользователи позволят себе покупку более дорогой Quadro и тем более Tesla. Однако подождем выхода конечных продуктов, непосредственно в приложениях для DCC и посмотрим, как будут реализованы эти технологии.
- На данный момент для OptiX рекомендуется применение GPU NVIDIA Quadro FX 3800 и выше. Все дело упирается в количество потоковых процессоров. У NVIDIA Quadro FX 1800 их 64, а у Quadro FX 3800 их уже 192 (как и у Quadro FX 4800CX). И чем больше потоковых процессоров — тем лучше. Хм, раньше мы пытались под «кипение кристалла ЦП» заставить визуализироваться сложные сцены, теперь будем пытаться заставить «кипеть» кристалл графического ускорителя 8).
Демонстрация возможностей iray в RealityServer 2.4.
- Но не одним iray мы едины. Учитывая, что есть и другие рендереры — V-Ray, Brazil и Final Render. У Chaosgroup (разработчик V-Ray) есть так же решение, разработанное с учетом того, что оно будет использовать GPU — V-Ray RT. Хотя в первом релизе на данный момент нет прямой поддержки GPU, и данное решение встраивается в 3ds Max в качестве Active Shade во Viewport. Однако хочется сказать, что разработчики уделяют этому огромную долю внимания — ведь получить визуализатор, который будет использваоть GPU для увеличения скорости рендера. Это очень большой шаг вперед. Но стоит другой вопрос — как быть, если у потенциального клиента и покупателя используются GPU не NVIDIA? Тут ведь нельзя просто взять и написать программный код, оптимизированный только под одну архитектуру и производителя. Есть отличный ответ — использовать Open CL (Open Computing Language). Данный язык не привязан к конкретной продукции — будь то NVIDIA или ATI. И разработчики в Chaosgroup как раз присматриваются именно к использованию Open CL, хотя в демонстрации, которую вы увидите ниже используется и NVIDIA CUDA.
Ускорение вычислений vray по средствам GPU (часть 1)
Ускорение вычислений vray по средствам GPU (часть 2)
- Но вернемся к iray. Ниже даны примеры визуализации интерьера с помощью технологии iray. Достоверно я не могу сказать, сколько времени заняла визуализация этих изображений. Но на видео-демонстрации нового RealityServer 3.0 картинка визуализировалась неимоверно быстро — учитывая, что рассчитывались GI, Reflections. Refractions. Буквально несколько секунд, и готово.
Пример визуализации iray
- Что хочется добавить в заключение. Главное отличие iray от того же V-Ray RT и OptiX — в первую очередь он не является интерактивным средством визуализации. iray предназначается для увеличения скорости вычислений с помощью GPU и множества процессоров, которые находятся внутри графического чипа. Поэтому чем больше GPU будет у вас в системе и чем больше вычислительных ядер в каждом GPU (64 — 240 и выше), тем лучше. При этом если имеется такой продукт как NVIDIA Tesla, то мы получим высокопроизводительное решение для визуализации самых разнообразных сцен и моделей за достаточно короткие сроки.
- Если применять RealityServer и новые решения Tesla RS, здесь появляется новый термин доселе не применявшийся в области визуализации — «облачные вычисления».
- Все это конечно здорово, но как на счет наших любимых пакетов ArchiCAD, Cinema, Artlantis ? ? ? Будем надеяться, что производители вышеперечисленных программ не пропустят данную технологию и в скором будущем мы увидим ArchiCAD c поддержкой данной технологии!
- В следующей статье я постараюсь разузнать как оценивают данную технологию graphisoft, maxon и abvent.