УНИВЕРСИТЕТ ГОРОДА ПЕРЕСЛАВЛЯ
ФИЛИАЛ РОССИЙСКОГО УНИВЕРСИТЕТА ДРУЖБЫ НАРОДОВ
в г. Переславле-Залессском

ВЫПУСКНАЯ РАБОТА
"Реализация параллельного алгоритма построения изображений методом трассировки лучей в рамках Т-системы"
на соискание степени бакалавра
студента: Коваленко Максима Руслановича

Руководитель: д.ф.-м.н. Абрамов С.М.
Зав. кафедрой: д.ф.-м.н., профессор, Осипов Г.С.

1997 г.

Оглавление

1. Введение
1.1 Распараллеливание. Основные подходы к распараллеливанию
1.1.1 Ручное статическое распараллеливание
1.1.2 Автоматическое статическое распараллеливание
1.1.3 Автоматическое динамическое распараллеливание
1.2 Краткое описание Т-системы
1.2.1 Средний размер гранул параллелизма. Т-функции
1.2.2 Основные принципы вычислительной модели
1.2.3 Структура Т-системы. Распределенная операционная среда параллельного выполнения задачи пользователя
1.2.4 Основные структуры данных Т-системы. Т-структуры
1.2.5 Компонента управления звеньевой памятью. Захват памяти. Сборка мусора
1.2.6 Вычислительная компонента. Системные вызовы Т-системы
1.2.7 Более подробное описание базовых Т-системных вызовов: SPARK, ALT, SEND
2. Метод трассировки лучей
2.1 Модель распространения света в пространстве, используемая в методе трассировки лучей
2.1.1 Идеальное зеркальное отражение
2.1.2 Идеальное преломление
2.1.3 Идеальное диффузное отражение (рассеяние)
2.1.4 Общий случай
2.2 Алгоритм метода трассировки лучей
2.3 Модель освещенности Уиттеда
2.4 Метод адаптивного контроля за глубиной трассировки
2.5 Предварительные вычисления характеристик объектов и метод "Bounding volumes"
2.6 Набор стандартизованных трехмерных сцен
3. Распараллеливание метода трассировки лучей в рамках Т-системы
3.1 Создание упакованной сцены
3.2 Выделение гранул потенциального параллелизма
3.3 Главная функция приложения. Функция RenderScene
3.4 Использование собственных статических переменных процесса в реализации
4. Экспериментальное изучение параллельной реализации метода трассировки лучей
4.1 Постановка эксперимента
4.2 Структура вычислительной системы
4.3 Результаты эксперимента
4.3.1 Вычислительная мощность каждого ПЭ вычислительной системы
4.3.2 Зависимость производительности вычислительной системы от суммарной вычислительной мощности ее ПЭ
4.4 Анализ результатов эксперимента
5. Заключение
6. Литература
7. Приложение. Примеры построенных изображений
Список таблиц
Таблица 4.1 Характеристики отдельных ПЭ вычислительной системы
Таблица 4.2 Результаты экспериментов по определению вычислительной мощности каждого из ПЭ
Таблица 4.3 Результаты измерения времени вычисления стандартной сцены на вычислительной системе состоящей из двух ПЭ
Таблица 4.4 Результаты измерения времени вычисления стандартной сцены на вычислительной системе состоящей из трех ПЭ
Таблица 4.5 Зависимость производительности ВС от суммарной вычислительной мощности

1. Введение

1.1 Распараллеливание. Основные подходы к распараллеливанию

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

Задача распараллеливания программ включает в себя:

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

1.1.1 Ручное статическое распараллеливание

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

При использовании этого подхода зачастую требуются, как значительные трудозатраты, так и затраты времени.

1.1.2 Автоматическое статическое распараллеливание

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

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

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

1.1.3 Автоматическое динамическое распараллеливание

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

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

1.2 Краткое описание Т-системы

1.2.1 Средний размер гранул параллелизма. Т-функции

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

1.2.2 Основные принципы вычислительной модели

Применяемая в Т-системе методика автоматического динамического распараллеливания программ основана на использовании вычислительной модели автотрансформация вычислительной сети.

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

Узел-процесс соответствует некоторому вызову Т-функции.

Процесс имеет:

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

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

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

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

1.2.3 Структура Т-системы. Распределенная операционная среда параллельного выполнения задачи пользователя

Т-система предназначена для исполнения в такой аппаратно-программной среде, как IP-сеть Linux-машин и имеет следующую структуру: ядро Т-системы, компоненту TThreads, и компоненту LMCE.

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

Аппарат множественных потоков управления реализован в компоненте Tthreads Т-системы.

В каждом ПЭ (Linux-машине) выполняется один или несколько экземпляров Т-системы, являющихся в терминах ОС Linux процессами пользовательского уровня.

Каждый из этих экземпляров Т-системы (соисполнителей) имеет возможность обмениваться сообщениями со всеми соисполнителями, работающими в рамках той же задачи пользователя. Для этого используются средства, предоставляемые программным интерфейсом сетевого протокола IP и реализованные в компоненте LMCE Т-системы.

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

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

1.2.4 Основные структуры данных Т-системы. Т-структуры

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

Звено является элементарной тэгированной единицей памяти, используемой при построении Т-структур. Размер звена в данной реализации Т-системы 12 байтов выбран достаточным:

  1. для того, чтобы разместить любое скалярное значение (если объем памяти необходимой для его хранения не превышает 10 байтов) или специальный указатель на другую Т-структуру держатель Т-структуры;
  2. для организации системных информационных структур.
Каждое звено содержит тэг, содержащийся в последнем байте звена, который определяет, какого рода данные содержатся в данном звене. Пользовательские звенья имеют обычно Т-тэги VOID, HOLDER, PACKED и NOTREADY.

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

Одиночные звенья представляют собой одиночное звено со скалярным значением, держатели и одиночные звенья потребители (звенья с неготовыми значениями).

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

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

Мультизвено служит для хранения данных объем которых больше 10 байтов и состоит из расположенных подряд N+1 звена. Первое звено является заголовком бестэговой области (мультизвена) и имеет тэг со значением TTAG_PACKED. Непосредственно за данным звеном следует несколько (N>=0) бестеговых звеньев, образующих область (до 12N байтов) для хранения произвольных данных. Данные хранящиеся в мультизвене называются упакованными данными.

1.2.5 Компонента управления звеньевой памятью. Захват памяти. Сборка мусора

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

1.2.6 Вычислительная компонента. Системные вызовы Т-системы

Вычислительная компонента является основной компонентой Т-системы, поддерживающей реализации предлагаемой модели вычисления. Данная компонента реализована как часть главного потока управления и реализует следующий набор системных вызовов:
  1. SPARK порождение нескольких новых процессов и построение соответствующих отношений поставщик-потребитель ;
  2. DROP очистка звена от текущего значения (в том числе от неготового значения, то есть вывод звена из множества потребителей некоторого поставщика);
  3. ASSIGN копирование значения из одного звена в другое (в том числе копирование неготового значения);
  4. ALT ожидание готовности одного из нескольких звеньев;
  5. SEND передача значения от поставщика потребителям;
  6. REALEXIT завершение всего процесса вычислений (всех соисполнителей) Т-задачи.

1.2.7 Более подробное описание базовых Т-системных вызовов: SPARK, ALT, SEND

Т-системный вызов SPARK

Главным в ряду системных вызовов, приводящих к трансформации вычислительной сети, безусловно является системный вызов SPARK, предназначенный для организации комбинированного вызова нескольких функций входного языка.

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

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

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

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

Системный вызов ALT

Системный вызов ALT (x,y,...z) выполняемый в процессе П приводит к засыпанию процесса П (переходу его в неготовое к выполнению состояние) до наступления события по крайней мере одно из звеньев x, y, ... z имеет готовое значение. Если в момент выполнения системного вызова одно из звеньев x, y, ... z имеет готовое значение, то засыпание процесса П не происходит.

Важный частный случай системного вызова ALT(x) имеет алиасное имя: WAIT(x). Системный вызов WAIT(x) гарантирует, что после его выполнения звено x имеет готовое значение.

Системный вызов SEND

Системный вызов SEND(x,y) выполняемый в процессе П, передает значение звена x всем потребителям выхода y процесса П.

В результате выполнения вызова SEND(x,y) может быть передано как готовое, так и неготовое значение, находящееся в звене x. При рассылке неготового значения, потребители поставщика y становятся потребителями того же поставщика, что и у звена x. Заметим, что семантика вызова SEND(x,y) одна и та же во всех случаях: все потребители поставщика y получают то значение, что имеет звено x.

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

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

2. Метод трассировки лучей

Метод трассировки лучей является одним из наиболее распространенных методов построения реалистических изображений. Отличительными чертами метода трассировки лучей являются простота и высокая степень реалистичности получаемых изображений.

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

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

Наиболее популярные из них: MTV, POV-Ray , Polyray, Vivid, QRT , Rayshade, RTrace 8.0, PLG формат для использования с приложением REND386/Avril, Raw triangle формат, RenderMan RIB, Autodesk DXF, Wavefront OBJ, RenderWare RWX, 3D Metafile (Apple Quickdraw 3D), Virtual Reality Modeling Language 2.0 для приложения RTRACE/PLG и другие.

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

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

Для упрощения реализации и повышения эффективности алгоритма были использованы некоторые принципы объектно-ориентированного программирования, такие как: виртуальные функции и наследование.

Объекты сцены создаются при разборе входного файла данных в NFF формате, наделяются определенными свойствами поверхности и среды и получают указатели на свои функции-методы Intersect и GetTexture.

Метод Intersect ищет точку пересечения геометрического объекта, методом которого она является, с трассируемым лучом.

Метод GetTexture возвращает в качестве результата данные о характеристиках поверхности объекта в заданной точке. Эти данные включают в себя вектор нормали к поверхности в данной точке, цвет объекта, характеристики среды объекта и т. д.

Созданные объекты регистрируются в структуре данных, представляющей объекты сцены, при помощи функции AddToScene которая добавляет в массив указателей на объекты сцены указатель на новый объект, приведенный к базовому типу, который содержит лишь указатели на функции-методы Intersect и GetTexture данного добавляемого типа объекта и инкрементирует счетчик объектов сцены.

Подобным образом производится работа с источниками света.

В основе метода лежит моделирование распространения света в рамках геометрической оптики.

2.1 Модель распространения света в пространстве, используемая в методе трассировки лучей

Точечный источник света в пространстве испускает лучи во всех направлениях. Попав в некоторую точку на поверхности объекта, световой луч в общем случае претерпевает отражение , преломление и рассеяние.

2.1.1 Идеальное зеркальное отражение

В случае идеального зеркального отражения луч света (с направляющим вектором v) отразится от объекта в направлении вектора r = v - 2(v,n)n,

где n - нормаль к поверхности объекта в точке пересечения.

2.1.2 Идеальное преломление

Преломленный луч лежит в той же плоскости, что и векторы v и n, а угол падения связан с углом преломления законом Снеллиуса:
h1 sinqi = h2 sinqt

Таким образом направляющий вектор t преломленного луча :

t = hv + (h Ci - sqrt (1 + h^2(Ci^2 - 1))) n,

где

Неравенство 1 + h^2 * (Ci^2 - 1) < 0 соответствует так называемому полному внутреннему отражению (луч полностью отражается от поверхности и эффект преломления отсутствует).

2.1.3 Идеальное диффузное отражение (рассеяние)

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

2.1.4 Общий случай

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

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

Возможны два подхода к задаче отслеживания лучей формирующих изображение сцены:

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

При этом подходе отслеживаются все лучи, в то время как заметный вклад в изображение вносит лишь небольшая их часть. Тем самым значительная часть работы окажется проведенной впустую. Эта избыточность в полном отслеживании лучей требует больших вычислений и существенно сказывается на объеме затрат.

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

2.2 Алгоритм метода трассировки лучей

Для определения освещенности точки экрана от наблюдателя через эту точку выпускается луч и среди точек его пересечения с объектами сцены ищется точка ближайшая к ней. Освещенность точки объекта определяется принятой моделью освещенности и задает распределение энергии по спектру.

В данной реализации рассчитывается освещенность для трех базовых цветов: красного, зеленого и синего. Для RGB-представления цвета в программе используется структура данных состоящая из трех вещественных чисел, что обуславливает очень качественную цветовую гамму. Поэтому в качестве графического формата, достаточно простого для использования, удовлетворяющего требованиям высокого качества изображения и представляющего интенсивность цвета в спектре RGB, был выбран графический формат TARGA RGB 24 бита на точку.

2.3 Модель освещенности Уиттеда

Модель освещенности Уиттеда является одной из самых распространенных и наиболее часто используемой моделью в методе трассировки лучей.

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

I(l) = Ka C(l) + Kd C(l) е(n,li) Ii(l) +
Ks е(n,hi)^p Ii(l) + KsIr(l) + KtIt(l)

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

Второе слагаемое соответствует непосредственному диффузному отражению;

Суммирование ведется по всем видимым источникам света, то есть при условии, что (n,li) > 0.

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

Здесь член hi - вектор нормали микрозеркала, член (n, hi)^p описывает закон распределения (чем больше степень p, тем ближе поверхность к идеально зеркальной), коэффициент Ks соответствует зеркальной отражаемости поверхности.

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

Четвертое слагаемое соответствует зеркально отраженной энергии, идущей от других тел. Для ее определения луч отслеживается из точки пересечения в направлении отражения.

Последнее слагаемое соответствует преломленной энергии, идущей от других тел. Для ее определения луч трассируется из точки пересечения в направлении преломления. Коэффициент Kt определяет вклад преломленного света.

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

Таким образом получаем дерево трассировки луча, узлам которого соответствуют точки пересечения лучей с объектами, а ребрам-лучи.

Теоретически дерево трассировки луча может быть бесконечно глубоким. Поэтому в реализации происходит отсечение по глубине (ограничивается максимальная глубина дерева).

2.4 Метод адаптивного контроля за глубиной трассировки

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

2.5 Предварительные вычисления характеристик объектов и метод "Bounding volumes"

Одним из "узких" мест алгоритма трассировки лучей является решение задачи о нахождении ближайшего объекта, пересекаемого трассируемым лучом. В простейшем варианте алгоритма для решения этой задачи необходимо каждый объект сцены проверить на пересекаемость лучом. Таким образом количество вычислений напрямую зависит от размеров генерируемого изображения, количества объектов трехмерной сцены и сложности каждого объекта. Уиттед в 1980 году установил, что для сцен большой сложности до 95% вычислительного времени тратиться на решение задачи пересекаемости. В данной реализации использовались некоторые из способов ускорения решения данной задачи.

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

Во-вторых в реализации использовался "Bounding volumes method". Метод был предложен Кларком в 1976 году. Этот метод заключается в окружении сложных объектов (для которых задача определения точки пересечения с лучом является трудоемкой) более простыми объектами, такими как: сферы, параллелепипеды и цилиндры.

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

2.6 Набор стандартизованных трехмерных сцен

Выбранный для данной реализации формат сцены NFF позволяет использовать ее совместно с программами из Базы Стандартных Процедур. База Стандартных Процедур-SPD (Standard Procedural Database) является программным обеспечением для создания различных тестов, позволяющих тестировать разрабатывающиеся схемы визуализации. Программы из набора SPD генерируют некоторые, ставшие стандартными, сцены разной сложности в различных форматах.

При создании сцен для тестирования программы не использовались дополнительные программные продукты предназначенные для моделирования сцен. Для тестирования в основном использовались сцены создаваемые программами из набора SPD генерируемые в формате NFF.

3. Распараллеливание метода трассировки лучей в рамках Т-системы

3.1 Создание упакованной сцены

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

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

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

Построение упакованной сцены происходит следующим образом:

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

Затем укладываются массив указателей на источники света и массив указателей на геометрические объекты, затем сами массивы источников света и геометрических объектов сцены.

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

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

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

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

3.2 Выделение гранул потенциального параллелизма

Другая задача-выделение гранул потенциального параллелизма.

Минимальной гранулой параллелизма-процессом Т-системы является функция, ассоциирующаяся в процессе выполнения с процессом Т-системы.

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

3.3 Главная функция приложения. Функция RenderScene

Главная функция приложения в качестве своего аргумента получает задаваемые пользователем аргументы программы (входной файл данных сцены в NFF формате и имя файла, в котором будет размещен результат программы-построенное изображение), разбирает файл с характеристиками сцены, создает геометрические объекты сцены и инициализирует их и переменные сцены данными переведенными из NFF формата. Затем все данные и объекты сцены укладываются в упакованную сцену для передачи в качестве аргумента в функцию RenderScene.

Далее с использованием Т-системного вызова SPARK происходит запуск функции-процесса RenderScene.

Т-функции RenderScene в качестве аргументов передается упакованная сцена, координаты генерируемого фрагмента изображения, его размеры и расстояние между точками картинной плоскости (экрана).

В случае если фрагмент изображения достаточно велик (т.е. количество точек картинной плоскости содержащейся во фрагменте не меньше заранее заданного числа) фрагмент разделяется пополам. Затем с использованием Т-системного вызова SPARK запускаются две новые Т-функции RenderScene с характеристиками соответственно первого и второго участков разделенного фрагмента в качестве аргументов.

В случае когда фрагмент недостаточно велик для дальнейшего деления; на фоне Т-функкии RenderScene вызывается непараллельная функция RenderScene. Именно эта функция реализует построение изображения методом трассировки лучей.

3.4 Использование собственных статических переменных процесса в реализации

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

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

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

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

Таким образом главная Т-функция в качестве результата, возвращенного Т-функцией RenderScene, получает держатель корня бинарного дерева.

Далее производится нерекурсивный обход этого дерева и вывод фрагментов построенного изображения в файл в формате TARGA.

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

4. Экспериментальное изучение параллельной реализации метода трассировки лучей

4.1 Постановка эксперимента

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

Эксперимент включал в себя:

  1. Определение вычислительной мощности каждого из ПЭ путем расчета стандартной сцены в монопроцессорном варианте для каждого из ПЭ.
  2. Измерение времени расчета стандартной сцены на вычислительной системе состоящей из двух ПЭ.
  3. Измерение времени расчета стандартной сцены на вычислительной системе состоящей из трех ПЭ.

4.2 Структура вычислительной системы

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

Ниже (Таблица 4.1) приведены характеристики отдельных ПЭ, входивших в состав вычислительной системы.

Таблица 4.1 Характеристики отдельных ПЭ вычислительной системы

Имя машины
IP - номер
CPU
1
roma.botik.ru
193.232.174.5
Pentium - 166
2
adam.botik.ru
193.232.174.4
Pentium - 130
3
hole.botik.ru
193.232.174.2
Pentium - 130

4.3 Результаты эксперимента

4.3.1 Вычислительная мощность каждого ПЭ вычислительной системы

Для определения вычислительной мощности каждого из ПЭ многократно (по 10 раз) измерялось время расчета этим ПЭ стандартной сцены (в монопроцессорном варианте). Вычислительная мощность второго ПЭ была взята за единицу. Вычислительная мощность остальных ПЭ определялась как отношение времени выполнения расчета стандартной сцены на данном процессоре к времени ее расчета на втором ПЭ. Результаты экспериментов по определению
вычислительной мощности каждого из ПЭ приведены ниже (Таблица 4.2).

Таблица 4.2 Результаты экспериментов по определению вычислительной мощности каждого из ПЭ

Имя Машины
Среднее время расчета стандартной сцены
в сек.
Вычислительная мощность ПЭ
1
roma.botik.ru
902
1.11
2
adam.botik.ru
1000
1.00
3
hole.botik.ru
1315
0.76

Далее (Таблица 4.3) приведены результаты измерения времени вычисления стандартной сцены на различных конфигурациях вычислительной системы состоящей из двух ПЭ. Приведены суммарная вычислительная мощность вычислительной системы, вычислявшаяся как сумма вычислительных мощностей ПЭ, входящих в состав системы, время расчета полученное усреднением результатов измерений (по 10 измерений для каждой конфигурации вычислительной системы) и стандартное отклонение полученной средней величины.
 

Таблица 4.3 Результаты измерения времени вычисления стандартной сцены на вычислительной системе состоящей из двух ПЭ

ПЭ участвовавшие в эксперименте
Суммарная вычислительная мощность
Среднее время расчета стандартной сцены в сек.
Стандартное отклонение
в сек
1
1 - 2
2.11
575
54.00
2
2 - 3
1.76
613
4.24
 
Таблица 4.4 отражает аналогичные результаты для вычислительной установки, состоящей из трех ПЭ.

Таблица 4.4 Результаты измерения времени вычисления стандартной сцены на вычислительной системе состоящей из трех ПЭ

ПЭ участвовавшие в эксперименте
Суммарная вычислительная мощность
Среднее время расчета стандартной сцены в сек.
Стандартное отклонение 
в сек
1
1 - 2 -3
2.87
497
68.36

4.3.2 Зависимость производительности вычислительной системы от суммарной вычислительной мощности ее ПЭ

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

Таблица 4.5 Зависимость производительности ВС от суммарной вычислительной мощности

1
Структура вычислительной системы, ПЭ
2
2 - 3
1 -2
1 - 2 - 3
2
Суммарная вычислительная мощность ПЭ
1
1.76
2.11
2.87
3
Производительность ВС
1
1.63
1.73
2.01

4.4 Анализ результатов эксперимента

Анализ приведенных результатов позволяет сделать следующие выводы: Результаты экспериментов позволяют говорить о применимости и практической ценности системы автоматического динамического распараллеливания для решения задач подобного класса.

5. Заключение

В процессе выполнения данной работы были освоены теоретические и практические стороны задачи распараллеливания программ с использованием Т-системы - системы автоматического динамического распараллеливания. Они кратко изложены в данной работе.

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

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

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

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

6. Литература

  1. A.I.Adamovich cT: An Imperative Language with Parallelizing Features Supporting the Computation Model "Autotransformation of the Evaluation Network"//Parallel Computing Technologies, ed. Victor Malyshkin, Proc.: Third International Conference, PaCT-95
  2. S.M. Abramov, A.I.Adamovich, I.A. Nesterov, S.P. Pimenov, Y.V. Shevchuk Autotransformation of evaluation network as a basis for automatic dynamic parallelizing//Transputer reseach and application by Atkins, Wagner, Proceeding of the 6 NATUG 1993
  3. Alan Watt Addison 3D Computer Graphics//Wesley Publishing Company 1995
  4. А.Бересков, Е.Шикин Основы метода трассировки лучей//Журнал "Монитор" 7.94 с.34-42
  5. Ф. Препарата, М. Шеймос Вычислительная Геометрия: Введение// Издательство "Мир" 1989

7. Приложение. Примеры построенных изображений