Около 5 лет назад я опубликовал
обзор системы визуализации NVIDIA Iray в пакете расширений SAP для Autodesk 3ds Max 2011. Проект интеграции Iray в 3ds Max развивался и сейчас представляет собой мощный и гибкий инструмент для визуализации трехмерных сцен и анимации с возможностью применения GPU от компании NVIDIA и технологии NVIDIA CUDA для ускорения вычислений в процессах визуализации. Он реализован на концепции заложенной разработчиками Autodesk, а это накладывает определенные ограничения на реализации ряда важных функций самого ядра визуализации Iray и внедрение новых технологий. Ядро системы визуализации Iray разрабатывается усилиями NVIDIA, а с недавних пор на его основе компания самостоятельно создает свои собственные расширения для таких пакетов как Autodesk 3ds Max, Autodesk Maya, Autodesk Revit, Rhinoceros и специальную редакцию NVIDIA Iray Server, используемую для распределенных вычислений.
С помощью данной статьи вы познакомитесь с двумя решениями предлагаемыми компанией NVIDIA своим клиентам; модулем расширения NVIDIA Iray+ for 3ds Max и серверным решением NVIDIA Iray Server. Вы узнаете об основных возможностях Iray+ for 3ds Max, а так же сможете сравнить с реализацией ядра Iray поставляемого с 3ds Max по умолчанию и познакомитесь с поддержкой распределённых вычислений реализуемых с помощью NVIDIA Iray Server.
Немного о вычислениях на GPU
Одной из важнейших особенностей современных центральных процессоров является поддержка нескольких ядер, которые определяются операционной системой как логические процессоры. В большинстве задач данный подход позволяет добиться хорошей производительности, например в распараллеливаемых процессах, таких как визуализация.
Центральные процессоры в первую очередь ориентированы на выполнение последовательных алгоритмов, которые далеко не всегда могут хорошо выполняться в нескольких параллельных потоках, а следовательно, без соответствующей оптимизации производительность приложений с последовательными алгоритмами может значительно снижаться.
Этот предел, можно сказать, стал началом новой эры; эры многоядерных процессоров и параллельных вычислений, доступных обычному пользователю. Современные процессоры используют от 2 до 18 ядер, но это ощутимо меньше, по сравнению с множеством, хоть и упрощенных, но не менее производительных ядер графических процессоров. В отличие от центральных процессоров (CPU), в современных графических ускорителях (GPU), в зависимости от модели, доступно более 512 вычислительных ядер, а с помощью специализированных API можно получить высокий прирост скорости вычислений в хорошо распараллеливаемых задачах.
Рис. 1. Общая схема архитектур современных CPU и GPU.
Архитектура графических процессоров изначально разрабатывалась для параллельных вычислений, чем и является растеризация в процессе визуализации трехмерной графики. Это сыграло важную роль в дальнейшем развитии технологий вычислений общего назначения на GPU. Хоть частота графического процессора и может быть значительно ниже частоты центрального процессора, производительность в хорошо распараллеливаемых алгоритмах и задачах возрастает за счет повышения количества вычислительных ядер.
Каждое новое поколение архитектур графических процессоров увеличивает свою производительность раз в два или три года. На данный момент наиболее производительной архитектурой графических ускорителей NVIDIA является архитектура Maxwell, а уже в 2016 году будет анонсирована архитектура следующего поколения, получившая имя Pascal.
Рис. 2. Производительность архитектур GPU NVIDIA в тесте SGEMM / W.
На сегодняшний момент доступно три основных API для разработки приложений с поддержкой вычислений на GPU. К ним относятся NVIDIA CUDA, OpenCL и DirectCompute. Каждый из них позволяет реализовать большинство параллельных алгоритмов и использовать вычислительные возможности графических процессоров для вычислений. Но наиболее функциональным является API NVIDIA CUDA позволяющее задействовать все возможности GPU линеек GeForce, Quadro и Tesla. Каждая новая версия NVIDIA CUDA предоставляет разработчикам все больше и больше возможностей для создания высокоэффективных приложений с поддержкой вычислений общего назначения на GPU.
Алгоритмы, используемые в процессе визуализации, превосходно распараллеливаются, а такие физические модели как волновая теория света превосходно поддаются математическому описанию и вычислениям на GPU. Такие инструменты визуализации, как NVIDIA Iray, NVIDIA mental ray, Chaos Group V-Ray RT, Otoy Octane Renderer, Cebas moskitoRender и др., поддерживают ускорение вычислений с помощью GPU и используют их возможности для повышения скорости визуализации.