Автор: Пользователь скрыл имя, 30 Марта 2011 в 23:17, курсовая работа
Устройства для превращения персональных компьютеров в маленькие суперкомпьютеры известны довольно давно. Ещё в 80-х годах прошлого века на рынке предлагались так называемые транспьютеры, которые вставлялись в распространенные тогда слоты расширения ISA. Первое время их производительность в соответствующих задачах впечатляла, но затем рост быстродействия универсальных процессоров ускорился, они усилили свои позиции в параллельных вычислениях, и смысла в транспьютерах не осталось. Хотя подобные устройства существуют и сейчас — это разнообразные специализированные ускорители.
Введение……………………………………………………………………………………………………3
Глава 1. Теоретическая часть.
История развития CUDO…………………………………………………………………..4
Возможности NVIDIA CUDA………………………………………………………………5
Преимущества и ограничения CUDA……………………………………………….6
Состав NVIDIA CUDA………………………………………………………………………….9
Основы создания программ на CUDA…………………………………………….10
Модель программирования CUDA………………………………………………….13
Среда программирования……………………………………………………………….14
Оптимизация программ на CUDA……………………………………………………15
Решения с поддержкой NVIDIA CUDA……………………………………………..16
Глава 2. Практическая часть.
Реализация …
Вывод…………………………………………………………………………………………………………11
Используемая литература…………………………………………………………………………
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНСТИТУТ МАТЕМАТИКИ И КОМПЬЮТЕРНЫХ НАУК
КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ
КУРСОВАЯ РАБОТА
По предмету: «Вычислительные системы, сети и телекоммуникации».
По тема: «Использование технологий CUDA для высокопроизводительных вычислений».
Выполнила: студентка II курса ИМиКН, 395гр. Морякова Е.В.
Тюмень
2010г.
Содержание
Введение…………………………………………………………
Глава 1. Теоретическая часть.
Глава 2. Практическая часть.
Вывод…………………………………………………………………
Используемая литература…………………
Введение
Устройства
для превращения персональных компьютеров
в маленькие суперкомпьютеры
известны довольно давно. Ещё в 80-х
годах прошлого века на рынке предлагались
так называемые транспьютеры, которые
вставлялись в распространенные
тогда слоты расширения ISA. Первое
время их производительность в соответствующих
задачах впечатляла, но затем рост
быстродействия универсальных процессоров
ускорился, они усилили свои позиции
в параллельных вычислениях, и смысла
в транспьютерах не осталось. Хотя
подобные устройства существуют и сейчас
— это разнообразные
Но в последнее
время эстафета параллельных вычислений
перешла к массовому рынку, так
или иначе связанному с трёхмерными
играми. Универсальные устройства с
многоядерными процессорами для
параллельных векторных вычислений,
используемых в 3D-графике, достигают
высокой пиковой
Компания NVIDIA
выпустила платформу CUDA — C-подобный язык
программирования со своим компилятором
и библиотеками для вычислений на GPU. Конечно
же, написание оптимального кода для видеочипов
совсем не такое простое и эта задача нуждается
в длительной ручной работе, но CUDA как
раз и раскрывает все возможности и даёт
программисту больший контроль над аппаратными
возможностями GPU. Важно, что поддержка
NVIDIA CUDA есть у чипов G8x, G9x и GT2xx, применяемых
в видеокартах GeForce серий 8, 9 и 200, которые
очень широко распространены. В настоящее
время выпущена финальная версия CUDA 2.0,
в которой появились некоторые новые возможности.
История развития CUDA
Разработка CUDA была анонсирована вместе с чипом G80 в ноябре 2006, а релиз публичной бета-версии CUDA SDK состоялся в феврале 2007 года. Версия 1.0 вышла в июне 2007 года подзапуск в продажу решений Tesla, основанных на чипе G80, и предназначенных для рынка высокопроизводительных вычислений. Затем, в конце года вышла бета-версия CUDA 1.1, которая, несмотря на малозначительное увеличение номера версии, ввела довольно много нового.
Из появившегося в CUDA 1.1 можно отметить включение CUDA-функциональности в обычные видеодрайверы NVIDIA. Это означало, что в требованиях к любой CUDA программе достаточно было указать видеокарту серии GeForce 8 и выше, а также минимальную версию драйверов 169.xx. Это очень важно для разработчиков, при соблюдении этих условий CUDA программы будут работать у любого пользователя. Также было добавлено асинхронное выполнение вместе с копированием данных (только для чипов G84, G86, G92 и выше), асинхронная пересылка данных в видеопамять, атомарные операции доступа к памяти, поддержка 64-битных версий Windows и возможность мультичиповой работы CUDA в режиме SLI.
На данный момент актуальной является версия для решений на основе GT200 — CUDA 2.0, вышедшая вместе с линейкой GeForce GTX 200. Бета-версия была выпущена ещё весной 2008 года. Во второй версии появились: поддержка вычислений двойной точности (аппаратная поддержка только у GT200), наконец-то поддерживается Windows Vista (32 и 64-битные версии) и Mac OS X, добавлены средства отладки и профилирования, поддерживаются 3D текстуры, оптимизированная пересылка данных. Что касается вычислений с двойной точностью, то их скорость на текущем аппаратном поколении ниже одинарной точности в несколько раз. Реализация в GT200 этой поддержки заключается в том, блоки FP32 не используются для получения результата в четыре раза меньшем темпе, для поддержки FP64 вычислений в NVIDIA решили сделать выделенные вычислительные блоки. И в GT200 их в десять раз меньше, чем блоков FP32 (по одному блоку двойной точности на каждый мультипроцессор).
Реально производительность
может быть даже ещё меньше, так
как архитектура оптимизирована
для 32-битного чтения из памяти и
регистров, кроме того, двойная точность
не нужна в графических
Ещё одна полезная
особенность CUDA 2.0 не имеет отношения
к GPU, как ни странно. Просто теперь можно
компилировать код CUDA в высокоэффективный
многопоточный SSE код для быстрого
исполнения на центральном процессоре.
То есть, теперь эта возможность
годится не только для отладки, но
и реального использования на
системах без видеокарты NVIDIA. Ведь использование
CUDA в обычном коде сдерживается тем,
что видеокарты NVIDIA хоть и самые
популярные среди выделенных видеорешений,
но имеются не во всех системах. И до версии
2.0 в таких случаях пришлось бы делать
два разных кода: для CUDA и отдельно для
CPU. А теперь можно выполнять любую CUDA программу
на CPU с высокой эффективностью, пусть
и с меньшей скоростью, чем на видеочипах.
Возможности
NVIDIA CUDA
Технология
CUDA — это программно-аппаратная
вычислительная архитектура NVIDIA, основанная
на расширении языка Си, которая
даёт возможность организации
Хотя трудоёмкость программирования GPU при помощи CUDA довольно велика, она ниже, чем с ранними GPGPU решениями. Такие программы требуют разбиения приложения между несколькими мультипроцессорами подобно MPI программированию, но без разделения данных, которые хранятся в общей видеопамяти. И так как CUDA программирование для каждого мультипроцессора подобно OpenMP программированию, оно требует хорошего понимания организации памяти. Но, конечно же, сложность разработки и переноса на CUDA сильно зависит от приложения.
Набор для разработчиков содержит множество примеров кода и хорошо документирован. Процесс обучения потребует около двух-четырёх недель для тех, кто уже знаком с OpenMP и MPI. В основе API лежит расширенный язык Си, а для трансляции кода с этого языка в состав CUDA SDK входит компилятор командной строки nvcc, созданный на основе открытого компилятора Open64.
Перечислим основные характеристики CUDA:
Касательно поддержки операционных систем нужно добавить, что официально поддерживаются все основные дистрибутивы Linux (Red Hat Enterprise Linux 3.x/4.x/5.x, SUSE Linux 10.x), но, судя по данным энтузиастов, CUDA прекрасно работает и на других сборках: Fedora Core, Ubuntu, Gentoo и др.
Среда разработки CUDA (CUDA Toolkit) включает:
В примерах
исходного кода: параллельная битонная
сортировка (bitonic sort), транспонирование
матриц, параллельное префиксное суммирование
больших массивов, свёртка изображений,
дискретное вейвлет-преобразование, пример
взаимодействия с OpenGL и Direct3D, использование
библиотек CUBLAS и CUFFT, вычисление цены опциона
(формула Блэка-Шоулза, биномиальная модель,
метод Монте-Карло), параллельный генератор
случайных чисел Mersenne Twister, вычисление
гистограммы большого массива, шумоподавление,
фильтр Собеля (нахождение границ).
Преимущества и ограничения CUDA
С точки зрения программиста, графический конвейер является набором стадий обработки. Блок геометрии генерирует треугольники, а блок растеризации — пиксели, отображаемые на мониторе. Традиционная модель программирования GPGPU выглядит следующим образом:
Чтобы перенести вычисления на GPU в рамках такой модели, нужен специальный подход. Даже поэлементное сложение двух векторов потребует отрисовки фигуры на экране или во внеэкранный буфер. Фигура растеризуется, цвет каждого пикселя вычисляется по заданной программе (пиксельному шейдеру). Программа считывает входные данные из текстур для каждого пикселя, складывает их и записывает в выходной буфер. И все эти многочисленные операции нужны для того, что в обычном языке программирования записывается одним оператором!
Поэтому, применение GPGPU для вычислений общего назначения имеет ограничение в виде слишком большой сложности обучения разработчиков. Да и других ограничений достаточно, ведь пиксельный шейдер — это всего лишь формула зависимости итогового цвета пикселя от его координаты, а язык пиксельных шейдеров — язык записи этих формул с Си-подобным синтаксисом. Ранние методы GPGPU являются хитрым трюком, позволяющим использовать мощность GPU, но без всякого удобства. Данные там представлены изображениями (текстурами), а алгоритм — процессом растеризации. Нужно особо отметить и весьма специфичную модель памяти и исполнения.
Программно-аппаратная архитектура для вычислений на GPU компании NVIDIA отличается от предыдущих моделей GPGPU тем, что позволяет писать программы для GPU на настоящем языке Си со стандартным синтаксисом, указателями и необходимостью в минимуме расширений для доступа к вычислительным ресурсам видеочипов. CUDA не зависит от графических API, и обладает некоторыми особенностями, предназначенными специально для вычислений общего назначения.
Преимущества CUDA перед традиционным подходом к GPGPU вычислениям:
Информация о работе Использование технологий CUDA для высокопроизводительных вычислений