Автор работы: Пользователь скрыл имя, 24 Декабря 2012 в 19:12, курсовая работа
Устройства для преобразования персональных компьютеров в маленькие суперкомпьютеры известны довольно давно. Ещё в 80-х годах прошлого века на рынке предлагались так называемые транспьютеры, которые вставлялись в распространенные тогда слоты расширения ISA. Первое время их производительность в соответствующих задачах впечатляла, но затем рост быстродействия универсальных процессоров ускорился, они усилили свои позиции в параллельных вычислениях, и смысла в транспьютерах не осталось. Хотя подобные устройства существуют и сейчас — это разнообразные специализированные ускорители. Но зачастую сфера их применения узка и особого распространения такие ускорители не получили.
1.Введение 3
2. GPGPU на примере использования технологии CUDA 5
2.1. Особенности использования GPU 5
2.1.1. Разница между CPU и GPU в параллельных расчётах 5
2.1.2. Первые попытки применения расчётов на GPU 10
2.1.3. Области применения параллельных расчётов на GPU 11
2.2. Архитектура CUDA 13
2.2.1. Возможности NVIDIA CUDA 13
2.2.2. История развития CUDA 14
2.2.3. Преимущества и ограничения CUDA 16
2.2.4. Решения с поддержкой NVIDIA CUDA 19
2.2.5. Состав NVIDIA CUDA 20
2.3. Основы создания программ на CUDA 22
2.3.1. Модель программирования CUDA 24
2.3.2. Модель памяти CUDA 26
2.3.3. Среда программирования 29
2.3.4. Стадии компиляции CUDA-приложения 30
2.3.5. Оптимизация программ на CUDA 30
3.Выводы 32
4. Список литературы 34
Программы на CUDA могут взаимодействовать с графическими API: для рендеринга данных, сгенерированных в программе, для считывания результатов рендеринга и их обработки средствами CUDA (например, при реализации фильтров постобработки). Для этого ресурсы графических API могут быть отображены (с получением адреса ресурса) в пространство глобальной памяти CUDA. Поддерживаются следующие типы ресурсов графических API: Buffer Objects (PBO / VBO) в OpenGL, вершинные буферы и текстуры (2D, 3D и кубические карты) Direct3D9.
Файлы исходного кода на CUDA C компилируются при помощи программы NVCC, которая является оболочкой над другими инструментами, и вызывает их: cudacc, g++, cl и др. NVCC генерирует: код для центрального процессора, который компилируется вместе с остальными частями приложения, написанными на чистом Си, и объектный код PTX для видеочипа. Исполнимые файлы с кодом на CUDA в обязательном порядке требуют наличия библиотек CUDA runtime library (cudart) и CUDA core library (cuda).
Для эффективного использования возможностей CUDA нужно использовать те алгоритмы, которые хорошо распараллеливаются на тысячи потоков. Также важно найти оптимальное место для хранения данных (регистры, разделяемая память и т.п.), минимизировать передачу данных между CPU и GPU, использовать буферизацию.
При оптимизации программы CUDA необходимо добиться оптимального баланса между размером и количеством блоков. Большее количество потоков в блоке снизит влияние задержек памяти, но снизит и доступное число регистров. Кроме того, блок из 512 потоков неэффективен, сама NVIDIA рекомендует использовать блоки по 128 или 256 потоков, как компромиссное значение для достижения оптимальных задержек и количества регистров.
Основные моменты оптимизации программ CUDA: необходимо более активное использование разделяемой памяти, так как она значительно быстрее глобальной видеопамяти видеокарты; операции чтения и записи из глобальной памяти должны быть объединены (coalesced) по возможности. Для этого нужно использовать специальные типы данных для чтения и записи сразу по 32/64/128 бита данных одной операцией. Если операции чтения трудно объединить, можно попробовать использовать текстурные выборки.
Представленная компанией NVIDIA программно-аппаратная архитектура для расчётов на видеочипах CUDA хорошо подходит для решения широкого круга задач с высоким параллелизмом. CUDA работает на большом количестве видеочипов NVIDIA, и улучшает модель программирования GPU, значительно упрощая её и добавляя большое количество возможностей, таких как разделяемая память, возможность синхронизации потоков, вычисления с двойной точностью и целочисленные операции.
CUDA — это доступная каждому разработчику ПО технология, её может использовать любой программист, знающий язык Си. Нужно только привыкнуть к иной парадигме программирования, присущей параллельным вычислениям. Но если алгоритм хорошо распараллеливается, то изучение и затраты времени на программирование на CUDA вернутся в многократном размере.
Вполне вероятно, что в
силу широкого распространения видеокарт
в мире, развитие параллельных вычислений
на GPU сильно повлияет на индустрию
высокопроизводительных вычислений. Эти
возможности уже вызвали
Пока развитие новых парадигм находится на начальном этапе, необходимо вручную создавать потоки и планировать доступ к памяти, что усложняет задачи по сравнению с привычным программированием. Но технология CUDA сделала шаг в правильном направлении.
GPU не заменят CPU. В их
нынешнем виде они и не
В работе говорилось о преимуществах CUDA. Но есть и недостатки. Один из них — слабая переносимость. Эта архитектура работает только на видеочипах этой компании, начиная с серии GeForce 8 и 9 и соответствующих Quadro и Tesla. Таких решений в мире много, NVIDIA приводит цифру в 90 миллионов CUDA-совместимых видеочипов. Но и конкуренты предлагают свои решения, отличные от CUDA. Так, у AMD есть Stream Computing, у Intel в будущем будет Ct.
Какая из технологий станет распространённой и будет использоваться дольше остальных — покажет только время. Но у CUDA есть неплохие шансы, так как по сравнению с Stream Computing, например, она представляет более развитую и удобную для использования среду программирования на обычном языке Си.
http://www.nvidia.ru/object/
http://steps3d.narod.ru/
http://www.thg.ru/graphic/
Информация о работе Параллельные вычисления в архитектуре CUDA