Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии 


Обзор существующих решений рассматриваемой задачи или ее модификаций




Аннотация

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


 

Введение

В настоящее время одна из наиболее интригующих проблем в компьютерной графике – это моделирование жидких и газообразных сред. Во многих областях потребность в инструменте подобного рода очень высока. В киноиндустрии необходимо убедительно мимикрировать (подражать) внешнему виду и поведению таких сред как: дым, вода и огонь. Программное обеспечение, используемое художниками и дизайнерами, также может выиграть от использования физического моделирования для имитации традиционных техник, как рисование акварелью или маслеными красками. Еще одно потенциальное приложение – это синтез текстур, так как многие текстуры получаются в результате воздействия жидкостей на какую-либо поверхность, например, таким образом можно получить эрозию. В последнее время подобное моделирование получило широкое распространение и в геофизике, в частности, при моделировании предсказания погоды. И, конечно, моделирование жидких сред важно для различных инженерно прикладных задач. Во многих инженерных пакетах программного обеспечения существуют готовые решения для гидродинамических симуляций. Распространенное мнение в научном сообществе, что уравнение Навье-Стокса хороши для моделирования движения жидкостей. Это подтверждают большое количество научных работ, учебников и статей, публикующихся в разных областях, но которые, тем не менее, используют численное решение уравнения Навье-Стокса как основу моделирования. Какой численный метод использовать на практике зависит во много от задачи и доступных вычислительных мощностей. Большинство инженерных задач требуют от симуляции точных значений различных физических величин, на основе которых принимаются решения о надежности, производительности и т.д. Визуальное представление решения («форма» потока) обычно вторичной важности в таких приложениях. С другой стороны в компьютерной графике наибольший интерес вызывают именно «форма» и поведение среды, а физическая точность вторична, а во многих случаях вообще не важна. В идеале необходимо предоставить пользователю набор интерактивных инструментов, который бы позволил ему легко внедрить моделирование и визуализацию таких сред в собственное приложение.

Исторически так сложилось, что ранние модели сред (воды, дыма, огня) были основаны на внешнем виде, а не на физической симуляции. Потоки жидких и газообразных сред моделировались простыми примитивами, комбинация которых позволяла анимировать системы частиц [1, 3] или простую геометрию, такую как листья [4]. Визуальная насыщенность повысилась с появлением функции турбулентности [5], и долгое время такой подход был очень распространен в виду того, что функция турбулентности периодична в пространстве и времени и легко совместима с существующими методами текстурирования. Этот подход использовался во многих фильмах в 80-х – 90-х годах: «Трон», «Король Лев» и др. Однако у такого подхода есть существенный недостаток – полное отсутствие взаимодействия с пользователем и внешней средой.

Первые модели, использовавшие уравнения Навье-Стокса, были реализованы для двумерного случая [6] и использовали решение уравнения Пуассона для создания анимации двумерной жидкости. Однако этот подход был ограничен двумерным случаем, и авторы отмечали неустойчивость симуляции.

Дальнейшие исследования продолжили Kass и Miller в [7], где они предложили линеаризовать систему мелкой воды для моделирования жидкостей. Эта тема получила продолжение в работе [8], где применили эту модель для моделирования течения акварельной краски по холсту. Эта реализация использовалась в кино в 1998 году в фантастической мелодраме Винсента Уорда «Куда приводят мечты» («What Dreams May Come»). Фильм был удостоен премии «Оскар» за лучшие визуальные эффекты.

   

В 1999 году в [9] был предложен вычислительно простой, легкий в интеграции и устойчивый при любых параметрах метод моделирования динамики жидких сред. В виду этих достоинств, данный метод, получивший распространенное название Stable Fluids, стал широко применим в различных интерактивных приложений, прежде всего игровых, и повлек за собой целый поток исследований:



1. По использованию различных схем Back Projection алгоритма [11],

2. По использованию разных схем дискретизации и численных методов [12]

3. По использованию различных граничных условий [10]

4. По расширению применимости: для оригинального двумерного алгоритма был предложен трехмерный аналог [13]

5. Прочие модификации данного подхода: сложные граничные условия, использование графических процессоров для ускорения и т.д.

В настоящее время Stable Fluids можно считать, де-факто, образцом, с которым все сравнивают новые результаты исследований в области моделирования и визуализации жидких и газообразных сред.

Постановка задачи

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

Шум Перлина

История появления

Изначально спецэффекты в кино были полностью под контролем художника и режиссера. Все, что не снималось на камеру, а добавлялось на этапе монтажа, необходимо было добавлять в каждый кадр. Работа эта была ручная и занимала колоссальное количество человеко-часов. Очень быстро стало понятно, что можно использовать вычислительные возможности ЭВМ для того, чтобы упростить эту задачу. Использование компьютерной графики позволило привнести в киноиндустрию нечто новое и удивить зрителей необычными технологиями. TRON был первым проектом с солидной порцией компьютерных спецэффектов. Вместе с тем, компьютерная графика того времени (80ые годы) выглядела искусственно гладко и однообразно. С этой проблемой столкнулся Ken Perlin во время работы над фильмом TRON. Недовольный неестественностью синтезируемых кадров Ken Perlin стал искать способ разнообразить получаемое изображение.

В TRON были использованы не полигоны, а подход, именуемый Constructive solid geometry (CSG), при котором все объекты моделировались как логические комбинации математических примитивов, таких как сферы, эллипсы, цилиндры и другие простые формы.

Логическое Объединение Логическое Вычитание Логическое Пересечение
  Примеры моделирования CSG  

 

Это подтолкнуло Ken Perlin'a искать решение в текстурировании объема, а не поверхностей. В 1983 году Perlin предложил простую псевдослучайную функцию для заполнения объема. Ключевым преимуществом его подхода перед традиционным текстурированием, доступным в современном графическом процессоре, являются:

1. Экономия памяти: все получаемые текстуры синтезируются, они не требуют места для хранения, что особенно критично для трехмерных текстур.

2. Больший период повторения.

3. Позволяет использовать четырехмерный шум, в то время как поддержка четырехмерных текстур отсутствует.

4. Качество фильтрации существенно выше, благодаря интерполяции более высокого порядка:

Традиционное текстурирование Использование функции Perlin'a
   

 

Основные требования, которые предъявлялись к функции шума Perlina при разработке:

1. Внешне производит впечатление шума.

2. Контролируема: при передаче одинаковых параметров, возвращает одинаковые значения.

Случайная функция Perlin'a позволяла заполнить все трехмерное пространство. Срез значений этой функции показан на рисунке. Она обладала еще несколькими интересными свойствами: 1. Периодичность в пространстве 2. Нулевое математическое ожидание 3. Отсутствие слишком высоких или слишком низких частот Наличие такой функции позволило продвинуться дальше.
 

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

Алгоритм

Шум Перлина – это отображение из пространства Rn в R. В настоящий момент наиболее распространенными значениями n являются {1, 2, 3, 4}.

Шум ограничен в частотной области – практически вся его энергия, если рассмотреть шум как сигнал, сконцентрирована в малой частотной области. Высокие частоты, проявляющие себя как маленькие детали, и низкие частоты вносят небольшой вклад в общую энергию. Внешне это выглядит как белый шум после свертки с ядром Гаусса.

Алгоритм Шума Перлина достаточно простой, рассмотрим его для пространства R2:
1. Алгоритм использует регулярную сетку 2. Для входной точки P определяются окружающие ее точки, лежащие на сетке. Таких точек 2n т.е. 4 для R2 3. Для каждой точки Qi i={1,2,3,4}, лежащей на сетке: a. Выбирается псевдослучайный вектор градиент G. b. Вычисляется скалярное произведение D = G * (P - Qi) 4. Получили Di i={1,2,3,4}, которые можно проинтерполировать: a. Вычисляются веса для S-curve интерполяции (3t2 – 2t3) в [15] b. В дальнейшем в [14] была предложена другая формула для S-curve коэффициентов: 6t5 - 15t4 + 10t3. Это вызвано тем, что вторая производная в верхней формуле не равна нулю при t = {0, 1}. Это вызывает видимые разрывы в освещении геометрии, вершины которой были сдвинуты, используя шумовую функцию (displacement mapping). c. 2n-1 линейные интерполяции.
 

Для быстрого вычисления псевдослучайных градиентов был предложен следующий алгоритм:

1. Заранее рассчитывается 2 таблицы (в каждой таблице n записей):

a. Таблица случайных целых чисел P, в которой перемешаны числа от 0..(n-1)

b. Таблиц случайных градиентов G

c. В оригинальной работе n = 256

2. Для узла с целочисленными координатами {i,j,k} градиент можно вычислить по формуле: grad_vec = G[ (i + P[ (j + P[k]) mod n ] mod n ]

3. Такой подход был изменен в [14], где было предложено отказаться от таблицы случайных векторов G. Вместо этого Perlin предложил использовать 12 векторов, которые подобраны так, чтобы избежать корреляции между ними и координатными осями. Предложенные вектора направлены из центра куба [-1, 1]3 в стороны вершин.

Применение

В природе многие явления обладают свойством самоподобия. Используя этот факт можно смоделировать интересные поверхности с помощью шума Перлина. Рассмотрим следующий пример:

1. Пусть дана функция noise(x)

2. Рассмотрим линейную комбинацию:

3. Такая функция (BM означает Brownian Motion) выглядит уже гораздо лучше: проиллюстрируем это на графиках

a b c d e f
Данная таблицы представляет функцию Перлина на разных частотах a-e – первые 5 октав, f – результирующая Brownian Motion функция

4. Аналогично можно получить функцию турбулентности:

5. Используя различные комбинации функций можно получать различные материалы:

     

Алгоритм

Интересное применение уравнениям гидродинамики было дано в [8]. Авторы предложили использовать уравнение «мелкой воды» для имитации различных техник рисования. Схема работы данного метода достаточно проста:

  1. Изображение разбивается на отдельные области
  2. Генерируется набор слоев для каждой области
  3. Для каждого слоя отдельно от остальных запускается процесс имитации течения жидкости, который рассчитывает распределение пигмента
  4. Для получения окончательного результата слои накладываются друг на друга с помощью модели Кубелки-Мунка

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

Математическая модель

Движение жидкости в каждой точке потока полностью описывается системой нелинейных дифференциальных уравнений Навье-Стокса (уравнений «мелкой воды»). В двумерном случае для несжимаемых жидкостей, эти уравнения могут быть записаны в следующем виде:

Рассмотрим условия, которым должно удовлетворять поведение воды для достижения реалистичного эффекта:

  1. Течение должно быть ограничено так, чтобы вода оставалась в пределах маски мокрой области.
  2. Избыток воды в какой-то области должен вызывать течение воды из этой области в соседние и приводить к равновесию концентраций.
  3. Течение должно периодически ослабляться, чтобы не допустить колебательных волн.
  4. Течение должно искажаться из-за неровностей бумаги, что вызывает появление прожилок, параллельных направлению течения.
  5. Локальные изменения должны носить глобальный характер (например, добавление воды в некоторую область должно отразиться на всей имитации).
  6. Должно быть течение воды по направлению к краям для достижения эффекта их затемнения.

Уравнения Навье-Стокса переходят в уравнения «мелкой» воды. Решение этих уравнений дает необходимые значения вектора скорости (u, v). Данная система решается методом Эйлера.

Для численного решения использовалась следующая дискретная схема:

Перенос красителя на уровне растекания воды зависит от локальной скорости движения жидкости, которая рассчитывается на первом этапе имитации.

На каждом шаге какая-то часть красителя адсорбируется уровнем осаждения красителя, а другая путем десорбции возвращается обратно в раствор. Этот процесс описывается с помощью трех переменных: интенсивность адсорбции, интенсивность десорбции и грануляция. Последняя переменная определяет, как толщина и структура бумаги влияют на десорбцию красителя.

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

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

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

   

 

Математическая модель

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

  (a)
  (b)

Математически состояние жидкости в любой момент времени моделируется как поле скоростей (задается функция, которая определяет для каждой точки пространства вектор скорости). Для того, чтобы лучше понять это, достаточно представить комнату с воздухом (множеством частичек - молекул). Каждая частичка имеет скорость, которая может изменяться в зависимости от внешних условий: наличие батареи (источник тепла), присутствие сквозняка в комнате и др. Например, скорость воздуха вблизи обогревателя будет в основном направлена вверх, так как теплый воздух легче холодного. Распределение скоростей внутри комнаты очевидно также сложно, как описание распределения скоростей частиц дыма, поднимающегося вверх от зажженной сигареты, или движение частиц пыли в воздухе. Уравнения Навье-Стокса - точно описывают эволюцию поля скоростей с течением времени. При данных скоростях и силах уравнение говорит, как точно скорости будут изменяться через бесконечно малый промежуток времени. Уравнение вверху записано в компактной векторной форме. Очень грубо можно сказать, что изменение скоростей происходит из-за 3х величин, стоящих справа от знака равенства.

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

Математическое представление уравнений для жидкости полезно только, когда размышляешь о жидкости в общем. На практике, конечно, нам необходимо конечное представление нашей жидкости. Обычный подход – это разбить все исследуемое пространство на равномерную сетку. Здесь будет рассмотрен простой для описания случай равномерной двумерной сетки, хотя ничего из описанного ниже не ограничивается этим упрощением. Пространство разбивается на сетку, по каждой оси на N+2 ячейки.

Первый и последний столбцы и первая и последняя строчки отводятся для граничных условий. Считается, что плотность и скорости постоянны в каждой отдельно взятой ячейке. Базовая структура решения следующая: начинаем с некоторых заданных значений для плотности и скоростей, затем постоянно обновляем их согласно событиям, которые происходят в окружающей среде. Считается, что между каждым циклом симуляции проходит время dt.

Движение плотностей

Базовая структура решения уравнения для плотности. В каждый момент времени происходит 3 действия (в уравнении они находятся справа от знака равенства)

Как сказано выше, сначала будет описано решение уравнения плотности, двигающейся сквозь поле скоростей, которое не меняется во времени. В уравнении плотности (внизу) какое-либо изменение плотности может произойти по трем причинам, описанным справа от знака равенства тремя выражениями. Первое слагаемое говорит, что плотность должна двигаться по полю скоростей, второе – плотность может подвергаться диффузии, т.е. рассеиваться со временем, и третье – плотность может увеличиваться из-за присутствия источников плотности (например, сигарета – источник дыма). Обсуждение этих трех причин изменения плотности будет идти в обратном порядке.

Диффузия

Второй шаг - это диффузия. Диффузия происходит со скоростью diff (когда diff > 0 плотность будет распространяться по соседним клеткам). Рассмотрим, что происходит в отдельной ячейке. Будем считать, что ячейка обменивается только с 4 соседями, как это показано на рисунке. Таким образом, клетка теряет плотность, так как отдает ее 4-м соседям, но, в то же время, плотность увеличится засчет притока от соседей.

Возможная реализация функции диффузии – это простое вычисление этих изменений в каждой клетке нашей сетки и добавление их с некоторым коэффициентом (скорость диффузии diff) к существующим значениям. Но, к сожалению, такая реализация будет плохо работать. Для больших значений параметра diff значения плотности начинают осцелировать, уходят в бесконечность, и процесс симуляции ломается. Такое поведение – это главный признак нестабильности метода. Главная идея стабильного метода следующая: результирующие плотности должны быть таковы, чтобы, если их прокрутить назад во времени, они бы привели к нашим начальным данным.

Это линейная система с неизвестным . Можно построить матрицу для этой системы и затем просто вызвать процедуру обращения матрицы. Однако, решать эту систему таким способом неудобно, так как матрица разряженная (лишь небольшое количество ее элементов не равно нулю). Поэтому будет использоваться простая итеративная техника обращения матрицы. Самый простой итеративный метод, который хорошо работает на практике, - это метод Гаусса-Зейделя.

Выводы

В [12] описана реализация предложенного метода для современных ЦПУ и для процессоров, в которых отсутствует АЛУ для вычислений с плавающей точкой. Данный метод быстро доказал свою состоятельность, получив практическое распространение в таких программных продуктах как Maya и 3dMax, в компьютерных играх и других приложениях. Вслед за [12], активизировались исследования в этой области, многие из которых взяли за основу изложенный подход.

Tекстурами

Ray-tracing

Системой частич

Выводы

Историческая эволюция в этой области породила богатое наследие. Даже самые простые методы, которые использовали шумовые функции, тем не менее, на практике были успешно использованы в крупных коммерчески успешных проектах, чем и зарекомендовали себя как полезный инструмент. С появлением шумовой функции Перлина стал возможен синтез сложных детализированных текстур. Дальнейшее развитие естественным образом приводит нас к физическому моделированию (пусть и упрощенному) как к средству достижения большего реализма. Оба подхода Лагранжа и Эйлера обладают своими сильными и слабыми сторонами. Метод Эйлера позволяет построить решение уравнений Навье-Стокса, но ограничен неким объемом в пространстве. Кроме того как любой сеточный метод ему присущи артефакты дискретизации. Метод Лагранжа с другой стороны этими недостатками не обладает, но с помощью него очень сложно считать частные производные, необходимые для решения уравнений. В моей работе я предлагаю использовать комбинацию сеточного решения уравнения гидродинамики, систему частиц для визуализации и шумовые функции для предания большей детализированности.


 

Математическая модель

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

Уравнения Навье-Стокса

Представим, что мы моделируем жидкость, как систему частиц. Каждая частица – это маленький шарик воды, который имеет массу m, объем V и скорость . Чтобы проинтегрировать систему вперед во времени, необходимо обрисовать действия сил на каждую частицу. Второй закон Ньютона как раз говорит нам, как частицы ускоряются и откуда возникает движение.

 
D/D – Производная Лагранжа
Рассмотрим, какие силы действуют на наши частицы
Во-первых, в системе присутствует гравитация, т.е. на частицу действует сила тяжести. Во-вторых, области высокого давления давят на области с низким давлением. Нас интересует общая сила, действующая на частицу, потому что, например, если давление по всем направлениям одинаково, то общая сила будет равна 0. На самом деле, важны только те ситуации, когда с одной стороны частицы давление больше, чем с другой. В этом случае частица начинает двигаться в сторону, где давление ниже. Т.е. нас интересует изменение силы, которое проще всего посчитать, взяв отрицательный градиент давления. Также необходимо проинтегрировать по всему объему, что проще всего сделать домножив все выражение на V. В-третьих, возникает еще одна сила из-за вязкости нашей жидкости. Вязкие жидкости пытаются противостоять деформации. Эту силу можно рассматривать как некоторую силу, которая пытается заставить частицу двигаться со средней скоростью окружающего потока, т.е. она пытается минимизировать разницу в скорости между частицой и близлежащими к ней частицами. Дифференциальный оператор, который вычисляет как далеки значения в некоторой области – это лапласиан. Вот откуда появляется третье слагаемое в нашем уравнении. Далее нам также необходимо проинтегрировать по всему объему и домножить на µ – динамический коэффцифиент вязкого трения.
Разделим обе части уравнения на V.
И затем разделим на плотность ρ.
   

 

 
 
 

В данной системе принимают участие следующие величины:

V — вектор скорости,

t — время,

µ — коэффициент кинематической вязкости, ρ — плотность,

P — давление,

f — вектор плотности массовых сил,

l — характерный размер

Re - число Рейнольдса — безразмерное соотношение, которое определяет стабильность системы

Если рассмотреть одномерный случай, то не сложно убедиться на сколько Re важный параметр:

- в предельном случае, когда отсутствует диффузия (μ=0), то изменение скорости по полю скоростей можно условно изобразить как показано на рисунке

Уравнение вырождается в …

     
     

Как видно из графиков, процесс симуляции быстро ломается.

- в другом придельном случае, когда мы рассматриваем только диффузию и уравнение вырождается в …

     
     

Такое уравнение ведет себя устойчиво. Это подталкивает нас к выводу, что для устойчивого моделирования необходима составляющая диффузии.

     
     

 

Метод Лагранжа

Метод Лагранжа (названный так по имени французского математика) – это метод, с которым вы, наверняка, все хорошо знакомы. Он рассматривает пространство как систему частиц. Каждая точка жидкости или твердого тела рассматривается как отдельная частичка со своими координатами и некоторой скоростью. Вы можете даже думать о каждой частичке, как будто это молекула. В общем, ничего удивительного здесь нет. Симуляция твердых тел всегда обычно производится по методу Лагранжа, с дискретным набором частичек обычно соединенных в сеть.

Метод Эйлера

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

Численно, подход Лагранжа соответствует системе частиц (с или без соединения между самими частицами), а подход Эйлера соответствует использованию фиксированной сетки, которая не изменяется в пространстве даже в то время, как жидкость протекает через нее.

Граничные условия

Замкнутый куб

Это самый простой вариант задания граничных условий.

Периодические

Быстрое преобразование Фурье.

Произвольные

Вокселизация

Описание практической части

CUDA реализация алгоритмов

CUDA

CUDA представляет собой программно-аппаратный стек, позволяющий рассматривать видеокарты серии Nvidia 8xxx и старше, как сопроцессор к основному процессору (device).

Рис.1 Архитектура современной видеокарты.

 

Архитектура современной видеокарты устроена, как показано на рисунке 1. В ней можно выделить крупный блок, который называется TPC (Texture Processor Cluster). Условно можно считать, что разные видеокарточки отличаются друг от друга только количеством TPC. TPC состоит из двух крупных модулей – SM (Streaming Multiprocessor). В каждом SM-модуле 8 вычислительных процессоров – SP (Streaming Processor), которые умеют выполнять простые арифметические инструкции (MAD, MUL, MOV и т.д.), и один SFU (Special Function Unit), который умеет вычислять сложные функции (SIN, COS, EXP, LOG и др.).

Все потоки группируются по 32 потокав так называемые. Внутри warp'а потоки работают в режиме SIMD, но разные warp'ы могут исполнять разные инструкции. Поэтому GPU нельзя охарактеризовать, как классическую SIMD-ахитектуру. Warp'ы могут группироваться на более высоком уровне в блоки для того, чтобы использовать общую разделяемую память и иметь возможность синхронизоваться.

Традиционно сложилось, что GPU используют арифметику с плавающей точкой и поддерживают float32 IEEE стандарт вычислений. В дальнейшем ожидается появление поддержки вычислений double-арифметики, что существенно расширит класс задач, для которых CUDA применима.

С точки зрения программиста CUDA – это расширение синтаксиса языка C. Специальными служебными словами помечаются функции:

· функция вызывается и исполняется на CPU - __host__,

· функция вызывается на CPU, исполняется на GPU - __global__,

· функция вызывается и исполняется на GPU - __device__.

Для переменных действует схожее правило.

CUDA-программы компилируются специальным компилятором nvcc, который разделяет код на GPU и CPU составляющие. CPU код передается стандартному компилятору (gcc, IntelC и др.), а GPU код обрабатывается дальше.


Заключение

Список литературы

[1] W. T. Reeves. Particle Systems. A Technique for Modeling a Class of Fuzzy Objects.

ACM Computer Graphics (SIGGRAPH’83), 17(3):359–376, July 1983.

 

[2] M. Shinya and A. Fournier. “Stochastic Motion - Motion Under the Influence of Wind”.

In Proceedings of Eurographics ‘92, pages 119–128, September 1992.

 

[3] K. Sims. “Particle Animation and Rendering Using Data Parallel Computation”.

ACM Computer Graphics (SIGGRAPH ’90), 24(4):405–413, August 1990.

 

[4] J. Wejchert and D. Haumann. “Animation Aerodynamics”.

ACM Computer Graphics (SIGGRAPH ’91), 25(4):19–22, July 1991.

 

[5] D. Ebert, K. Musgrave, D. Peachy, K. Perlin, and S. Worley.

“Texturing and Modeling: A Procedural Approach”. AP Professional, 1994.

 

[6] L. Yaeger and C. Upson. “Combining Physical and Visual Simulation. Creation of the Planet Jupiter for the Film 2010”. ACM Computer Graphics (SIGGRAPH ’86), 20(4):85–93, August 1986.

 

[7] M. Kass and G. Miller. Rapid, “Stable Fluid Dynamics for Computer Graphics”.

ACM Computer Graphics (SIGGRAPH’90), 24(4):49–57, August 1990.

 

[8] Cassidy J. Curtis Sean E. Anderson Joshua E. Seims Kurt W. Fleischery David H. Salesin “Computer-Generated Watercolor”

ACM Computer Graphics (SIGGRAPH’1997)

 

[9] J. Stam, "Stable Fluids",

ACM Computer Graphics SIGGRAPH'99 Conference Proceedings, Annual Conference Series, 121-128

 

[10] J. Stam, "A Simple Fluid Solver based on the FFT",

Journal of Graphics Tools, Volume 6, Number 2, 2001, 43-52

 

[11] Selle, A., R. Fedkiw, B. Kim, Y. Liu, and J. Rossignac. 2007. "An Unconditionally Stable MacCormack Method." Journal of Scientific Computing

 

[12] J. Stam, "Real-Time Fluid Dynamics for Games".

Proceedings of the Game Developer Conference, March 2003

 

[13] K. Crane, I. Llamas, S. Tariq ”Real-Time Simulation and Rendering of 3D Fluids”,

GPUGems 3, Addison-Wesley, 2007

 

[14] K. Perlin, “Improving Noise”, ACM Computer Graphics Siggraph 2002

 

[15] K. Perlin. 1985. “An Image Synthesizer”.

In Computer Graphics (Proceedings of ACM SIGGRAPH 85), 24. 3

 

[16] K. Perlin, “Making Noise”,

Proceedings of the Game Developer Conference, 1999

 

[17] K. Perlin., ACM SIGGRAPH’84 conference, course in "Advanced Image Synthesis."

 

[18] S. Green, “Implementing Improved Perlin Noise”, GPU GEMS 2, Ch26, Addison-Wesley, 2005

[19] Wei Li, Zhe Fan, Xiaoming Wei, Arie Kaufman “Flow Simulation with Complex Boundaries”, GPU GEMS 2, Ch47, Addison-Wesley, 2005

[20] William T. Reeves Lucasfilm Ltd “Particle Systems—a Technique for Modeling a Class of Fuzzy Objects” ACM Computer Graphics Siggraph 1983 Volume 2 , Issue 2 (April 1983) Pages: 91 - 108

 

 

Аннотация





Рекомендуемые страницы:


Читайте также:



Последнее изменение этой страницы: 2016-04-10; Просмотров: 630; Нарушение авторского права страницы


lektsia.com 2007 - 2021 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.094 с.) Главная | Обратная связь