Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Технология СUDA

Тип: курсовая работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Преимущества архитектуры CUDA по сравнению с традиционным подходом к организации вычислений общего назначения посредством возможностей графических API. Создание CUDA проекта. Код программы расчёта числа PI и суммирования вектора CPU, ее технический вывод.
Краткое сожержание материала:

Размещено на

Размещено на

Министерство образования РФ

Санкт-Петербургский государственный электротехнический

университет «ЛЭТИ»

Кафедра САААПР

Пояснительная записка к курсовой работе

по учебной дисциплине «ВЫЧИСЛИТЕЛЬНЫЕ СИСТЕМЫ»

Выполнили: Толстихин А.И.

Иванов В.В.

Группа: 8302

Факультет: КТИ

Санкт-Петербург 2012

Оглавление

графический вычисление архитектура программа

Основные термины

GPU

Отличия от СPU

Общие данные СUDA

Преимущества

Недостатки

Начало работы с CUDA

Создание CUDA проекта

Экспериментальная машина

Код программы суммирование вектора GPU

Технический вывод программы

Код программы суммирование вектора CPU

Код программы расчёта БПФ с использованием библиотеки jCuda

Технический вывод программы

Код программы расчёта числа PI

Технический вывод программы

Расчёт на CPU

Выводы

Приложение 1

Теоретическая часть

Последовательный алгоритм

Параллельный алгоритм

Алгоритм

Вычислительный процессор

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

ПРИЛОЖЕНИЕ 1.1

ПРИЛОЖЕНИЕ 1.2

Скриншоты программ

Инструкция пользователя

Программа onethread.exe

Программа multithread.exe

Выводы по лабораторной работе

Основные термины

Тред (Thread) - единица выполнения программы. Имеет свой уникальный идентификатор внутри блока.

Варп (Warp) - 32 последовательно идущих треда, выполняется физически одновременно.

Блок (Block) - объединение потоков, которое выполняется целиком на одном SM. Имеет свой уникальный идентификатор внутри грида.

Грид (Grid) - объединение блоков, которые выполняются на одном устройстве.

Ядро (Kernel) - Параллельная часть алгоритма, выполняется на гриде.

Устройство (Device) - видеокарта, являющаяся сопроцессором к центральному процессору (хосту).

Хост (Host) - центральный процессор, который управляет выполнением программы.

GPU

Графический процессор (англ. graphics processing unit, GPU) -- отдельное устройство персонального компьютера или игровой приставки, выполняющее графический рендеринг. Современные графические процессоры очень эффективно обрабатывают и отображают компьютерную графику. Благодаря специализированной конвейерной архитектуре они намного эффективнее в обработке графической информации, чем типичный центральный процессор. Графический процессор в современных видеоадаптерах применяется в качестве ускорителя трёхмерной графики.

Высокая вычислительная мощность GPU объясняется особенностями архитектуры. Если современные CPU содержат несколько ядер (на большинстве современных систем от 2 до 6, по состоянию на 2012 г.), графический процессор изначально создавался как многоядерная структура, в которой количество ядер может достигать сотен. Разница в архитектуре обусловливает и разницу в принципах работы. Если архитектура CPU предполагает последовательную обработку информации, то GPU исторически предназначался для обработки компьютерной графики, поэтому рассчитан на массивно параллельные вычисления.

Отличия от СPU

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

Также отличие GPU от CPU проявляется и в принципе доступа к памяти. То есть, в GPU при записи пикселя в буфер через некоторое время будет записан и соседний с ним пиксель. В следствии такой организации памяти, чипу просто не нужна кэш-память большого размера (до 256 кБ).

Да и сама по себе работа с памятью у GPU и CPU несколько отличается. Так, не все центральные процессоры имеют встроенные контроллеры памяти, а у всех GPU обычно есть по несколько контроллеров, вплоть до восьми 64-битных. Кроме того, на видеокартах применяется более быстрая память, и в результате видеочипам доступна в разы большая пропускная способность памяти.

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

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

CUDA -- технология GPGPU, позволяющая реализовывать на С алгоритмы, выполнимые на графических процессорах ускорителей GeForce восьмого поколения и старше. Технология CUDA разработана компанией nVidia. Проще говоря, графическая подсистема компьютера с поддержкой CUDA может быть использована, как вычислительная.

Close To Metal (CTM) - технология GPGPU, использующая низкоуровневое программирование на графических процессорах ATI (AMD Graphics Products Group). CTM является виртуальной машиной, исполняющей ассемблерный код, в то время как CUDA - своеобразное расширение С. Две эти платформы несовместимы между собой.

Общие данные СUDA

CUDA (англ. Compute Unified Device Architecture) -- программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы NVIDIA.

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

Вычислительную конфигурацию процессов можно представить так:

Рисунок 1

Преимущества

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

Интерфейс программирования приложений CUDA (CUDA API) основан на стандартном языке программирования Си с некоторыми ограничениями. По мнению разработчиков, это должно упростить и сгладить процесс изучения архитектуры CUDA[2]

Разделяемая между потоками память (shared memory) размером в 16 Кб может быть использована под организованный пользователем кэш с более широкой полосой пропускания, чем при выборке из обычных текстур

Более эффективные транзакции между памятью центрального процессора и видеопамятью

Полная аппаратная поддержка целочисленных и побитовых операций

Поддержка компиляции GPU кода средствами открытого LLVM[3]

Недостатки

Все функции, выполнимые на устройстве, не поддерживают рекурсии (в версии CUDA Toolkit 3.1 поддерживает указатели и рекурсию) и имеют некоторые другие ограничения

Начало работы с CUDA

Что потребуется для работы:

1. Видеокарта из серии nVidia GeForce 8xxx/9xxx или более современная

2. CUDA Toolkit v.2.1

3. CUDA SDK v.2.1

4. Visual Studio 2008

5. CUDA Visual Studio Wizard

Создание CUDA проекта

После установки всего необходимого в VS появиться новый вид проекта для С++ с названием CU-DA WinApp, это именно то, что нам надо. В данном типе проекта доступны дополнительные на-стройки для CUDA, позволяющие настроить параметры компиляции под GPU, например версию Compute Capability в зависимости от типа GPU и т.д.

Обычно я создаю чистый проект (Empty Project), так как Precompiled Headers навряд ли пригодиться для CUDA.

Важно отметить, как собирается CUDA приложение. Файлы с расширением *.cpp обрабатываются компилятором MS C++ (cl.exe), а файлы c расширением *.cu компилятором CUDA (nvcc.exe), который в свою очередь определяет, какой код будет работать на GPU, а какой на CPU. Код из *.cu, р...

Другие файлы:

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

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

Проектирование педагогического процесса как технология
Сущность педагогической технологии и педагогического проектирования. Категории "технология", "педагогическая технология", "технология обучения". Техно...

Трудовое обучение: учебник для 3 класса
Учебник предназначен для работы в классе. В содержание включены следующие разделы: «Общая технология», «Технология обработки материалов», «Технология...

Справочник технолога молочного производства. Технология и рецептуры. Том 6. Технология детских молочных продуктов
В справочнике представлена общая технология продуктов детского и диетического питания на молочной основе, технология приготовления и виды заквасок. Ра...