misle.ru страница 1
скачать файл
Подходы к программированию для вычислительных систем с распределенными ресурсами.

Толкачёв А.И.


Традиционная однопроцессорная архитектура и реконфигурируемые архитектуры.


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

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

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

Классы архитектур с параллельным исполнением инструкций.


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

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

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

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

До недавнего времени выделялись два класса архитектур процессоров, допускающих параллельное исполнение инструкций. Это суперскалярные процессоры и VLIW - процессоры.

Программа для суперскалярного процессора не содержит явной информации о параллелизме. В процессе исполнения программы на аппаратуру возлагается задача составления расписания инструкций и распределения ресурсов.

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

Программирование для суперскалярного процессора мало отличается или вообще не отличается от программирования для обычного последовательного процессора. Локальная оптимизация на уровне отдельных инструкций обычно выполняется компилятором. На компилятор для VLIW процессоров возлагается более сложная задача, состоящая в выявлении возможности распараллеливания инструкций и распределения ресурсов.

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

Недостаток VLIW процессоров заключается в том, что в программе для них жестко определяются группы команд, которые должны выполняться параллельно. Это может значительно ограничить эффективность использования аппаратных ресурсов, поскольку расписание выполняемых команд не может динамически меняться в зависимости от обрабатываемых данных. Распараллеливаются лишь те команды, которые всегда могут выполняться одновременно независимо от исходных данных. Однако следует отметить, что за счет простоты архитектуры VLIW процессоры обычно могут одновременно выполнять большее количество команд, чем суперскалярные процессоры, использующее такие же аппаратные ресурсы.

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

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

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

Существующие средства для программирования систем с распределенными ресурсами.


Существует множество систем для создания программного обеспечения для систем с распределенными ресурсами. Можно выделить несколько классов средств разработки. Самыми многочисленными являются системы, представляющие собой библиотеки для некоторого языка программирования высокого уровня. Они, как правило, используются при программировании для систем, состоящих из множества параллельно работающих компьютеров, и содержат функции для синхронизации процессов и передачи данных между ними. Вся работа по распараллеливанию алгоритма возлагается на программиста. Самой распространенной системой такого типа является MPI (Message Passing Interface, интерфейс для передачи сообщений). Существуют реализации этой системы для множества языков программирования. Идея программирования с использованием таких систем обычно заключается в том, что имеется множество узлов, на которых исполняются процессы, взаимодействующие друг с другом с помощью передаваемых сообщений. На разных узлах могут исполняться процессы как с одинаковыми исходными кодами, так и с различными. Создание и завершение процессов в процессе работы программы не допускается. Каждый процесс работает в своем адресном пространстве, общая память не поддерживается.

Другая технология – OpenMP, может использоваться в многопроцессорных системах с общей памятью. Идея заключается в том, что определенные фрагменты программы могут быть объявлены параллельными, и только они могут выполняться одновременно. Всегда имеется основной процесс, который создает параллельные и ожидает окончания их работы. Параллельные процессы могут использовать глобальные данные, разделяемые между всеми процессами, и локальные для данного процесса. Система OpenMP реализована для языков программирования С++, С и Fortran и поддерживается операционными системами Windows NT и Unix.

Из систем, использующих расширения языков программирования, рассмотрим mpC. Язык mpC является расширением языка C для программирования неоднородных сетей. Программа на mpC представляет собой описание множества процессов, взаимодействующих с помощью неявной передачи сообщений. Распределение процессов между физическими процессорами происходит автоматически в процессе исполнения программы. Эта система позволяет программировать в терминах сети виртуальных процессоров, не заботясь о количестве и производительности реальных процессоров и распределении процессов между ними.

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

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

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


Литература

  1. В.В. Воеводин, Вл.В.Воеводин Параллельные вычисления. – СПб.: БВХ-Петербург, 2002.

  2. Толкачёв А.И. Поиск алгоритмических конструкций, допускающих параллельное выполнение // Новые математические методы и компьютерные технологии в проектировании, производстве и научных исследованиях, Материалы V Республиканской научной конференции студентов и аспирантов 18-20 марта 2002г., с. 220-221.

  3. Толкачёв А.И. Оптимизация кода для микроконтроллеров с параллельной архитектурой // Творчество молодых 2002. Сборник научных работ студентов и аспирантов Учреждения образования "Гомельский государственный университет имени Франциска Скорины", Гомель, 2002, с.89-90.
скачать файл



Смотрите также: