Продолжаем рассматривать устройство многоядерного DSP TMS320C6678. Данная статья посвящена устройству операционных ядер процессора. Архитектура ядер описывается кратко с акцентом на сравнении платформы С66х с более ранними хорошо известными моделями С6000.
Операционное ядро сигнального процессора – это основной элемент, непосредственно реализующий вычислительные действия, направленные на осуществление обработки сигнала в соответствии с алгоритмом, диктуемым заложенной в процессор программой. Многоядерные процессоры семейства TMS320C66xх содержат набор операционных ядер, что является предпосылкой соответствующего роста вычислительной производительности устройства по сравнению с одноядерными процессорами. Далее будет рассмотрено одно типовое ЦСП-ядро процессора TMS320C66хх.
Процессоры TMS320C66x являются развитием платформы С6000 сигнальных процессоров фирмы Texas Instruments. Основы построения архитектуры являются одинаковыми, однако, их возможности и, частично, интерпретация их функционирования, претерпели некоторые модификации.
Ядро процессора TMS320C66xх строится по архитектуре с очень длинным командным словом (Very Long Instruction Word – VLIW – «Ви-Эл-Ай-Дабл-Ю»). Каждое ядро включает 8 работающих параллельно вычислительных блоков (2 умножителя и 6 АЛУ) и регистровый файл из 64 32-разрядных регистров. По сравнению с последними моделями процессоров линейки TMS320C6000 процессоры TMS320C66xх имеют следующие особенности.
- В 4 раза увеличено число выполняемых за такт операций умножения с накоплением как для фиксированной, так и для плавающей точки. Каждое ядро способно выполнить за один такт 32 умножения 16х16 бит с фиксированной точкой или 8 умножений 32х32 бита в формате с плавающей точкой.
- Повышена эффективность арифметики с плавающей точкой: реализована поддержка быстрой реализации основных операций с плавающей точкой; вычисления с плавающей точкой в SIMD-режиме (параллельные действия над частями слов данных); комплексное умножение в формате с плавающей точкой; другие расширения функционала.
- Расширены возможности векторной арифметики как в формате с фиксированной, так и с плавающей точкой. Под векторной арифметикой подразумевается следующая концепция. Операнды на входе арифметических блоков представляются 128-разрядными векторами, состоящими из 4-ёх 32-разрядных; 8-ми 16-разрядных или 16-ти 8-разрядных слов данных. Арифметические действия могут производиться одновременно над всеми операндами в составе векторов (SIMD-режим). Пример векторного перемножения с помощью команды QMPY32 показан на рисунке 1.
Рисунок 1 — Пример векторного перемножения
- Появились дополнительные специальные наборы команд для комплексной и матричной арифметики. Данный функционал схож с векторным перемножением, однако, вместо режима SIMD используются более сложные схемы, позволяющие реализовывать, в частности, до двух комплексных перемножений вектора размерности (1х2) и матрицы размерностью (2х2) за один такт. Также поддерживаются дополнительные операции такие, как, например, взятие комплексно-сопряженного числа.
Таким образом, основной упор, с точки зрения вычислительных ресурсов процессора, в архитектуре С66х сделан на многоядерность и на расширение возможностей векторной арифметики. За счет этого вычислительная производительность повышается более, чем в 30 раз (если сравнивать процессор TMS320C6455 с тактовой частотой 1.2 ГГц и производительностью 9600 MMACS и процессор TMS320C6678 с частотой 1.25 ГГц и производительностью 320 GMACS). Основные вычислительные возможности процессоров TMS320C66x в сравнении с процессорами предыдущего семейства с плавающей точкой TMS320C674x сведены в таблицу 1.1. Заметим, что производительность, выражаемая в числе операций умножения с накоплением в секунду, не полностью отражает вычислительную мощь процессора. Векторная арифметика накладывает ряд ограничений на операнды. Один умножитель, реализующий 16 умножений за такт, это не то же самое, что 16 умножителей, выполняющих казалось бы те же 16 умножений за такт. Не все задачи могут хорошо поддерживаться векторной арифметикой. В таких случаях ресурсы процессора могут простаивать и выигрыш архитектуры не почувствуется.
C674x | C66x | |
---|---|---|
Число умножений с накоплением за такт в формате 16х16 бит с фиксированной точкой | 8 | 32 |
Число умножений с накоплением за такт в формате 32х32 бит с фиксированной точкой | 2 | 8 |
Число умножений с накоплением за такт в формате обычной точности с плавающей точкой | 2 | 8 |
Число общих операций в формате с плавающей точкой за такт | 6 | 16 |
Пропускная способность каналов чтения/записи между ядром и памятью | 2x64 бита | 2x64 бита |
Размерность векторных операндов (возможности SIMD-обработки) |
32 бита (2х16 бит, 4х8 бит) |
128 бит (4х32 бита, 4х16 бит, 4х8 бит) |
Архитектура ядра процессора TMS320C66x представлена на рисунке 1.3. Как и у любого цифрового сигнального процессора, ядро ЦСП TMS320C66xх включает набор вычислительных блоков, регистровый файл, программный автомат, память программ и данных.
Процессоры TMS320C66x содержат двойной набор вычислительных блоков – один на стороне А (Data Path A); другой на стороне В (Data Path B). Набор вычислительных блоков классический и включает умножитель .M, АЛУ .L, сдвигатель .S и генератор адреса данных .D. В современных ЦСП функции каждого из этих блоков существенно расширены и могут частично перекрываться, однако, для упрощения понимания удобно использовать классическую терминологию. Все блоки работают параллельно, извлекая операнды из регистров регистрового файла (А/В Register File) и возвращая результат соответствующей операции в один из регистров.
Данные, прежде чем попасть в регистровый файл на обработку, хранятся в памяти данных внутренней или внешней (L1D, L2 Cache/SRAM, MSM SRAM, DDR3 SRAM). В память записываются также результаты обработки и промежуточные массивы данных. Подсистема памяти процессора TMS320C66x будет рассмотрена отдельно в соответствующем разделе.
Данные обрабатываются в соответствии с программой, загруженной на процессор. В ходе работы программа располагается в памяти программ (L1P, L2 Cache/SRAM, MSM SRAM, DDR3 SRAM). За чтение программы из памяти (Instruction Fetch), ее декодирование (Decode) и распределение по соответствующим исполнительным элементам (Dispatch) отвечает программный автомат.
Рисунок 2 — Архитектура ядра процессора C66x
Дополнительными аппаратными модулями в составе ядра процессора являются набор регистров контроля и управления (Control Registers), логика внутрисхемной эмуляции (In-Circuit Emulation), контроллер прерываний и исключений (Interrupt and Exception Controller), менеджер работы с памятью, включающий модуль защиты памяти (Program/Data Memory Controller), и ряд других компонентов.
Далее рассмотрим более подробно вычислительные блоки и регистры операционного ядра. При этом будем акцентировать внимание только на отличиях ядра С66х от ядер предшествующих моделей процессоров.
В процессорах С66х применен принцип упакованных команд – наиболее часто используемые команды имеют 16-разрядную длину при базовой длине командного слова 32 разряда. Это позволяет экономить память программ. Программный автомат процессора способен извлекать из памяти, декодировать и распределять до 15 команд одновременно.
Регистровые файлы сторон А и В содержат по 32 32-разрядных регистра. Обеспечивается возможность работы с 8-, 16-, 32-, 64- и 128-разрядными данными (для формата с фиксированной точкой), а также с 40-разрядными данными. При этом регистры группируются по парам или четверкам.
Шины обмена между регистровым фалом и вычислительными блоками расширены до 64 бит. На блоки .L и .S одновременно может быть подано по два 64-разрядных операнда и получен 64-разряный результат. На умножитель подается два 128-разрядных операнда, формируемых как два по 64-разряда входных слов. Результат – 128-разрядный.
По каналам пересечения сторон А и В можно передавать только 64-разрядные слова.
Возможности по загрузке операндов из памяти в регистры не изменились – четыре 32-разрядных слова за один такт. Возможности записи в память расширены до четырех 32-разрядных слова за такт по сравнению с процессорами TMS320C67x.
Команды выбираются из памяти всегда по 8 слов, образуя пакет выборки. При этом такой пакет может в действительности включать до 14 команд за счет наличия 16-разрядных команд, упакованных в одно слово.
Если пакет содержит только обычные 32-разрядные команды, то в них каждый 0-й бит команды указывает параллельно эта команда выполняется со следующей или следующая команда выполняется на один такт позже. То есть наличие бита параллельности позволяет указывать, какие из команд выполняются параллельно. В результате формируются пакеты выполнения, которые могут содержать от 1-й до 8-и 32-разрядных команд.
Если пакет выборки включает упакованные команды, то такой пакет сопровождается заголовком, занимающим 2 старших слова. В заголовке указывается, что содержится в пакете, какие из команд являются 16-разрядными, и какие из команд выполняются параллельно.
Адресация производится аналогично более ранним моделям процессоров. Интересно, однако, отметить, что для циклической адресации реализована возможность зацикливания не по выровненным адресам.
Работа конвейера при обработке команд в целом не отличается от общего для платформы C6000 подхода к организации выполнения программ. Конвейер включает 4 стадии выборки команды, 2 стадии декодирования и от 1 до 10 стадий выполнения команды. Разные команды выполняются разное число тактов. Команды, исполняющиеся за одну стадию выполнения, называются однотактными. К однотактным командам относится большинство операций с фиксированной точкой. Команды работы с плавающей точкой, даже базовые операции умножения и сложения, являются 4-тактными командами. Команды обращения к памяти, команды переходов и многие другие не являются однотактными. Различие времени выполнения разных команд обуславливает наличие различных ограничений на совместное использование команд и ресурсов процессора. Все это делает процесс программирования процессора, особенно на низком уровне, достаточно непростой задачей. Однако данная концепция, как уже было сказано, лежит в основе всей платформы C6000.
Работа с прерываниями организована аналогично другим моделям процессоров С6000. Типы прерываний: перезапуск, немаскируемое прерывание, маскируемые прерывания и исключения. В специальном регистре указывается адрес таблицы векторов прерываний. В таблице размещается набор кодов для каждого из прерываний. Если обработка прерывания несложна, весь соответствующий код может быть записан непосредственно в саму таблицу. Если код не умещается, необходимо организовывать переход на процедуру обработки прерывания.
Обычно при отклике на прерывание происходит отключение других маскируемых прерываний. Однако искусственно можно организовать вложенную обработку прерываний за счет специальных фрагментов кода, описанных в документации.
Все статьи цикла:
- Обзор архитектуры процессора
- Операционные ядра: вычислительные ресурсы процессора
Автор: vsv630