Uirh : другие произведения.

Постановка задачи

Самиздат: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Обзоры] [Помощь|Техвопросы]
Ссылки:
Школа кожевенного мастерства: сумки, ремни своими руками
 Ваша оценка:
  • Аннотация:
    /В решеньи задачи по общему мнению/ вся соль/ но я полагаю иначе:/ искуство в том/ чтобы зная решение/ найти подходящую задачу/(Питер Хэйн). Вот тут примерно то же самое - сия "постановка задачи" сочинена (вроде бы в 96 - 97 году) когда всё было уже давным давно придумано и описано.

   Ставится задача - отыскать возможность создания не просто высокопараллельных, но "расширяемых" вычислительных систем общего назначения, тоесть с наращиваемой производительностью. Наращиваемой "аддитивным" способом - путем добавления новых элементов (модулей). Ясно, что эти модули должны быть все одинаковые, или их номенклатура должна быть крайне небольшой. (Тогда возможно крупносерийное производство и как результат - низкая стоимость.) Расширяемость должна быть "динамической" - добавление (и удаление) модулей не должно требовать перекомпиляции программ. Это с одной стороны позволит говорить о "горячем" изменении конфигурации, а с другой - систему можно сделать живучей за счет взаиморезервирования модулей. И главное, ради чего все это затевается - расширяемость должна быть по возможности не ограниченной. При всем при этом важно не потерять что имеем - надо чтобы сохранилась возможность такую систему программировать. Кроме того желательно чтобы подобную систему можно было реализовать на существующей элементной базе и с помощью существующих технологий или на элементной базе и с помощью технологий самого ближайшего будущего.
  
   Рассмотрим что известно на настоящий момент и каким из перечисленных требований оно не удовлетворяет.
   - Нейронные системы, в частности мозг животных и человека. Высокопараллельны, чрезвычайно живучи и видимо расширяемы, но нет подходящей элементной базы. И кто бы нам объяснил, как их программировать...
   - Транспьютеры и подобные им системы - расширяемы "статически", следовательно не живучи. Но включают полезный принцип локальности межмодульных связей.
   - Векторные, конвейерные, систолические, суперскалярные системы, системы с распараллеливанием на уровне элементарных операций не подходят по определению. Тоесть они могут быть использованы как элементы рассматриваемой вычислительной системы, но требуется что то еще.
   - Просто многопроцессорные вычислительные системы - это в общем почти то, что нужно, но все существующие содержат ограниченное количество процессоров. Например МВК Эльбрус - до 16 штук. Это практически максимум.
  
   Анализируя причины, ограничивающие количество процессоров в вычислительной системе не трудно прийти к выводу, что основная - наличие общих ресурсов. В частности - общей для всех процессоров оперативной памяти. Если даже память делится на множество модулей (что обычно и бывает), приходится вводить средство, обеспечивающее доступ любого процессора к каждому модулю памяти, которое и становится узким местом. Не менее дорого стоит средство связи каждого процессора с каждым. От обоих необходимо отказаться в пользу локальной доступности памяти и локальных межпроцессорных связей. Однако это потребует, как минимум, пересмотра традиционной техники программирования.
  
   Второй серьезной трудностью на пути построения "очень многопроцессорных" вычислительных систем является необходимость загрузить работой все это множество процессоров. Сознательное написание программы, включающей сотни параллельных ветвей затруднительно. Автоматическое распараллеливание программы, написанной в рамках последовательной парадигмы - тоже не фонтан. Выход - в отыскании такого способа (парадигмы) программирования, который принуждал бы не скрывать, а напротив выявлять и существенно использовать естественную параллельность алгоритма. Кроме того, удобно было бы подобрать такой круг задач, алгоритмы решения которых обладали бы по возможности большей естественной параллельностью. Пожалуй, таким свойством обладают задачи управления сложными техническими объектами в реальной обстановке и масштабе времени.
  
   Подходящая парадигма существует и известна под названием "объектной". Она предполагает преобразование всей совокупности данных в набор "объектов", совокупности программ - в набор "методов". Объекты делятся на классы, каждый метод приписывается к одному из классов. Вводится понятие абстрактной операции, для чего связывание данных и программы откладывается на момент выполнения и совмещается с передачей управления подпрограмме (методу). Это комбинированное действие называется "посылкой сообщения" и отличается от обычного вызова подпрограммы тем что конкретная подпрограмма заранее не известна (известен только ее "смысл"), а выбирается среди методов того класса, к которому принадлежит объект-адресат. Для нас важно то обстоятельство, что методу для успешной работы требуется (разрешен!) доступ только к тому объекту, к которому он "вызван", и все. Для выполнения манипуляций с другими объектами он обязан посылать им сообщения. Интересно так же и то, что посылку сообщения не обязательно трактовать как вызов подпрограммы, а можно - как порождение процесса, работающего асинхронно по отношению к процессу - источнику сообщения (до тех пор, пока ему не понадобится "результат"). Метод, в отличии от подпрограммы, практически полностью автономен, тоесть не должен иметь никаких "паразитных" информационных связей с точкой вызова.
  
   Таким образом объектная парадигма с одной стороны допускает порождение множества параллельных процессов, а с другой дает возможность ограничить пространство памяти, доступной процессу, но требует возможность доставки сообщения к любому объекту. Последнее вполне реализуемо даже при отсутствии связей модулей системы типа "каждый с каждым", так как посылка сообщения - операция гораздо более редкая нежели обращение программы к ячейке оперативной памяти.
  
   Высокопараллельная, расширяемая, живучая, и т.п. очень многопроцессорная вычислительная система может быть создана путем аппаратной или микропрограммной реализации элементов объектной парадигмы, таких как "объект", "метод", "сообщение", "процесс", "класс"... Сама система должна представлять из себя множество модулей, расположенных в узлах некоторой решетки (например плоской гексагональной). Предполагается два типа модулей - процессорные и интерфейсные. Последние служат для подключения к вычислительной системе внешних устройств и содержат соответствующие интерфейсные схемы. Процессорные модули все одинаковые. Каждый из них содержит процессор, запоминающие устройства разных типов (в том числе энергонезависимое) и устройство управления памятью. (Возможно это специализированный процессор.) Кроме того каждый модуль содержит устройство межмодульной связи (тоже специализированный процессор). Они образуют среду передачи сообщений. Электричесски модуль связан только с ближайшими соседями.
  
   Информация, организованная в объекты, распределена по запоминающим устройствам модулей. (Метод и процесс - тоже разновидности объектов.) Каждый объект снабжен уникальным в пределах системы именем, присваиваемым ему в момент создания. Оно используется для поиска объекта, производимого волновым методом. В результате удачного поиска устанавливается "канал". Посылка сообщения требует как минимум три акта поиска (объект, класс, метод). В результате удачной посылки сообщения порождается процесс, для чего объект и метод сводятся в одно место. (Чаще метод к объекту, так как будучи реентерабельным и следовательно не изменяемым допускает создание копий. Объект же обязан быть уникальным.) Каналы сохраняются до завершения процесса (или явного закрытия) и служат для возвращения результата и межпроцессной синхронизации путем обмена по ним сообщениями. Любое внешнее устройство выглядит "активным" объектом. От "пассивных" (т.е. обычных) объектов отличается тем, что самостоятельно реагирует на сообщения - интерфейс производит управляющие воздействия на устройство. (Для пассивного - ищется подходящий метод и запускается процесс.) Кроме того способно самостоятельно посылать сообщения, что заменяет систему прерываний. (Другой вид активных объектов - процессы.)
  
   Подобная вычислительная система свободна от указанных выше ограничений и способна включать до 10**2 - 10**3 модулей. Единственный глобальный "ресурс" - пространство физических номеров модулей, используемых для порождения уникальных имен объектов, практически не лимитирует размеры системы. Размеры системы ограничиваются производительностью подсистемы поиска объектов, встроенной в каждый процессорный модуль: количество "волн поиска" проходящих через модуль в единицу времени примерно пропорционально количеству модулей в системе (хотя и существенно зависит от способа распределения данных каждой задачи по пространству системы). Когда оно достигнет предела производительности - скорость распространения волн поиска начнет снижаться, понижая быстродействие всей системы в целом.
 Ваша оценка:

Связаться с программистом сайта.

Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души" М.Николаев "Вторжение на Землю"

Как попасть в этoт список

Кожевенное мастерство | Сайт "Художники" | Доска об'явлений "Книги"