Технология СUDA
Краткое сожержание материала:
Размещено на
Размещено на
Министерство образования РФ
Санкт-Петербургский государственный электротехнический
университет «ЛЭТИ»
Кафедра САААПР
Пояснительная записка к курсовой работе
по учебной дисциплине «ВЫЧИСЛИТЕЛЬНЫЕ СИСТЕМЫ»
Выполнили: Толстихин А.И.
Иванов В.В.
Группа: 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. Технология детских молочных продуктов
В справочнике представлена общая технология продуктов детского и диетического питания на молочной основе, технология приготовления и виды заквасок. Ра...