Главная » Просмотр файлов » Программирование на видеокартах GPGPU

Программирование на видеокартах GPGPU (1184391), страница 11

Файл №1184391 Программирование на видеокартах GPGPU (Программирование на видеокартах GPGPU) 11 страницаПрограммирование на видеокартах GPGPU (1184391) страница 112020-08-20СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 11)

В остальном это — добротная CUDA-программа, к которой добавленграфический интерфейс, что позволяет качественно исследовать поведение многихгравитирующих тел. Описание теоретической составляющей этой программы можно посмотреть вдокументе nbody_gems3_ch31.pdf, также входящем в состав CUDA SDK.Вообще надо сказать, что OpenGL — большая и довольно сложная библиотека, "объять" которуюза короткое время трудно, поэтому здесь такая попытка даже не делается. Если естьнеобходимость использовать OpenGL — имеет смысл обратиться к руководствам, особенно таким,40где всё изложено подробно, с большим количеством иллюстраций и примеров; вот лишьнесколько ссылок:An intro to modern OpenGL.

Table of Contentshttp://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.htmlAnton's OpenGL 4 Tutorialshttp://www.antongerdelan.net/opengl/OpenGL Step by Step — OpenGL Development on Linuxhttp://ogldev.atspace.co.uk/GLSL (OpenGL Shading Language)Если внимательно просмотреть исходные тексты упомянутой выше демонстрации nbody, томожно заметить (см. файл render_particles.cpp), что там присутствуют вроде бы исимвольные строки, но в то же время и какие-то фрагменты программного кода... Эти странныеданные в упомянутом файле имеют названия vertexShader и pixelShader.

И это действительнопрограммы, причём на специальном (C-подобном) языке GLSL!Программы на этом языке не используются сами по себе, они являются частью более сложнойOpenGL-программы. Или можно сказать так: с некоторых пор каждая OpenGL-программа "внутри"(возможно — невидимым для нас образом) использует мини-программы, написанные на языкеGLSL. Далее мы будем называть эти программы по-русски шейдерами (shaders), несмотря на то,что это слово ещё не получило широкого распространения.

Как правило, эти программы(шейдеры) исполняются на GPU. Имеется два основных вида шейдеров:••vertex shader — исполняется для каждой вершины в сцене отрисовкиfragment shader — исполняется для каждого пиксела, видимого на экранеКод каждого шейдера что-то принимает на вход и что-то генерирует на выходе.

В первом случае(vertex shader) принимаются позиции каждой вершины, координаты текстуры, которуюнеобходимо отобразить в каждой вершине, и преобразование для них (сдвиг, масштаб, поворот);на выходе получаются экранные координаты вершин, координаты текстуры вершины. Далееfragment shader будет использовать эти данные.attribute vec4 a_position;attribute vec2 a_texCoord;uniform mat4 u_MVPMatrix;varying mediump vec2 v_texCoord;void main(){gl_Position = u_MVPMatrix * a_position;v_texCoord = a_texCoord;}41Шейдеру вершин надо заполнить значение встроенной переменной gl_Positionположением преобразованнойвершины, т.е. входная позицияумножается наModelViewProjection-матрицу.Ключевое слово attribute говорит о том, что это входная переменная, сопоставляемаякаждой вершине; vec2 и vec4 говорят о том, данные являются векторами вещественныхчисел (float).

Если нужно передать шейдеру из кода некоторую внешнюю переменную, онаобъявляется uniform. Тип mat4 говорит о том, что это матрица размера 4x4 из вещественныхзначений.Переменные, которые должны из шейдера вершин (vertex shader) попасть в шейдер фрагментов(fragment shader), помечены ключевым словом varying. Самое интересное, что такиепеременные интерполируются, т.е., для каждого пиксела в промежутке между вершинамиустанавливается значение, получаемое в результате линейной интерполяции между значениями ввершинах.mediump — это спецификатор точности (наряду с highp и lowp), он определяет качествовычислений и размер при хранении величины.

Для большей точности будут использованы болееточные типы данных, но скорость вычислений может быть меньше.Кроме того, каждый шейдер должен иметь (ничего не возвращающую) функцию main() безкаких-либо параметров.Цель шейдера фрагментов, напомним, — определить цвет каждого пиксела.precision mediump float;varying vec2 v_texCoord;uniform sampler2D u_texture;void main(){gl_FragColor =}texture2D(u_texture, v_texCoord);Всё, что шейдер вершин передаёт(v_texCoord). Шейдер фрагментовu_texture.

Встроенная переменнаяпиксела: берётся цвет из u_textureна выход, должно быть определено здесь как входтоже может иметь uniform-переменные, здесь этоgl_FragColor заполняется результирующим цветомс использованием координаты v_texCoord.Высокоуровневые shading-языки появились в 2004 году: GLSL (в рамках OpenGL), Cg от nVidia, HLSLот Microsoft. В 2006 был введён так называемый geometry shader, а все три шейдера былипривязаны к одному и тому же набору инструкций. Появилась так называемая Unified ShaderArchitecture.С этого момента GPU становится не только параллельным сопроцессором для CPU в графическихпрограммах, но и параллельным процессором общего назначения.

Это привело к появлению неграфических языков (CUDA, OpenCL), позволяющих эффективно использовать параллельность ивычислительную мощь современных GPU.42Собственно, об этом и идёт речь в рамках этого краткого спецкурса: практически всеустройства с процессорами общего назначения (CPU) сейчас имеют также и графическиепроцессоры (GPU), зачастую заметно превосходящие по вычислительным возможностямосновные процессоры. Поэтому важно знать, какие средства имеются в нашем распоряжении,и каким образом мы могли бы использовать эти новые возможности.Если необходимо узнать, с какой версией OpenGL и GLSL мы имеем дело, можно использоватьпростую (но полезную) программу GetVerGLSL.cpp; для её построения в свойства проектаследуетдобавитьпутьпоисказаголовочныхфайловвNVIDIACUDASDK($(NVSDKCOMPUTE_ROOT)\C\common\inc).Длязапускапрограммепонадобятсядинамические библиотеки OpenGL32.dll и glut32.dll.OpenGL в браузере — WebGLГоворя об OpenGL, нельзя не сказать, что повсеместное распространение этой библиотеки иподдержка её подавляющим числом графических карт закономерно привели к появлению новыхвозможностей в интернет-браузерах — как стационарных, так и мобильных устройств.WebGL — это программный интерфейс для доступа к графическому оборудованию (т.е.

GPU) врамках браузера, причём без установки каких-либо дополнительных расширений. Основанный наOpenGL ES 2.0 и HTML5, он позволяет программисту определить объекты и операции длясоздания высококачественных графических изображений, в частности цветных изображенийтрёхмерных объектов.Поддерживает браузер WebGL или нет, можно узнать с помощью специальных страниц в Сети(например, http://get.webgl.org/ — это самая авторитетная, от создателей). Можно также(используя JavaScript) создать простой HTML-документ для этой цели (см. самодостаточный файлTest_WebGL.html). Иногда браузер может поддерживать WebGL, но эта поддержка — невключена. Это связано с тем, что считается, будто реализации WebGL могут быть подверженыуязвимостям для вредоносного кода (по этой причине Internet Explorer от Microsoft пока неподдерживает WebGL).

Однако на современном телефоне такая поддержка часто есть и включенапо умолчанию.Примеры использования WebGL для отображения графики и анимации в браузере есть в файлахWebGL-DrawCheckerboard.html,WebGL-AnimatedStar.html. Если заглянуть висходный текст этих HTML-документов, мы легко обнаружим там "старых знакомых": шейдерывершин и шейдеры фрагментов, а также JavaScript-код, сильно напоминающий программу наOpenGL обилием функций с уже привычными именами...В заключение — интересная ссылка на демонстрации WebGL:https://www.khronos.org/webgl/wiki/Demo_Repository4310Вспомогательные средства при работе с CUDAи смежными библиотекамиПоскольку типы данных, употребляемые в современных программах, имеют тенденцию кусложнению, ясно, насколько важно в процессе отладки ёмко и информативно отображатьтекущие значения "сложноогранизованных" величин.

К счастью, используемая нами средаразработки программ Visual Studio позволяет "подстроить" отображение таких величинжелательным образом.Визуализаторы — это компоненты пользовательского интерфейса отладчика среды Visual Studio.Они создают диалоги или другие интерфейсные единицы — чтобы отобразить переменную илиобъект в присущем этому типу данных стиле. Visual Studio использует несколько стандартныхвизуализаторов: для текста, для HTML, для XML и другие, а также позволяет создаватьдополнительные визуализаторы.

Самое приятное для "обычного" пользователя — это то, что онможет повлиять на то, как показываются величины, используемые в программе, при отладке: втултипах и Watch-окошках.Visual Studio 2005, 2008, 2010Изменение представления различных величин в отладчике возможно путём модификации файлаautoexp.dat, причём такая возможность имеется, начиная с версии Visual Studio 2005 и далее.Этот файл находится (при установке по умолчанию) в таких каталогах:VS 2008C:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\DebuggerVS 2010C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debuggerили в более общем виде — %VSINSTALLDIR%\Common7\Packages\Debugger, хотя самапеременная окружения VSINSTALLDIR (или аналогичная) может и отсутствовать.Форматирующие правила располагаются в файле autoexp.dat в секции [Visualizer],куда можно добавить также описание своих собственных или других необходимых для работытипов.

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

Характеристики

Тип файла
PDF-файл
Размер
1,54 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6572
Авторов
на СтудИзбе
298
Средний доход
с одного платного файла
Обучение Подробнее