Опубликован: 01.10.2013 | Уровень: для всех | Доступ: платный
Лекция 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 ) отличают МКМД-бит-потоковые субпроцессоры от остальных программируемых средств вычислительной техники. Объясняется это тем, что это класс субпроцессоров работает в режиме интерпретации, а не компиляции прикладных программ. В традиционных архитектурах режим интерпретации значительно проигрывает во времени режиму компиляции, так как в этом случае все аппаратные ресурсы процессора последовательно предоставляются каждой инициализированной слов-инструкции, что вынуждает перенастраивать процессор на параметры каждой инициализированной инструкции ассемблера. В случае бит-потоковых субпроцессоров режим интерпретации не сопряжен с большими временными издержками, так как все управляющие и интерфейсные процедуры реализуются аппарат-но и включают в себя параметры циклов управления. Это приводит к росту аппаратных затрат на средства управления вычислительным процессом, но обеспечивает максимальную "мобильность" микропрограммных модулей на бит-матрице в процессе парирования множественных карт отказов.

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

Добрый день!

 

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

Спасибо,

Евгений

 

Nozimjon Fayziev
Nozimjon Fayziev
Таджикистан, Душанбе
Анна Волкова
Анна Волкова
Россия, г. Новосибирск