Опубликован: 01.10.2013 | Уровень: для всех | Доступ: платный
Лекция 7:

Инструментальные платформы МКМД-бит-потоковых вычислительных технологий

Инструментальное средство MatrixDesigner реализовано в среде Microsoft Visual Studio 2005 и написано на языке C#.

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

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

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

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

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

Рассмотрим преобразования координат размещения бит-команд в поток-операторе пользователя (бит-процессорном устройстве). Здесь i и j - координаты бит-процессора. В общем случае его координаты после проведения аффинных преобразований изменятся на \tilde{i} и \tilde{j}, i = \overline{1,i_m}, j = \overline{1,j_m}. Алгоритмы вычисления нового положения каждого бит-процессора:

  1. Поворот на +90o: \tilde{i} = j,\,\tilde{j}=i_{m} -(i-1).
  2. Поворот на -90o: \tilde{i} = j_{m} - (j -1),\, j = i.
  3. Вращение вдоль оси Х: \tilde{i} = i_{m} - (i - 1),\, \tilde{j} = j.
  4. Вращение вдоль оси Y: \tilde{i} = i_{m},\, \tilde{j} = j_m -(j-1).
  5. Вращение вдоль главной диагонали: \tilde{i} = j,\, \tilde{j} = i
  6. Вращение вдоль побочной диагонали: \tilde{i} = j_{m} - (j - 1),\, \tilde{j} = i_m - (i - 1).

В каждом из рассмотренных выше случаев аффинных преобразований есть необходимость изменения содержимого регистра каждого бит-процессора. Преобразование кодов бит-команд производится следующим образом ( R - регистр бит-процессора, \tilde{R} - значение регистра бит-процессора после преобразования):

  1. Поворот на +90o:
    \tilde{R} = \tilde{R}_1 \lor \tilde{R}_{2}, 
 \tilde{R}_1 = (R_1 + B_2) \land B_1, 
 \tilde{R}_1 = (R_2 + B_3) \land \overline{B}_1, \\
 R_1 = R \land B_1, R_2 = R \land \overline{B}_1

    где B_{1} = 1111.0011.0011.0011;\\
B_{2} = 0000.0001.0001.0001; \\
B_{3}(T) = B_{2} (T+2) = 0000.0100.0100.0100.

  2. 2. Поворот на -90o: то же, что и на +90o, только B _{2} = 0000.0011.0011.0011; \\
B _{3} = 0000.1100.1100.1100.
  3. Вращение вдоль оси Х: \tilde{B}_4 = R\land B_4,\tilde{R} = R(T)\oplus\tilde{B}_4(T+1), где B_{4}(T) = B_2(T) \lor B_2(T+2) = 0000.0101.0101.0101.
  4. Вращение вдоль оси Y: \tilde{В}_{5} = \overline{R} \land В_{4}, \tilde{R} = R(T) \oplus \tilde{В}_{5}(Т+1).
  5. Вращение вдоль главной диагонали: \tilde{R} = R\oplus B_{4}.
  6. Вращение вдоль побочной диагонали: \tilde{R} = R\oplus B_{5}, где В_{5} = 0000.1111.1111.1111.

Входы и выходы устройства в нотации MatrixDesigner изображаются в виде треугольников. Порт устройства является объектом, свойство которого пользователь может увидеть в таблице свойств выбранного объекта. Чтобы обеспечить эту возможность, необходим алгоритм определения принадлежности точки треугольнику. На вход такого алгоритма подаются координаты вершин треугольника в прямоугольной системе координат и координаты точки, а выходом алгоритма является логическое значение true, если точка принадлежит треугольнику, и false, если точка лежит за пределами треугольника. Эту проверку осуществляет метод Triangle::IsPointInTriangle. Алгоритм следующий:

  1. Если тестируемая точка совпадает с одной из вершин треугольника, вернуть true, иначе перейти к пункту 2.
  2. Найти уравнение прямой для произвольной стороны треугольника (вершины P 1 и P 2) L 1.
  3. Найти уравнение прямой для отрезка между вершиной треугольника, которая не принадлежит L 1 ( P 3), и точкой, где щелкнула мышь ( P 4)( L 2).
  4. Найти точку пересечения L 1 и L 2 ( P 5). Если прямые параллельны, вернуть false, иначе перейти к пункту 5.
  5. Найти расстояния между P 1 и P 2, между P 1 и P 5 и между P 2 и P 5 и, используя неравенство треугольника, проверить, что точка P 5 лежит на отрезке от P 1 до P 2. Если проверка успешна, перейти к пункту 6, иначе вернуть false.
  6. Найти расстояния между P 3 и P 5, между P 3 и P 4 и между P 5 и P 4. Аналогично, используя неравенство треугольника, проверить, что проверяемая точка лежит на отрезке от P 3 до P 5. Если это условие выполняется, то точка лежит внутри треугольника (вернуть true ), иначе вернуть false.

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

  1. 1 Рассчитать, какие бит-процессоры из бит-матрицы будут видны на экране.
  2. Заполнить матрицу цветом фона.
  3. Найти смещение сетки бит-процессоров от левого верхнего угла элемента управления.
  4. С помощью данных, полученных на шаге 1, найти список операционных устройств, которые видны на экране.
  5. Для каждого устройства из списка выполнить процедуру рисования. Она заключается в изображении прямоугольника (цвет которого определяется устройством), и рисовании портов (входов и выходов).
  6. Нарисовать сетку бит-процессоров.
  7. Если есть устройства, выбранные пользователем, то нарисовать рамку выделения вокруг них.
  8. Нарисовать курсор вставки.

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

и быстро, применен следующий подход. Создается таблица размещения устройств ( Location Table ), которая представляет собой двумерный массив целых чисел, размер которого равен размеру бит-матрицы в бит-процессорах. Значение каждого элемента массива с координатами [i, j] равно номеру процессорного устройства в списке процессорных устройств матрицы, которое "перекрывает" позицию [i, j]. Если несколько устройств перекрывают позицию [i, j] (то есть устройства накладываются друг на друга), то значение элемента таблицы размещения устройств равно большему номеру устройства. Если ни одно устройство не находится в указанной позиции, то Location Table[i, j] равно минус один. Таким образом, когда пользователь щелкает мышью, программа определяет позицию бит-процессора, на который указал пользователь, и по значению элемента из таблицы размещения устройств находит номер выбранного устройства (или определяет факт того, что щелчок пришелся по "незанятой" части бит-матрицы).

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

Добрый день!

 

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

Спасибо,

Евгений

 

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