![](/user_photo/1363_n5AgO.jpg)
- •Семестр 2. Раздел 1. Архитектура эвм
- •Тема 6. Сетевые устройства: сетевые платы, сетевое оборудование 124
- •Тема 7. Параллельные архитектуры, графические процессоры. Языки cuda и OpenCl. Квантовые вычисления, днк-компьютеры, нанопроцессоры. 132
- •Тема 1. Архитектуры эвм. Принципы фон Неймана. Конвейеры. Тактовый генератор и резонаторы. Архитектура компьютера
- •Архитектура фон Неймана
- •Принципы фон Неймана
- •Гарвардская архитектура
- •Скалярный процессор
- •Векторный процессор
- •Вычислительный конвейер
- •[Править] Пузырек
- •Генератор тактовых импульсов
- •Кварцевый резонатор
- •Тема 2. Схема цпу, регистры, шины, мосты, чипсеты, слоты расширения, порты
- •Типовые структуры операционного блока микропроцессора
- •Системная шина микропроцессора
- •Принципы построения параллельного порта
- •Принципы построения последовательного порта
- •Синхронные последовательные порты
- •Асинхронные последовательные порты
- •Принципы построения микропроцессорных таймеров
- •Чипсеты современных компьютеров
- •Компоненты южного моста
- •Тема 3. Пзу, озу и способы их организации. Ассоциативная память (кэш). Пзу
- •Статические оперативные запоминающие устройства - озу (ram)
- •Кэширование, выполняемое операционной системой
- •Алгоритм работы кэша с отложенной записью
- •Алгоритм вытеснения
- •Политика записи при кэшировании
- •Кэширование интернет-страниц
- •Кэширование результатов работы
- •Тема 4. Накопители данных: накопители на жестких магнитных дисках, накопители на гибких магнитных дисках, накопители на магнитных лентах, оптические накопители, flash-память Жёсткий диск
- •Устройство
- •Гермозона
- •Устройство позиционирования
- •Блок электроники
- •Низкоуровневое форматирование
- •Геометрия магнитного диска
- •Адресация данных
- •Технологии записи данных
- •Метод продольной записи
- •Метод перпендикулярной записи
- •Метод тепловой магнитной записи
- •Накопитель на гибких дисках
- •Конструкция
- •Оптический диск
- •[Править] Некоторые параметры оптических дисков
- •Флеш-память
- •Принцип действия[1]
- •Nor и nand приборы
- •Slc и mlc приборы
- •[Править] Аудиопамять
- •[Править] Технологические ограничения
- •[Править] Специальные файловые системы
- •[Править] nand
- •Твердотельный накопитель
- •[Править] nand ssd
- •[Править] ram ssd
- •Тема 5. Устройства ввода и вывода данных: принтеры, сканеры, факс-модемы, мыши, клавиатуры, мониторы, электронная бумага Принтер
- •[Править] Классификация
- •[Править] Матричные принтеры
- •[Править] Сравнение с другими типами
- •[Править] Струйные принтеры
- •[Править] Классификация
- •[Править] Сублимационные принтеры
- •[Править] Сравнение с другими типами
- •[Править] Лазерные принтеры
- •[Править] Сравнение с другими типами
- •[Править] Другие принтеры
- •[Править] Интернет-принтеры
- •[Править] История и принципы работы
- •[Править] Обзор современных технологий цифровой печати
- •[Править] Картридж принтера
- •[Править] Печатающая головка
- •Копировальный аппарат
- •История
- •Модуляция
- •[Править] Виды модуляции
- •[Править] Аналоговая модуляция
- •[Править] Цифровая модуляция
- •[Править] Импульсная модуляция
- •[Править] Развёртка
- •[Править] Модуляция
- •[Править] Каналы связи
- •[Править] Приём сигнала
- •[Править] Свёртка
- •[Править] Запись изображения
- •[Править] Запись информации
- •Компьютерная мышь
- •[Править]Трекболы
- •[Править]Сенсорные полоски и панели
- •Компьютерная клавиатура
- •Монитор (устройство)
- •Жк-дисплей
- •Электронная бумага
- •Тема 6. Сетевые устройства: сетевые платы, сетевое оборудование
- •Активное сетевое оборудование
- •Пассивное сетевое оборудование
- •[Править] Принцип работы
- •[Править] Таблица маршрутизации
- •[Править] Применение
- •Сетевой коммутатор
- •Сетевой концентратор
- •[Править] Упрощённое описание принципа работы
- •[Править] Характеристики сетевых концентраторов
- •Межсетевой экран
- •Другие названия
- •Разновидности сетевых экранов
- •[Править] Типичные возможности
- •Тема 7. Параллельные архитектуры, графические процессоры. Языки cuda и OpenCl. Квантовые вычисления, днк-компьютеры, нанопроцессоры. Квантовый компьютер
- •Теория [править] Кубиты
- •[Править] Вычисление
- •[Править] Алгоритмы
- •[Править] Квантовая телепортация
- •[Править] Применение квантовых компьютеров [править] Специфика применения
- •[Править] Приложения к криптографии
- •[Править] Физические реализации квантовых компьютеров
- •Транзисторы на нанотрубках
- •Графический процессор
- •Массово-параллельная архитектура
- •Многоядерный процессор
- •Hyper-threading
Графический процессор
Графический процессор (англ. graphics processing unit, GPU) — отдельное устройство персонального компьютера или игровой приставки, выполняющее графический рендеринг. Современные графические процессоры очень эффективно обрабатывают и отображают компьютерную графику, благодаря специализированной конвейерной архитектуре они намного эффективнее в обработке графической информации, чем типичный центральный процессор.
Графический процессор в современных видеоадаптерах применяется в качестве ускорителя трёхмерной графики, однако его можно использовать в некоторых случаях и для вычислений (GPGPU). Отличительными особенностями по сравнению с ЦП являются:
архитектура, максимально нацеленная на увеличение скорости расчёта текстур и сложных графических объектов;
ограниченный набор команд.
Примером может служить чип HD6990 от AMD или GTX590 от nVidia.
GPGPU
GPGPU (англ. General-purpose graphics processing units — «GPU общего назначения») — техника использования графического процессора видеокарты, который обычно имеет дело с вычислениями только для компьютерной графики, чтобы выполнять расчёты в приложениях для общих вычислений, которые обычно проводит центральный процессор. Это стало возможным благодаря добавлению программируемых шейдерных блоков и более высокой арифметической точности растровых конвейеров, что позволяет разработчикам ПО использовать потоковые процессоры для не-графических данных.
CUDA
CUDA (англ. Compute Unified Device Architecture) — программно-аппаратная архитектура, позволяющая производить вычисления с использованием графических процессоров NVIDIA, поддерживающих технологию GPGPU (произвольных вычислений на видеокартах). Впервые появились на рынке с выходом чипа NVIDIA восьмого поколения — G80 и присутствует во всех последующих сериях графических чипов, которые используются в семействах ускорителей GeForce, Quadro и NVidia Tesla.
CUDA SDK позволяет программистам реализовывать на специальном упрощённом диалекте языка программирования Си алгоритмы, выполнимые на графических процессорах NVIDIA, и включать специальные функции в текст программы на Cи. CUDA даёт разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического ускорителя и управлять его памятью, организовывать на нём сложные параллельные вычисления.
[править] Программная архитектура
Первоначальная версия CUDA SDK была представлена 15 февраля 2007 года. В основе CUDA API лежит язык Си с некоторыми ограничениями. Для успешной трансляции кода на этом языке, в состав CUDA SDK входит собственный Си-компилятор командной строки nvcc компании Nvidia. Компилятор nvcc создан на основе открытого компилятора Open64 и предназначен для трансляции host-кода (главного, управляющего кода) и device-кода (аппаратного кода) (файлов с расширением .cu) в объектные файлы, пригодные в процессе сборки конечной программы или библиотеки в любой среде программирования, например в NetBeans.
Использует grid-модель памяти, кластерное моделирование потоков и SIMD инструкции. Применим в основном для высокопроизводительных графических вычислений и разработок NVIDIA-совместимого графического API. Включена возможность подключения к приложениям, использующим OpenGL и Microsoft Direct3D 9. Создан в версиях для Linux, Mac OS X, Windows.
22 марта 2010 года nVidia выпустила CUDA Toolkit 3.0, который содержал поддержку OpenCL.[1]
[править] Оборудование
Первая серия оборудования, поддерживающая CUDA SDK, G8x, имела 32-битный векторный процессор одинарной точности, использующий CUDA SDK как API (CUDA поддерживает тип double языка Си, однако сейчас его точность понижена до 32-битного с плавающей запятой). Более поздние процессоры GT200 имеют поддержку 64-битной точности (только для SFU), но производительность значительно хуже, чем для 32-битной точности (из-за того что SFU всего 2 на каждый потоковый мультипроцессор, а скалярных процессоров 8). Графический процессор организует аппаратную многопоточность, что позволяет задействовать все ресурсы графического процессора. Таким образом, открывается перспектива переложить функции физического ускорителя на графический ускоритель (пример реализации — nVidia PhysX). Также открываются широкие возможности использования графического оборудования компьютера для выполнения сложных неграфических вычислений: например, в вычислительной биологии и в иных отраслях науки.
[править] Преимущества
По сравнению с традиционным подходом к организации вычислений общего назначения посредством возможностей графических API, у архитектуры CUDA отмечают следующие преимущества в этой области:
Интерфейс программирования приложений CUDA (CUDA API) основан на стандартном языке программирования Си с некоторыми ограничениями. По мнению разработчиков, это должно упростить и сгладить процесс изучения архитектуры CUDA[2]
Разделяемая между потоками память (shared memory) размером в 16 Кб может быть использована под организованный пользователем кэш с более широкой полосой пропускания, чем при выборке из обычных текстур
Более эффективные транзакции между памятью центрального процессора и видеопамятью
Полная аппаратная поддержка целочисленных и побитовых операций
[править] Ограничения
Все функции, выполнимые на устройстве, не поддерживают рекурсии (в версии CUDA Toolkit 3.1 поддерживает указатели и рекурсию) и имеют некоторые другие ограничения
Архитектуру CUDA поддерживает и развивает только производитель NVidia
OpenCL
OpenCL (от англ. Open Computing Language — открытый язык вычислений) — фреймворк для написания компьютерных программ, связанных с параллельными вычислениями на различных графических (англ. GPU) и центральных процессорах (англ. CPU). В фреймворк OpenCL входят язык программирования, который базируется на стандарте C99, и интерфейс программирования приложений (англ. API). OpenCL обеспечивает параллелизм на уровне инструкций и на уровне данных и является реализацией техники GPGPU. OpenCL является полностью открытым стандартом, его использование не облагается лицензионными отчислениями.
Цель OpenCL состоит в том, чтобы дополнить OpenGL и OpenAL, которые являются открытыми отраслевыми стандартами для трёхмерной компьютерной графики и звука, пользуясь возможностями GPU. OpenCL разрабатывается и поддерживается некоммерческим консорциумом Khronos Group, в который входят много крупных компаний, включая Apple, AMD, Intel, nVidia, ARM, Sun Microsystems, Sony Computer Entertainment и другие.
OpenCL первоначально был разработан в компании Apple Inc. Apple внесла предложения по разработке спецификации в комитет Khronos. Вскоре компания AMD решила поддержать разработку OpenCL (и DirectX 11), который должен заменить фреймворк Close to Metal. [1] [2]
16 июня 2008 года была сформирована рабочая группа Khronos Compute для разработки спецификаций OpenCL. В нее вошли Apple, nVidia, AMD, IBM, Intel, ARM, Motorola и другие компании, в том числе специализирующиеся на создании компьютерных игр. Работа велась в течение пяти месяцев, по истечении которых 9 декабря 2008 года организация Khronos Group представила первую версию стандарта.
OpenCL 1.0 была выпущена вместе с Mac OS X 10.6. [3]
20 апреля 2009 года nVidia представила бета-драйвер и комплект для разработки программного обеспечения (SDK) с поддержкой открытого GPGPU-стандарта OpenCL. Данный бета-драйвер предназначен для разработчиков, участвующих в программе «OpenCL Early Access», которые уже с 20 апреля могут принять участие в тестировании бета-версии. Для участников программы «GPU Computing Registered Developers» бета-версия драйвера OpenCL будет доступна позже.[4][5][6]
5 апреля 2009 года компания AMD анонсировала доступность для загрузки beta-версии комплекта разработчика ATI Stream SDK v2.0 в который входит язык мультипроцессорного программирования OpenCL.
26 ноября 2009 года компания nVidia выпустила драйвер с поддержкой OpenCL 1.0 (rev 48).
Для получения наглядного представления, как технология OpenCL использует возможности 24-х ядерной системы для отрисовки видео эффектов, рекомендуется посмотреть следующий демо-ролик [1].
OpenCL 1.1 был представлен организацией Khronos Group 14 июня 2010 года. В новой версии значительно расширены функциональные возможности для параллельного программирования, гибкость и производительность, а так же:
Новые типы данных, включая 3-компонентные векторы и дополнительные форматы изображений;
Обработка команд из нескольких потоков хоста и обработки буфера между несколькими устройствами;
Операции по регионам буфера включая чтение, запись и копирование 1D, 2D или 3D прямоугольных областей;
Расширенное использование события для управления и контроля выполнения команд;
Улучшенное взаимодействие с OpenGL за счет эффективного обмена изображениями.
OpenCL 1.2 увидел свет 15 ноября 2011 года. В новой версии отмечено множество небольших улучшений, связанных с увеличением гибкости языка и оптимизацией производительности. Из добавленных в OpenCL 1.2 значительных новшеств отмечается:
Партицирование устройств - возможность разбиения на уровне OpenCL-приложения устройства на несколько подустройств для непосредственной привязки работ к конкретным вычислительным блокам, резервирования ресурсов для более приоритетных задач или более эффективного совместного использования аппаратных ресурсов, таких как кэш;
Раздельная компиляция и связывание объектов - появилась возможность создания динамических библиотек, позволяющих использовать в сторонних программах, ранее реализованные подпрограммы с OpenCL-вычислениями;
Расширенная поддержка изображений, включая возможность работы с одномерными изображениями и массивами одномерных или двухмерных изображений. Кроме того, в расширении для организации совместного доступа (sharing) добавлена возможность создания OpenCL-изображения на основе отдельных текстур OpenGL или массивов текстур;
Встроенные OpenCL-ядра теперь позволяют использовать возможности специализированного или непрограммируемого аппаратного обеспечения и связанных с ним прошивок. Например, появилась возможность использования возможностей и более тесной интеграции с фреймворком OpenCL таких устройств, как DSP-процессоры или видео кодировщики/декодировщики;
Возможность бесшовного совместного использования поверхностей (Media Surface Sharing) между OpenCL и API DirectX 9/11.
Особенности языка
Ключевыми отличиями используемого языка от C99 являются:
Отсутствие поддержки указателей на функции, рекурсии, битовых полей, массивов переменной длины (VLA), стандартных заголовочных файлов[8]
Расширения языка для параллелизма: векторные типы, синхронизация, функции для Work-items/Work-Groups[8]
Квалификаторы типов памяти: __global, __local, __constant, __private
Иной набор встроенных функций