Автор: Пользователь скрыл имя, 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-приложения:
Файлы исходного
кода на CUDA C компилируются при помощи
программы NVCC, которая является оболочкой
над другими инструментами, и
вызывает их: cudacc, g++, cl и др. NVCC генерирует:
код для центрального процессора, который
компилируется вместе с остальными частями
приложения, написанными на чистом Си,
и объектный код PTX для видеочипа. Исполнимые
файлы с кодом на CUDA в обязательном порядке
требуют наличия библиотек CUDA runtime library
(cudart) и CUDA core library (cuda).
Оптимизация программ на CUDA
Естественно, в рамках обзорной статьи невозможно рассмотреть серьёзные вопросы оптимизации в CUDA программировании. Поэтому просто вкратце расскажем о базовых вещах. Для эффективного использования возможностей CUDA нужно забыть про обычные методы написания программ для CPU, и использовать те алгоритмы, которые хорошо распараллеливаются на тысячи потоков. Также важно найти оптимальное место для хранения данных (регистры, разделяемая память и т.п.), минимизировать передачу данных между CPU и GPU, использовать буферизацию.
В общих чертах, при оптимизации программы CUDA нужно постараться добиться оптимального баланса между размером и количеством блоков. Большее количество потоков в блоке снизит влияние задержек памяти, но снизит и доступное число регистров. Кроме того, блок из 512 потоков неэффективен, сама NVIDIA рекомендует использовать блоки по 128 или 256 потоков, как компромиссное значение для достижения оптимальных задержек и количества регистров.
Среди основных
моментов оптимизации программ CUDA:
как можно более активное использование
разделяемой памяти, так как она
значительно быстрее глобальной
видеопамяти видеокарты; операции чтения
и записи из глобальной памяти должны
быть объединены (coalesced) по возможности.
Для этого нужно использовать специальные
типы данных для чтения и записи сразу
по 32/64/128 бита данных одной операцией.
Если операции чтения трудно объединить,
можно попробовать использовать текстурные
выборки.
Решения с поддержкой NVIDIA CUDA
Все видеокарты, обладающие поддержкой CUDA, могут помочь в ускорении большинства требовательных задач, начиная от аудио- и видеообработки, и заканчивая медициной и научными исследованиями. Единственное реальное ограничение состоит в том, что многие CUDA программы требуют минимум 256 мегабайт видеопамяти, и это — одна из важнейших технических характеристик для CUDA-приложений.
Актуальный
список поддерживающих CUDA продуктов можно
получить на вебсайте NVIDIA. На данный момент
расчёты CUDA поддерживают все продукты
серий GeForce 200, GeForce 9 и GeForce 8, в том числе
и мобильные продукты, начиная с GeForce 8400M,
а также и чипсеты GeForce 8100, 8200 и 8300. Также
поддержкой CUDA обладают современные продукты
Quadro и все Tesla: S1070, C1060, C870, D870 и S870. Особо
отметим, что вместе с новыми видеокартами
GeForce GTX 260 и 280, были анонсированы и соответствующие
решения для высокопроизводительных вычислений:
Tesla C1060 и S1070 (представленные на фото выше),
которые будут доступны для приобретения
осенью этого года. GPU в них применён тот
же — GT200, в C1060 он один, в S1070 — четыре. Зато,
в отличие от игровых решений, в них используется
по четыре гигабайта памяти на каждый
чип. Из минусов разве что меньшая частота
памяти и ПСП, чем у игровых карт, обеспечивающая
по 102 гигабайт/с на чип.
Выводы
Будущее множества
вычислений явно за параллельными алгоритмами,
почти все новые решения и
инициативы направлены в эту сторону.
Пока что, впрочем, развитие новых парадигм
находится на начальном этапе, приходится
вручную создавать потоки и планировать
доступ к памяти, что усложняет задачи
по сравнению с привычным программированием.
Но технология CUDA сделала шаг в правильном
направлении и в ней явно проглядывается
успешное решение, особенно если NVIDIA удастся
убедить как можно разработчиков в его
пользе и перспективах. Вполне вероятно,
что в силу широкого распространения видеокарт
в мире, развитие параллельных вычислений
на GPU сильно повлияет на индустрию высокопроизводительных
вычислений. Эти возможности уже вызвали
большой интерес в научных кругах, да и
не только в них. Ведь потенциальные возможности
ускорения хорошо поддающихся распараллеливанию
алгоритмов (на доступном аппаратном обеспечении,
что не менее важно) сразу в десятки раз
бывают не так часто. Представленная компанией
NVIDIA программно-аппаратная архитектура
для расчётов на видеочипах CUDA хорошо
подходит для решения широкого круга задач
с высоким параллелизмом. CUDA работает
на большом количестве видеочипов NVIDIA,
и улучшает модель программирования GPU,
значительно упрощая её и добавляя большое
количество возможностей, таких как разделяемая
память, возможность синхронизации потоков,
вычисления с двойной точностью и целочисленные
операции.
Информация о работе Использование технологий CUDA для высокопроизводительных вычислений