Работа видеокарты.

Работа ядра графического процессора видеокарты.

В прошлой статье немного был освещён вопрос устройства и работы ядра графического процесса видеокарты. Рассмотрим вопрос работы видеокарты подробнее.

Прежде всего, как рассматривалось ранее, ядро процессора внутри себя состоит из нескольких блоков потоковых мультипроцессоров, выполняющих операции с плавающей точкой(они характерны для мультимедийных приложений). Каждый блок мультипроцессоров обладает собственной кэш‐памятью первого уровня L1, а кэш‐память второго уровня L2 доступна для любого блока и является общей. Также мультипроцессоры имеют доступ к регистрам общего назначения.

ядро графического процессора

Таким образом, любой мультипроцессор может воспользоваться данными вычислений любого другого мультипроцессора. Это позволяет делать конвейеризацию обработки данных, когда каждый участник конвейера очень быстро делает свою элементарную операцию и полученный результат передаёт дальше.

Рассмотрим, что представляет собой собственно мультипроцессор. Внутри мультипроцессора можно выделить следующие элементы:

Блок множественных инструкций, предназначен для организации и управления нитями. Нити являются результатом работы нитевых ядер, которые образуют мультипроцессор. Блок поддерживает параллельную работу нитей и объёдиняет нити в пучок. Общее число нитей может достигать нескольких сотен, а количество пучков нескольких десятков. Над нитью в каждый момент времени может выполняться одна операция SIMD: один поток команд управляет множеством потоков данных.

Соответственно, в пучке нитей, каждый из которых независим от остальных нитей, выполняются операции MIMD: множество потоков команд управляет множеством потоков данных. Этим достигается параллельность обработки данных и наилучшая производительность достигается при выполнении всех нитей в пучке, без каких‐либо приоритетов.

потоковый мультипроцессор

Нитевой процессор предназначен для выполнения операций с плавающей точкой, которые применяются для вывода информации в графическом виде, а также целочисленных операций. Нитевые процессоры и образуют вычислительное ядро мультипроцессора. Операции с плавающей точкой, которые выполняют нитиевые процессоры такие: сложение, вычитание, нахождение минимального, нахождение минимального, округление и другие. Операции с целочисленными данными такие: сложение, вычитание, умножение, деление, нахождение минимального и максимального целого, сдвиг вправо или влево, логические операции.

Разделяемая память объёмом 16 Kб, предназначена для записи результатов вычислений отдельной группы нитиевых ядер.

Блок специальных функций позволяет вычислять функции извлечения квадратного корня, вычисление экспоненты, логарифма, синуса, косинуса. Также аппроксимирует функции с помощью квадратичной аппроксимации с точностью до 24 бит.

Таким образом, данные циркулируют внутри процессора, разделяются на множество потоков промежуточных данных, которые могут временно храниться в кэше 2 уровня и быть доступны для других мультипроцессоров. После выполнения всех необходимых операций над данными они покидают графический процессор и поступают в видеопамять. По такой схеме исключаются задержки при обращении к видеопамяти и вывода графической информации на экран.

Работа видеокарты с точки зрения программиста.

Поскольку работа видеокарты состоит из выполнения инструкций, команд, которые необходимо выполнить графическому процессору над данными и в конечном итоге предоставить визуализацию результатов вычислений, рассмотрим вопрос программного обеспечения графического процессора. Выше указывалось, что современный графический процессор способен выполнять вычисления в параллельных и независимых потоках, однако использовать общие результаты промежуточных вычислений.

взаимодействие CPU и GPU

Программист разделяет задачу на разделы, в свою очередь раздел делиться на блоки, которые выполняются параллельно. В свою очередь, блоки делятся на нити, которые соответствуют нитям нитиевых процессоров. Таким образом задача распараллеливается, что ведёт к большой гибкости.

Нити образуют так называемый массив взаимодействующих/конкурирующих нитей. Называется он CTA. Число нитей в этом массиве может достигать 512. А размерность массива CTA может доходить до 3. В CTA нити имеют свой идентификатор, они разделяют общие данные и синхронизированны между собой. В каждом CTA нити выполняют одну программу, которая в свою очередь назначает активную нить и адресует ей данные.

исполнение команд блока

Потоковый мультипроцессор контролирует выполнение нити по её идентификатору. Нити CTA хранят данные и результаты вычислений отдельно, но доступ к ним может иметь любая нить, поскольку они хранятся в разделяемой памяти. Данная концепсия работы программ в графических процессорах реализована, например, в среде CUDA, разработанной в фирме nVIDIA, одной из ведущих фирм в мире проектирующей чипы для компьютеров.

Среда CUDA представляет собой как бы надстройку над языком Си, использующей несколько новых команд и процедур, облегчающей программирование расчётов общего назначения и компилятор. Одним из важных свойств данной среды является то, что выполнение программы ведётся в тесном взаимодействии между центральным процессором и графическим процессором. Центральный процессор выполняет последовательные операции, а графический процессор выполняет параллельные операции.

Такое разделение работы между центральным и графическим процессорами позволяет очень эффективно выполнять вычисления, концентрируя больше вычислительных мощностей в нужных участках программного кода.

В данной статье рассмотрена работа видеокарты. В следующей статье будут рассмотрены рекомендации по выбору видеокарты.

Наверх