Научная статья на тему 'Процессоры GreenArrays - GA144'

Процессоры GreenArrays - GA144 Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
207
66
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Калачев Александр

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Процессоры GreenArrays - GA144»

Процессоры

GreenArrays — GA144

Александр КАЛАЧЕВ

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

Введение

После ухода Чака Мура и его команды из Intellasys (январь 2009 г.) была организована новая небольшая компания GreenArrays Inc., расположившаяся в живописном местечке в окрестностях озера Тахо (Tahoe Lake). Прерванные работы над новыми сериями многоядерных процессоров были продолжены. За время работы команды в Intellasys свет увидели процессоры SEAforth24, оставшиеся в итоге как тестовые и не вошедшие в промышленную серию, и процессоры SEAforth40 (S40C18) [1]. В планах значились модификация процессоров и расширение ряда. Новое семейство процессоров получило название GreenArrays. В него вошли многоядерные процессоры различной степени интеграции — от 4 до 144 ядер в одном корпусе (4, 32, 40 и 144 ядра).

Дальнейшие усилия компании были направлены на разработку и развитие как раз самых маленьких — 4-ядерных и самых больших (144 ядра на данный момент) своих процессоров.

Появление процессоров GreenArrays

В середине 2010 года получены первые тестовые образцы процессоров — 4-ядерные GA4 с ядром F18B и 144-ядерные GA144 с ядрами F18A [2]. В схемотехнику ядер были включены некоторые изменения, касающиеся работы с памятью и линий ввода/вывода. В ноябре 2010-го процессоры GA144 запущены в производство, и 6 июня 2011 года начались их поставки (текущая версия процессоров GA144-1.2 получила название GA144f18a и обозначение G144A12).

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

ей в области процессорной техники (снижением энергопотребления и косвенно отражено в названии компании) экологичность процессоров. Все процессоры GreenArrays характеризуются полностью независимыми асинхронными ядрами, прозрачным для программиста способом управления энергопотреблением, аппаратными возможностями синхронизации задач на различных ядрах и высокой скоростью выполнения кода. В новых процессорах оставлена возможность программно задавать функциональность линий ввода/вывода.

Целевая аудитория GA144

Заявлено, что основные целевые области применения GreenArrays-процессоров таковы [3]:

• встраиваемые системы — приложения с ограниченным энергоресурсом, портативные приборы;

• датчики — предобработка сигнала, компенсация нелинейности;

• системы управления — манипуляторы/протезы/автономные подвижные роботы, диагностика состояния в реальном времени/контроль движения, управление антенными системами (ЦАР, ФАР);

• криптография;

• цифровая обработка сигналов в реальном времени — преобразования сигналов, фильтрация, модуляция/демодуляция, распознавание/синтез речи;

• симуляция процессов;

• массово-параллельные системы для исследователей и образования — аппаратное обеспечение курсов цифровой обработки сигналов, параллельного программирования, архитектуры вычислительных систем;

• системы искусственного интеллекта, нейронные сети — классификация/распознавание сигналов/образов.

Если рассмотреть доступный опыт применения процессора SEAforth40 ^40С18), то можно сказать, что заявленные области вполне могут быть освоены и более мощным GA144.

Так, S40 применялся в слуховых аппаратах в качестве аудиопроцессора, ответственного за фильтрацию и компрессию звукового сигнала [4]. Интересны его применения в качестве музыкального синтезатора и синтезатора речи [5]. Из доступных проектов можно выделить исследование возможностей процессора при обработке изображений, в частности, в системах стереоскопического машинного зрения [6]. Причем в этих работах приводится сравнение производительности работы S40 с работой процессора CSX700 [7] (ClearSpeed [8]) над аналогичной задачей. Во всех указанных случаях оказывалось востребованным низкое энергопотребление процессора совместно с его производительностью и возможной параллельной обработкой данных (чаще всего применяется конвейерное распараллеливание).

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

Структура

мультикомпьютеров GA144

Рассмотрим, что скрывается в небольшом корпусе QFN88 площадью 1 см2. К сожалению, фотографий самого кристалла процессора не представлено, но известно, что мы имеем дело со 180-нм технологией изготовления. Конечно, на данный момент она является далеко не новой, и трудно будет

Рис. 1. Топология связей процессора GA144

Pins II dOO I- 2 dQ1 h 3 d02 h [ГЙ1 15 +cl 8 d03 h 1 9 d04 1110 d05h III dOSI- 112 d07h 113 d08h EC3| lis H 116 d09h [тг^а fl9~+l1 Г 120 И 121 d10h I22 d111- 700 701 5j |~85 702 703 704 1С 705 SPI 706 ^ 707 J? 708 5 709 Analog 710 Ш 711 712 713 Analog тТ^ 714 3C 715 716 Я -Il 717 Analog -a02 66 -a03 65 1+1 64| jl 63| l+c 62 H 61| 4 60| Л 59|

600 500 601 501 602 502 603 503 604 504 605 505 606 506 607 507 608 508 609 509 610 510 611 511 612 512 613 513 614 514 615 515 616 516 617 Analog 517

400 300 401 301 402 302 403 303 404 304 405 305 406 306 407 307 408 308 409 309 410 310 411 311 211 111 412 312 413 313 414 314 415 315 416 316 417 317 -a05 57 -a06 56 -a07 55 -a08 54 a09 53 H 52| -H 511 d sol l+c 491

200 100 201 101 202 102 203 103 204 104 105 106 207 107 208 108 209 109 210 110 212 112 213 113 214 114 215 115 216 116 217 117 Analog

000 at 001 ш 002 5 [_26 003 Й 004 ш 005 1 006 ~15l di 30 3 007 Data 31 corrtrol )fi 009 a 010 3sJ(j 011 3837 012 '■s 013 1 014 jo 015 ж 016 4 a13 43 017 a 1+1 47| -a10 46 -a11 45

Рис. 2. Структура процессора GA144 [13]

конкурировать с кристаллами по 45- и 32-нм технологии, зато компании, пользующиеся 180-нм технологией, могут похвастаться отлаженным процессом изготовления и относительно недорогой стоимостью производства (что, безусловно, положительно сказалось на цене GA144 — всего $20 за штуку).

На кристалле расположено 144 процессорных ядра, каждое — размером всего 241x523 мкм. В терминологии фирмы ядра называются микрокомпьютерами, а сам процессор в целом — мультикомпьютером. Сделано это не случайно: каждое из ядер имеет все необходимое для самостоятельной

работы: АЛУ, постоянную память (некоторый аналог BIOS-a), оперативную память, коммуникационные порты. В чистом виде таким набором обладает редкий многоядерный процессор (в качестве примера можно привести AsAP-II, ClearSpeed, Cell, Мультикор [8, 10-12]): чаще всего ядро располагает многоуровневым кэшем (иногда он еще разделяется на кэш инструкций и кэш данных) и доступом к общей оперативной памяти. Наличие локальной оперативной памяти делает ядра процессора более независимыми от пропускной способности канала доступа к внешней оперативной памяти и позволя-

ет одновременно выполнять на различных ядрах различные алгоритмы.

Топология связей между микрокомпьютерами в GA144 [13, 14] — решетка. Ядра организованы в 8 линий по 18 штук в каждой — решетка 18x8 (рис. 1, 2).

Посредством специальных коммуникационных портов ядро может иметь до четырех связей со своими ближайшими соседями. Часть периферийных ядер имеет линии ввода/вывода, часть оснащена дополнительными устройствами типа последовательных приемопередатчиков, ЦАП, АЦП. Всего процессор имеет два параллельных 18-битных порта, по 2 группы 4-битных и 2-битных выводов, 6 одиночных линий ввода/вывода, 5 АЦП и ЦАП [13, 15].

Ключевые технологии

Основные особенности этого процессора следующие [13, 15, 16].

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

Таблица 1. Время выполнения инструкций

Тип инструкции время выполнения, нс

Операции со стеком и регистрами 1,4

Чтение/запись коммуникационных портов 3,5

Чтение/запись данных из ОЗУ или ПЗУ 5

Пустой микроцикл 2,4

Пустой цикл 5

Программный переход 5,2

Предвыборка инструкции 1,2-4,3

Некоторым минусом можно считать появившуюся зависимость скорости работы схем от температуры (рис. 3) [17] и напряжения питания (рис. 4) [17], и определенный разброс по времени выполнения процессорных инструкций различного типа [13, 17].

Вторая характерная черта — коммуникационные порты, которые являются не только средством передачи данных между отдельными ядрами, но и средством синхронизации процессов, выполняющихся на ядрах, а также средством управления энергопотреблением ядер и процессора в целом. Ядра взаимодействуют между собой по механизму параллельных взаимодействующих процессов: синхронизация происходит в точках передачи или приема данных. Для передачи данных соседнему ядру или ядрам выполняется операция записи в коммуникацион-

Рис. 3. Зависимость времени выполнения пустого цикла от температуры при различных напряжениях питания

1,91---------------1-50 0 50 ЮО Температура, °С

Рис. 4. Нормализованная зависимость времени выполнения инструкций от напряжения питания

ный порт, и, если соседнее ядро не находится в состоянии чтения порта, передающее ядро переходит в спящее состояние (происходит автоматическая остановка выполнения программного кода) до тех пор, пока данные не будут считаны.

Аналогичная ситуация происходит и в случае чтения данных: при попытке чтения данных из порта, в который еще не выполнялась запись, ядро останавливается, переходя в спящее состояние до момента прихода данных в порт. Потребление энергии в спящем состоянии обусловлено только токами утечки транзисторов — порядка 50 нА (90 нВт) при комнатной температуре. Если в спящем состоянии находятся все ядра, суммарное потребление составляет примерно 7 мкА (13 мкВт). Время выхода ядер из спящего состояния — всего около 5 нс: безусловный рекорд среди доступных процессоров и микроконтроллеров.

Еще одной интересной возможностью, которую предоставляют коммуникационные порты, являются интерпретация принятых данных на порт как исполнимого кода и, соответственно, выполнение действий. Эта возможность используется при загрузке исполнимого кода в оперативную память процессорных ядер при включении или перезагрузке процессора, позволяет в ряде приложений одному ядру управлять ходом выполнения программы на другом, оперативно изменять исполнимый код, а также выполнять программы, превосходящие по размеру кода возможности оперативной памяти процессорных ядер. На этом фактически строится работа процессора в системе: это и первоначальная загрузка кода (возможна одновременно через несколько ядер), это и поддержка IDE — вплоть до пошаговой отладки.

Третья отличительная черта, не характерная для современных контроллеров (да и процессоров тоже), — практически полное отсут-

ствие специализированных периферийных устройств. Необходимая функциональность внешних выводов обеспечивается программно — за счет пользовательских программ или за счет подпрограмм ПЗУ периферийных ядер. Дополнительные устройства имеют только ядра с высокоскоростным последовательным интерфейсом (SERDES) и ядра с аналоговыми линиями ввода/вывода.

Микрокомпьютеры F18A

Принципиальных отличий ядер F18A от процессорных ядер C18 в SEAforth40 нет [1, 15, 18] — фон-неймановские процессоры с единым адресным пространством для ОЗУ, ПЗУ и коммуникационных портов, два регистровых файла по 10 и 9 элементов, организованных в стеки. В ОЗУ объемом 64 слова располагаются пользовательские программы и данные, ПЗУ (также объемом 64 слова) содержит набор подпрограмм, выполняющих ряд математических преобразований, позволяющих манипулировать линиями ввода/вывода или оперирующих с периферийными устройствами. Код в ПЗУ прописывается в момент изготовления процессора и может зависеть от его модификации (версии). Изменения коснулись в основном схемотехники внешних выводов процессорных ядер и задействованных в их работе цепей [15, 16] и немного — мнемоники инструкций процессора.

В зависимости от расположения ядра, наличия у него внешних выводов или периферийных устройств ядро имеет определенный набор прошитых в ПЗУ подпрограмм. Всего выделено семь различных наборов подпрограмм ПЗУ, расположенных в ядрах [13]:

• Базовый (basic) — его содержат ядра процессора, не обладающие внешними выводами и периферийными устройствами.

• Аналоговый (analog) — предустанавливается в ядра с АЦП и ЦАП.

• SERDES (SERDES boot) — содержится в ядрах с высокоскоростными последовательными интерфейсами.

• Синхронный загрузочный (Sync boot).

• Асинхронный загрузочный (Async boot).

• SPI (SPI boot) — реализует программный интерфейс к SPI-устройствам.

• 1-wire — данный набор имеют периферийные ядра с одной внешней линией.

Встроенное

программное обеспечение

Подпрограммы, содержащиеся в ПЗУ ядер, во многих случаях упрощают программирование процессорных ядер, сокращая размер кода программы, помещаемой в ОЗУ, и избавляя программиста от рутинных операций. Вызов подпрограмм из ПЗУ благодаря единому адресному пространству происходит аналогично вызову определенных пользователем подпрограмм. Чем-то это напоминает вызов функций BIOSa в ПК на базе архитектуры х86.

Фактически, кроме двух десятков периферийных ядер, ядра имеют одинаковый набор подпрограмм. Ядра с последовательными интерфейсами содержат подпрограммы для приема и передачи байт или слов данных, в соответствии с типом заявленного интерфейса. Как правило, это поддержка загрузки и исполнения кода через интерфейс.

Основные подпрограммы и их наличие в наборах подпрограмм ПЗУ представлены в таблице 2. Состав подпрограмм или алгоритмы их работы от версии к версии процессора могут изменяться, поэтому рекомендуется в исходных текстах прикладных программ оперировать с именами подпрограмм, а не с их абсолютными адресами.

Рассмотрим работу основных подпрограмм, так как во многих случаях именно на них строится работа основной программы.

Одна из наиболее часто встречаемых проблем — отсутствие операции умножения

Таблица 2. Распределение подпрограмм по типам ПЗУ ядер

Слово Описание Тип ПЗУ

Basic Analog SERDES Sync Async CL (Д 1-wire

Warm Переход на подпрограмму загрузки кода в процессорное ядро + + + + + + +

Cold Первоначальная загрузка кода с внешнего источника + + + + +

Relay Пересылка исполнимого пакета между ядрами + + + + + +

*.17 Умножение 17-битных чисел в формате с фиксированной точкой + + + + +

* Умножение 16-битных чисел в формате с фиксированной точкой + + + + +

Triangle Аппроксимация тригонометрических функций + + + + +

Clc Очистить бит переноса (для режима расширенной арифметики) + + + +

--u/mod Целочисленное деление с остатком + + + +

-u/mod Целочисленное деление с остатком, делитель отрицательный + + + +

Interp Табличная интерполяция + + +

Poly Аппроксимация полиномами + +

Lsh Сдвиг влево +

Rsh Сдвиг вправо +

-dac Генерация ЦАП импульса заданной длительности и амплитуды +

Taps Создание КИХ/БИХ-фильтров + + +

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

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

Подпрограмма целочисленного умножения (в терминологии языка Форт — слово) — *.17 — выполняется примерно за 78 нс, то есть примерно 12,8 млн умножений в секунду. В том случае, если необходим результат двойной точности (36 бит), время умножения увеличится до 83,2 нс: всего около 12 млн умножений в секунду. Не считая расхода памяти на хранение операндов, умножение расходует одно слово ОЗУ в случае простого вызова и почти два слова — при двойной точности умножения.

Знаковое умножение чисел занимает порядка 94,4 нс на одну операцию (10,5 млн умножений в секунду) при том же расходе памяти.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Слово triangle имеет время выполнения 22,1 нс (более 45 млн операций в секунду).

Наиболее затратная по времени — операция целочисленного деления с остатком (--u/mod и -u/mod). Время ее выполнения — порядка 546 нс, что составляет всего 1,8 млн операций в секунду. Но во многих алгоритмах цифровой обработки сигналов операция деления не используется, или используется деление на числа, являющиеся степенью двух: в этом случае деление эффективно заменяется сдвигом вправо на нужное количество разрядов (аналогично можно поступать и при умножении на степень двух).

Одной из самых распространенных операций в цифровой обработке сигналов является фильтрация. На практике применяются как рекурсивные, так и нерекурсивные фильтры (с бесконечной — БИХ и с конечной — КИХ импульсной характеристикой соответственно). Для простого задания цифровых фильтров (любого типа) используется слово taps, принимающее массив коэффициентов фильтра и первоначального значения входного сигнала. Единственное ограничение заключается в том, что коэффициенты задаются в формате с фиксированной точкой с 16-битной точностью, и в фильтрах большого порядка возможна потеря точности. Это ограничение может быть обойдено изменением технологии расчета фильтров путем построения фильтров с целочисленными коэффициентами [19].

Например, для КИХ фильтра с шестнадцатью коэффициентами время расчета составит примерно 1772 нс, то есть возможна обработка максимум 560 тыс. отсчетов сигнала в секунду. Для КИХ фильтра с пятью коэффициентами время расчета составляет всего 560 нс — порядка 1,78 млн отсчетов сигнала в секунду. На различных ядрах параллельно могут быть запущены фильтры различного типа и разного порядка. Более того, можно реализовывать фильтры произвольной структуры, запуская на разных ядрах отдельные участки сложного фильтра, вплоть до того, что на одном ядре рассчитывается только одно звено фильтра. Приятная особенность в том, что синхронизация работы отдельных участков мультиядерного фильтра будет осуществляться практически прозрачно для программиста — при передаче отсчетов сигнала между ядрами.

Расход памяти на фильтр — 2 слова: вызов слова из ПЗУ и хранение порядка фильтра, по 2 слова на каждый порядок фильтра (хранится коэффициент и отсчет сигнала), плюс около трех-четырех слов на передачу отсчета сигнала программе расчета и дальнейшую передачу результата. Затраты памяти можно оценить по формуле:

2+2xN+4;

где N — суммарное количество коэффициентов фильтра. Фактически пределом для одного ядра является фильтр с 28-29 коэффициентами.

Для расчета нелинейных зависимостей, компенсации нелинейности датчиков или АЦП можно использовать предлагаемую встроенную подпрограмму интерполяции, в которой есть возможность задавать используемую точность (количество значащих бит) и размеры таблицы опорных значений. Так, для таблицы из пяти значений и 8-битной точности входных данных время выполнения интерполяции составляет примерно 101,4 нс (около 9,8 млн интерполяций в секунду). Расходы памяти также не очень велики — три слова на вызов слова и по одному слову на каждую табличную запись.

На практике необходимо искать компромисс между размерностью входных данных и размером таблицы функции.

Для более сложных случаев можно воспользоваться аппроксимацией зависимости полиномами Чебышева (слово poly). Для оценки временный затрат можно привести следующие данные: при второй степени полинома и четырех опорных точках зависимости время расчета составляет около 565 нс (1,7 млн операций в секунду). Расход памяти аналогичен слову interp.

Таким образом, в худших случаях вызов слов из ПЗУ ограничивает скорость вычислений в 1,5-1,8 млн операций (в данном случае — вызовов слов) в секунду. Плюс в том, что вызываемые слова соответствуют сложным преобразованиям данных.

Программное манипулирование уровнями линий ввода/вывода позволяет генерировать импульсы с разрешением в 30-40 нс.

Слово работы с ЦАП--dac — генерирует импульс, состоящий из трех частей: нулевого уровня и двух различных уровней амплитуды разной длительности (минимальная длительность равна примерно 10 нс). Совместно с внешним фильтром нижних частот -dac позволяет повысить точность формирования выходного сигнала (с большим количеством градаций сигнала, чем может обеспечить 9-битный ЦАП) при помощи ШИМ. Полезным может оказаться то, что выход ЦАП — токовый, то есть для распределенных систем возможна передача аналогового сигнала с меньшими помехами (интерфейс типа «токовая петля»).

Построение вычислительных систем на основе GA144

Несмотря на относительно небольшой размер оперативной памяти отдельного ядра, суммарный объем программы для многоядерного GA144 может составлять порядка 20 кбайт (около 2000 инструкций). Для GA144 необходимо при включении или сбросе инициализировать оперативную память ядер. Загрузка кода происходит благодаря подаче на одно или несколько периферийных ядер специально скомпилированного бинарного образа, состоящего из последовательности фреймов. Фрейм содержит исполни-

SPI

/—\ N—/

SPI,

USART,

1-WIRE

/-\

N—J

SPI, USART,

Флеш-ПЗУ

H

1-WIRE

И

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

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

Ядра с внешними выводами (за исключением ядер с параллельными портами — 005-007) содержат в ПЗУ подпрограммы, позволяющие им обнаружить наличие устройства загрузки (синхронный или асинхронный последовательный порт, SPI-память или другое SPI-slave устройство) и начать принимать последовательность фреймов. Работа загрузочных ядер не зависит друг от друга. Не обнаружив в течение определенного времени устройство загрузки, они совершают

DATA, ADDR

переход на адрес всех коммуникационных портов и, таким образом, могут быть загружены с другого источника.

Возможное наличие нескольких параллельных источников загрузки, исполнение ядром «внешнего» кода, а также высокоскоростные последовательные и параллельные интерфейсы позволяют экспериментировать с архитектурой вычислительных систем, построенных на основе GA144, наращивая или оптимизируя вычислительную мощность (рис. 5).

Самым простым и экономичным вариантом является сочетание процессора и SPI-памяти. Память служит хранилищем и программ, и данных, если это необходимо для приложения, и, конечно же, с SPI-памяти производится загрузка процессора при включении питания или сбросе (рис. 5а). Вместо флэш-памяти возможно применение микросхем FRAM-памяти, сочетающих в себе достоинства ПЗУ и ОЗУ. Смена исполняемой программы может быть осуществлена без общей перезагрузки ядер процессора при по-

мощи так называемого «теплого рестарта» 705 го ядра с чтением нужной области загрузочной памяти.

Несколько более гибкой является связка обычного микроконтроллера и GA144. В этом случае микроконтроллер может отслеживать несколько загрузочных ядер, например, с интерфейсами SPI и UART, и по запросу на загрузку производится выдача нужной программы для GA144 (рис. 5б). Более того, микроконтроллер может взаимодействовать с GA144 и посредством линий ввода/вывода, вплоть до управления сигналом сброса. Интересным вариантом является применение в качестве микроконтроллера однокристальной системы с беспроводным радиоинтерфейсом (например, однокристальные решения для сетей ZigBee или Bluetooth).

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

При необходимости к параллельным портам GA144 может быть подключена внешняя оперативная память; с соответствующей программной поддержкой это может быть как статическая, так и динамическая память (рис. 5в). Процессор с внешней памятью может работать и самостоятельно, и под управлением внешнего хост-процессора. Для систем с такой конфигурацией во многих случаях удобно выделение группы из нескольких ядер, функционирующих под управлением одной программы, — создание так называемых виртуальных машин. В частности, примером таких машин являются eForth и polyForth, реализованные на GA144 и применяющиеся в отладочной плате.

Следующий вариант — это наращивание вычислительной мощности за счет соединения нескольких GA144 в некоторое подобие кластера (при этом для каждого из процессоров кластера возможно применение любого из перечисленных выше вариантов включения). Для непосредственного соединения процессоров лучше всего подходят высокоскоростные последовательные интерфейсы SERDES, имеющиеся у 001-го и 701-го ядер (до 400 Мбит/с), и 18-битные параллельные порты 003-го и 005-го ядер (порядка 20-30 Мслов/с).

Среда разработки — ArrayForth

Среда разработки, предлагаемая GreenArrays для своих процессоров, также необычна. Текущая версия среды носит название ArrayForth, ее можно запускать на операционных системах Windows, Linux, MacOS (в текущей версии на момент написания статьи запуск в системах Linux, MacOS — в рамках сред Wine и Parallels соответственно) [20].

__

Модуль памяти (ОЗУ, дин. ОЗУ)

Рис. 5. Варианты структур вычислительных систем на основе GA144

ArrayForth основывается на оригинальной фортсистеме Чака Мура — colorForth [21] и включает в себя форт-систему, блочный редактор, интегрированную среду разработки для GA144, способную работать как с процессором, так и в режиме симулятора. Естественно, что многие черты colorForth перешли и в ArrayForth.

Особенность диалекта языка Форт, реализованного в colorForth, — в том, что управляющие конструкции языка выделяются различными цветами:

• комментарии — белым (white);

• макрокоманды редактора — синим (blue);

• обратная связь с компилятором — серым (grey);

• переменные — ярко-красным (magenta);

• интерпретируемые слова — желтым (yellow);

• компилируемые макровставки —

• голубым (cyan);

• компилируемые слова — зеленым (green);

• определения слов — красным (red). Кто-то в шутку назвал это «двумерным

интерфейсом»: фактически можно говорить о том, что совмещены язык и его цветовая подсветка.

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

Основные файлы среды разработки (в версии для Windows [22]):

• Okad.bat — bat-файл с настройками среды;

• Okad2.exe — исполняемый файл среды для ее запуска в системе Windows;

• OkadWork.cf — рабочая память системы (загружаемый/сохраняемый образ). Конфигурация и словарь системы (и словарь компилятора, и код целевого процессора) хранятся в файле с расширением *.cf. Карта блоков системы находится в индексном файле текстового формата.

По принципу работы ArrayForth больше всего напоминает классические варианты форт-систем начала 1980-х годов — псевдоконсольное окно, управление, ориентированное на «горячие» клавиши, команды с консоли, текстовое представление данных.

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

Наличие исходных текстов среды разработки несколько упрощает устранение ошибок работы (исправление исходного текста,

Режим работы клавиатуры

(раскладка)

QWERTY или dvorak

Тип введенных данных: число или текст

Вводимая строка

Представление вводимой строки в виде числа

в текущей системе счисления

Рис. 6. Консоль среды ArrayForth

f I Г

^ U or-О er

ГI г is i im te _ _ --5 J . О . i2?6 , tJ . 305 . O , -líflí^. o .

59 . D , fOlt , D , EtDe . a „ l!J? ntqúll

, nngili , D , 1CBÜ . -I , rsnrii

. U i l 1 14>Э ncgfll*« O i t>i±50 ncflalc . О .

л . a* . )■!№„ ¡it ,

V niin

Текст блока

Номер блока

Текущее положение курсора

Текущий режим

Вводимое слово

Рис. 7. Редактор ArrayForth

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

Основные части среды [20]:

• форт-консоль, управляющая режимами работы, компиляцией исходных текстов программ для целевого процессора (GA144) и модификацией самой среды;

• блочный редактор;

• симулятор;

• IDE.

Консоль (рис. 6) служит для запуска симу-лятора, редактора или отладчика и компиляции исходных текстов как среды разработки, так и целевых программ.

Исходные тексты среды ArrayForth и прикладных программ для GA144 представлены в виде набора блоков. Доступ к исходным текстам осуществляется при помощи блочного редактора (рис. 7), работа с которым

также ведется с помощью «горячих» клавиш, меняющих режим его работы или режимы ввода текста (такой способ работы встречается в текстовом редакторе Vi Linux-систем и в интерпретаторе BASIC, работавшем на компьютерах серии ZX-Spectrum).

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

Комментарии к исходному тексту программы размещаются в «теневых» блоках (блоки с нечетными номерами), цель комментариев — объяснить, зачем используется то или иное определение, как и в каких случаях оно вызывается.

Симулятор позволяет отслеживать выполнение программного кода на процессорных ядрах. При симуляции в окне системы ото-

Карта активности ядер (зеленые — активны, серые — в спящем состоянии)

Просмотр дампа памяти выделенных ядер

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Выделенный регион для подробного просмотра

Стек возвратов

Стек данных

Детальная информация о ядрах выделенного региона

Дамп памяти выбранного ядра

Рис. 8. Симулятор GA144

Номер ядра

Текущий адрес

Исполняемая ■

инструкция

Время выполнения Размер шага

.■:..■_ j

ЩИ "

эк шппч зз мы

33 ППП".1 1!И* 35 ЗНИГ5 □г пппп-

J Ч IS^Ek

I'll Г 7 3± 13343 3D □Э г a i

О-шм

fn ллт г- Се

En t* г

fiiih ■ ■ -h JAII ri

* ! r rj

TP *

J1, ■■ *»

«* Pp ■ > ff

EllL I 41 ■ Г J vnfv ■! £

tw- * p-f fjs

5rt - *

SD

Вершина стека возвратов Вершина стека данных

1 urfr 1 udr oh I v

Рис. 9. Детализация состояния процессорного ядра

Атшные ядра Спящие ядра

Состояние внешних выводов

Состояние

коммуникационного порта

Номер ядра, программный счетчик Номер слота, текущая информация Текущее исполняемое слово Программный счетчик Регистр А Регистр В

aVljFfl^H

111' 14 ^Я^^И

it »ten ; CIFInAf

">1555!, !

—i* il и : - л 1 1

13555'< 15 55550

1 О 1 0

1 = ььь Lbbbb

1 5 55 5

1СЖ — регистр управления К — вершина стека возвратов Т — вершина стека данных

Рис. 10. Отслеживание взаимодействия процессорных ядер

Поддерживаются режимы пошагового выполнения, анимации. Отслеживать выполнение программы можно на нескольких уровнях:

• просматривать выполнение кода на выбранном ядре — дамп памяти с дисассемблированием кода, содержимое регистров, состояние стеков и коммуникационных портов (рис. 9);

• смотреть выполнение кода на группе ядер (в пределах окна 8 на 4 ядра) — состояние вершин стеков, значения регистров, состояние коммуникационных портов (рис. 10);

• смотреть активность ядер в пределах всего процессора.

Отладчик — IDE

Отладчик системы позволяет проследить выполнение программного кода непосредственно на процессоре. Для этого плата, содержащая процессор, подключается к USB-или COM-порту персонального компьютера [20]. Так же как редактор и симулятор, отладчик запускается с консоли системы и имеет свой набор команд. Отладчик позволяет просматривать и изменять содержимое оперативной и постоянной памяти выбранного ядра, содержимое регистров (рис. 11), запускать на исполнение программный код на одном или нескольких ядрах процессора.

Отладочный комплект

Отладочная плата EVB001 [23] (рис. 12) содержит два процессора GA144, один из которых играет роль хост-процессора, второй — целевой. Питание платы и работа с ней осуществляются через USB-интерфейс (виртуальные СОМ-порты, скорость — до 960 кбит/с).

К хост-процессору подключена SPI флэш-память (1 Мбайт), оперативная память (1 Мслов — 1Мх16), возможно подключение MMC карты памяти. При помощи интерфейса SERDES хост-процессор связан с целевым процессором. На хост-процессор загружается виртуальная машина (eForth, polyForth или любая другая), взаимодействующая с пользователем через один из подключенных виртуальных последовательных портов.

Все выводы целевого процессора, за исключением одного интерфейса SERDES, выведены на разъемы платы или контактные площадки.

Также возможно взаимодействие обоих процессоров с отладчиком ArrayForth IDE, запущенным на персональном компьютере при подключении отладочной платы.

Заключение

бражается состояние 32 ядер из выделенного региона, карта активных в текущий момент

ядер и часть дампа оперативной памяти одного или двух выбранных ядер (рис. 8).

Наибольший интерес процессоры GA144 представляют для разработчиков встраиваемых систем, критичных к потреблению

энергии и нацеленных на обработку событий. Благодаря высокой скорости работы обработка события может начаться спустя всего 5-10 нс, за счет массового параллелизма возможна одновременная обработка нескольких событий от нескольких источников. Предельно упрощен переход в состояние низкого энергопотребления.

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

GA144 — интересный инструмент для анализа и моделирования параллельных алгоритмов обработки данных, особенно ориентированных на применение в однородных вычислительных средах. ■

Литература

1. SEAforth 40C18 Device Data Sheet — http://www. intellasys.net/templates/trial/content/S40C18_ DataSheetpdf

2. GreenArrays Inc. About the Company — http:// www.greenarraychips.com/home/about

3. GreenArrays GA144-144-Computer Chip (Chip Brief) — http://www.greenarraychips.com/home/ documentation

4. Montvelishsky M. Hearing Aid with SEAforth — http://seaforth.googlegroups.com/web/Preso-HLS. pdf

5. Советов П. Программирование мульти-компьютеров на кристалле семейства SEAforth — http://peter.sovietov.com/txt/ seaforth/seaforth.pdf

6. Montvelishsky M. Using S40 to build mobile robot vision — http://www.forth.org/svfig/kk/ 11-2010-Montvelishsky.pdf

7. Hosseini F., Fijany A., Safari S., Chellali R., Fontaine J.-G. Real-Time Parallel Implementation of SSD Stereo Vision Algorithm on CSX SIMD Architecture — http://www.springerlink.com/ content/d0 p3228385742725/fulltext.pdf

■ Eid I l: л 1 ur pfiib^t 135 I und гнм!г llbfk f [jpd

11(7E ISbDb 30O1O DflfllD

ШЧПП ПЗП5? i.i?HH 1ГГЕВ HI EFli* 3(E9K

IJüthi ula, I kapp « Iftt

а ins \ ™я

1 E □ В I Б □ В

О 707 t 7Q7

gi'Uttfk L ос I üd

□ □□□□

uuuuu 00000 DDDDD 00000

OQQQ'D □ □□□□

OOOOil

ÖQODD

oocuo □ 0000 СЙПОП 00000 II'IIII1Г1 OdlKH]

oooon

□ □ DD □

oouou

,. I

ODD DC 00000 (innon ddddu ooonn

Состояние стека данных

Выбор ядра

Дамп ОЗУ * или ПЗУ ядра

Рис. 11. Работа отладчика ArrayForth IDE

Рис. 12. Внешний вид отладочной платы EVB001

8. ClearSpeed. Products. CSX700 — http://www. clearspeed.com/products/csx700.php

9. Комплекс потоковой обработки информации в реальном времени. Алтайский государственный университет — http://www.asu.ru/structure/ faculties/fiztech_dep/vych/works/seaforth/

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

10. Asynchronous Array of Simple Processors (AsAP) Project — http://www.ece.ucdavis.edu/vcl/asap/

11. The Cell project at IBM Research — http://www. research.ibm.com/cell/

12. Мультикор — технология проектирования СнК — http://multicore.ru/index.php? id=21

13. G144A12 Data Book — http://www.greenarraychips. com/home/documents/index.html

14. G144A12 Quik Reference Poster — http://www. greenarraychips.com/home/documents/index. html

15. F18A Data Book — http://www.greenarraychips. com/home/documents

16. F18A Computer — http://www.greenarraychips. com/home/documents/index.html

17. Row Characterization Data — http://www. greenarraychips.com/home/documents/ g144apps.htm

18. Калачев А. Процессоры семейства SEAforth // Компоненты и технологии. 2009. № 4.

19. Карпенков А. С., Гришанович Ю. В., Поте-хин Д. С., Тетерин Е. П. Методика расчета целочисленного цифрового селекторного нерекурсивного фильтра с заданными добротностью и уровнем подавления // Вестник Нижегородского университета им. Н. И. Лобачевского. 2009. № 6 (1).

20. ArrayForth Users Manual — http://www. greenarraychips.com/home/support/index. html

21. Chuck Moore's Wonderful colorForth Programming Language and Operating System — http://www.colorforth.com/cf.htm

22. GreenArrays Inc. Download — http://www. greenarraychips.com/home/support/download-01b.html

23. EVB001 Evaluation Board — http://www. greenarraychips.com/home/support/index.html

i Надоели баннеры? Вы всегда можете отключить рекламу.