Использование технологий CUDA для высокопроизводительных вычислений

Автор: Пользователь скрыл имя, 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

Используемая литература…………………………………………………………………………

Файлы: 1 файл

ВСиИТ курсовая.docx

— 219.16 Кб (Скачать)

Стадии компиляции 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 для высокопроизводительных вычислений