Опубликован: 01.10.2013 | Доступ: свободный | Студентов: 255 / 19 | Длительность: 24:58:00
ISBN: 978-5-9963-0223-9
Специальности: Разработчик аппаратуры
Лекция 9:

Оценка производительности и живучести МКМД-БИТ-потокового предпроцессора системы астронавигации

8.2. Потоковый алгоритм работы МКМД-бит-потокового субпроцессора слежения за центром масс астроориентира

Все рассмотренные процедуры работы канала обработки видеоизображения необходимо привести к потоковому виду, который учитывает как "непрерывность" потока входных и выходных данных, так и специфику работы МКМД-бит-потоковых субпроцессоров, которая связана с тем, что каждая потоковая слов-инструкция пользователя интерпретируется МКМД-бит-процессорной матрицей. Поэтому ее необходимо сопроводить индивидуальными средствами управления, задающими и реализующими циклы for(\overline{1, n}) и for(\overline{ 1, N}), где n и N - соответственно разрядность арифметики и количество операндов в циклически обрабатываемых потоках данных. В результате на ассемблерном уровне организации вычислений выдерживается принцип "одна инструкция - один процессор", который в каждой ассемблерной команде поддерживается своими специфическими входными и выходными интерфейсами, устройствами управления и обработки. С целью повышения отказоустойчивости и отказобезопасности МКМД-бит-потокового субпроцессорного тракта обработки видеоизображений необходимо выбрать и включить в него процедуры генерации избыточных данных и устройств обнаружения отказов темпа реального времени. В результате потоковый алгоритм работы такого многопроцессорного устройства принимает вид:

Шаг 1. Перевести поток 16-битных входных операндов из параллельного кода \{\hat{x}_{ij}\} в последовательный код \{х_{ij}^*\}. Здесь \hat{x}_{ij}, х_{ij}^* \in\{0,1\}, а перечисление потока входных данных происходит по строкам исходного изображения. Такой перечислительный процесс осуществляется внешними по отношению к субпроцессору аппаратными средствами, реализующими три вложенных цикла: For(k, For(j, For(i))), где индекс кадра обрабатываемого изображения k = \overline{1,\infty}, a j = \overline{1,128} ; i = \overline{1,128}.

Во входном интерфейсе самого МКМД-бит-потокового субпроцессора реализуется "бесконечно кратный" цикл For(i) = \overline{1,16}, который соответствует циклу перехода от параллельного кода к последовательному с использованием 16-разрядной шины данных.

Шаг 2. Заместить две верхние и две нижние строки в каждом кадре исходного изображения \{ х_{ij}^*\} тестовыми данными (рис. 8.3) по правилу: "пять единиц - три ноля", "пять единиц - три ноля" и т. д., всего 64 раза. В субпроцессоре тестовой считается та фаза вычислений, в которой в "скользящем окне" медианного фильтра объединяются две нижние строки из предыдущего кадра с двумя верхними строками из текущего кадра обрабатываемого изображения. В результате на выходе медианного фильтра будет выработано по 3 "единицы" на каждые 8 пикселей, то есть эталонная тестовая реакция канала логической обработки на этот фрагмент изображения должна равняться 48.

Расположение тест-данных на исходном изображении

Рис. 8.3. Расположение тест-данных на исходном изображении

Чтобы осуществить замещение двух верхних и двух нижних строк исходного изображения тест-данными, необходимо:

  • реализовать цикл For(i) = \overline{1,16634}, который определяется размерами обрабатываемого изображения 128*128 однобитных пикселей;
  • реализовать цикл For(i) = \overline{1,512}, который определяется размерами 4-х тестовых строк;
  • реализовать циклическую константу вида 11111000…11111000…, которая подставляется вместо текущих во время одного цикла For(i) = \overline{1,512} ;
  • задать начальную фазу поступления входных данных таким образом, чтобы цикл For(i) = \overline{1,512} совместился с двумя нижними и двумя верхними строками обрабатываемого изображения.

Шаг 3. Обработать полученное изображение медианным фильтром размером 5*5 пикселей: \tilde{x}_{rc} := med_{5\times 5}\{x_{\hat{i},\hat{j}}\}^{гс}. Здесь:

  • \hat{i},\hat{j} = \overline{1,5} - индексы элементов, соответствующие одному положению "скользящего окна";
  • индексы r, с соответствуют центральному элементу "скользящего окна" размером 5*5 пикселей, и они связаны с индексами строк и столбцов исходного изображения i, j правилом: r = i_1 + 2, а c = j_{1} + 2 , где i_1, j_{1} - координаты левого верхнего угла "скользящего окна".

В МКМД-бит-потоковых технологиях процедура "скольжения" окна размером 5*5 пикселей реализуется с помощью FIFO -регистровой линии задержки, имеющей 1 вход и 25 выходов, на которых одновременно появляются все элементы, соответствующие текущему положению "скользящего окна". Фактически такая линия^ задержки реализует 5 вложенных циклов: For(k,For(j,For(i,For(\hat{j},For(\hat{i}))))),где k=\overline{1,\infty} ; j=\overline{1,128} ; i=\overline{1,128} ; \hat{j}=\overline{1,5} ; \hat{i}=\overline{1,5}.

Обычно медианная фильтрация выполняется через две логические процедуры:

  • упорядочение элементов x_{\hat{i},\hat{j}} \in \{x_{\hat{i},\hat{j}}\}^{rc} по возрастанию;
  • присвоение \tilde{x}_{rc} :=med_{5\times 5} \{x_{\hat{i},\hat{j}}\}^{rc}, которое соответствует выбору центрального элемента в упорядоченной последовательности \{x_{\hat{i},\hat{j}}\}^{rc}.

Но в данном случае мы имеем дело с бинарным изображением, и поэтому медианную фильтрацию можно выполнить через две арифметико-логические процедуры:

B_{rc}=\sum\limits_{\hat{i},\hat{j}}x_{\hat{i},\hat{j}}^{rc} 
\text{ и } 
y_{rc} =
\begin{cases}
1, & \text{ если } B_{rc} \ge 13, \\
0, & \text{ если } B_{rc} < 13.
\end{cases}

В МКМД-бит-потоковых технологиях невозможно непосредственно просуммировать однобитный поток данных, так как "единица переноса" сохраняется внутри бит-процессора (БП) и учитывается на следующем такте суммирования (см. рис. 3.2 раздела 3.1). Поэтому приходится:

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

Для суммирования по этой схеме необходимо реализовать (в данном случае) 6 вложенных циклов: For(с_{128}, For(с_{32}, For(с_{16}, For(с_{8}, For(с, For(с_{2})))))), из которых 5 нижних используются для формирования 32-битных операндов, обеспечивающих нулевую погрешность вычислений взвешенных сумм в последующих процедурах, а с_{128} = \overline{1,128} ; с_{32} = \overline{1,32} ; с_{16} = \overline{1,16} ; с_{8} = \overline{1,8} ; с_{4} = \overline{1,4} ; с_{2} = \overline{1,2}.

Шаг 4. Обнулить реакцию медианного фильтра на паразитные взаимодействия элементов "скользящего окна" при его переходе со строки на строку (со столбца на столбец):

y_{rc} =y_{rc }\bigwedge\limits_{r=1}^{128}{d_r},

где d_r = 1, если 1< r< 127, и d_r = 1 в противном случае.

Для выполнения этого шага потокового алгоритма необходимо:

  • задать цикл обработки строки For(r) = \overline{1,128} ;
  • сформировать циклическую константу вида: 4 бита - "нули" и остальные 124 бита - "единицы".

Шаг 5. Составить гистограммы по строкам \{y_{r}\} или по столбцам \{y_{c}\},

где

y_{r} = \sum\limits_{c=1}^{124}{ y_{rc }},
а y_{с} = \sum\limits_{c=1}^{124}{ y_{rc }}

Для реализации этих выражений необходимо:

  • задать цикл обработки строки For(r) = \overline{1,16384} ;
  • сформировать циклическую константу вида: 32 "единицы" и 32 "нуля";
  • сформировать циклическую константу вида: 32 бита - "единицы" и 16352 бита - "нули", а также ее инверсию для управления циклом накопления.

Шаг 6. Обработать полученные гистограммы 2-элементным "скользящим окном": a_{r} = (y_{r} + y_{r+1})/2 или a = (y_{c} + y_{c+1})/2.

Данная процедура выполняется "непрерывно" и не налагает каких-либо ограничений на процедуру парного суммирования.

Шаг 7. Сравнить результат обработки первых и последних двух тестовых строк кадра с эталонной реакцией:

DT1 =
\begin{cases}
0, & \text{ если } a_{1} = 96, \\
1, & \text{ если } a_{1} \ne 96.
\end{cases}

Для выполнения этого шага потокового алгоритма необходимы те же управляющие процедуры, что и на шаге 6.

Шаг 8. Обнулить реакцию 2-элементного "скользящего окна" на паразитные взаимодействия элементов при переходе от одного кадра обрабатываемого изображения к другому:

a_{r} =a_{c}\bigwedge\limits_{c=1}^{128}{d_c} и a_{c} =a_{r}\bigwedge\limits_{r=1}^{128}{d_r}

где d_r, d_c = 1, если r, c \succ 1, и d_r, d_c = 0, если r, c = 1

Для выполнения этого шага потокового алгоритма необходимо выполнить те же управляющие процедуры, что и на шаге 6.

Шаг 9. Выполнить "свертку" вектор-столбца \{a_r\} и вектор-строки \{a_c\} по правилу:

a_{r}^* =\sum\limits_{r=1}^{127}{a_r}*w_r
\text{ и }
a_{c}^* =\sum\limits_{c=1}^{127}{a_c}*w_c

Здесь w_{r},w_{c} =\overline{1,127} - весовые коэффициенты, соответствующие индексу элемента вектор-столбца или элемента вектор-строки - w_r = r и w_c = c соответственно.

Для выполнения этого шага потокового алгоритма необходимо выполнить те же управляющие процедуры, что и на шаге 6.

Шаг 10. Вычислить суммарную "яркость" обрабатываемого изображения:

a_{r}^{\sim}=\sum\limits_{r=1}^{127}{a_r}   \text{ и/или }
a_{c}^{\sim}=\sum\limits_{c=1}^{127}{a_c}

Для выполнения этого шага потокового алгоритма необходимо выполнить те же управляющие процедуры, что и на шаге 6.

Шаг 11. Определить координаты (x^0_i , x^0_j) центра масс изображения по отношению к его верхнему левому углу: х^0_i = а_{r}^*/ а^{\sim}_r и х^0_j = а_{c}^*/ а^{\sim}_c.

Шаг 12. Определить координаты (|x_{i}^0|, |x_j^0|) центра масс изображения по отношению к его центру: |x_i^0| = | x_i^0 - 64| + 0,5 и |x_j^0| = | x_j^0 - 64| + 0,5 ; sign|x_i^0| = sign(x_i^0 - 64) ; sign|x_j^0| = sign(x_j^0 - 64).

Шаг 13. Продублировать вычисления на шагах 8-11 с использованием дополнительного комплекта аппаратуры и сравнить результат с основным:

DT2 =
\begin{cases}
0, & \text{ если } |x_i^0|^{(1)} = |x_i^0|^{(2)}, \\
1, & \text{ если } |x_i^0|^{(1)} \ne |x_i^0|^{(2)}.
\end{cases}

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

Из приведенных данных видно, что практически в каждой потоковой процедуре необходимо определить параметры циклов for, которые необходимо заложить в управляющие конструкции, специфичные для каждой словинструкции. Именно индивидуальные процедуры управления "по счетчику" (циклы for ) отличают МКМД-бит-потоковые субпроцессоры от остальных программируемых средств вычислительной техники. Объясняется это тем, что это класс субпроцессоров работает в режиме интерпретации, а не компиляции прикладных программ. В традиционных архитектурах режим интерпретации значительно проигрывает во времени режиму компиляции, так как в этом случае все аппаратные ресурсы процессора последовательно предоставляются каждой инициализированной слов-инструкции, что вынуждает перенастраивать процессор на параметры каждой инициализированной инструкции ассемблера. В случае бит-потоковых субпроцессоров режим интерпретации не сопряжен с большими временными издержками, так как все управляющие и интерфейсные процедуры реализуются аппарат-но и включают в себя параметры циклов управления. Это приводит к росту аппаратных затрат на средства управления вычислительным процессом, но обеспечивает максимальную "мобильность" микропрограммных модулей на бит-матрице в процессе парирования множественных карт отказов.

Евгений Акимов
Евгений Акимов

Добрый день!

 

Скажите, пожалуйста,планируется ли продолжение курсов по нанотехнологиям?

Спасибо,

Евгений