В последнее время интерес к теме параллельной обработки данных существенно вырос в связи с массовым распространением многоядерных процессоров. Можно по-разному относиться к новой архитектуре (например, классик computer science Дональд Кнут в одном из своих интервью высказался о ней резко отрицательно - см. ссылки на
русский перевод или на
английский оригинал),
но когда процессоры во всех компьютерах и телефонах многоядерные, игнорировать это нельзя. Следовательно, важно разобраться в том, как работают параллельные вычисления и затем обязательно сделать выводы о том, когда это действительно позволяет получить выигрыш по времени, а когда нет.
Система S9PU может помочь разобраться в проблеме с минимальными усилиями. Дело в том, что она крайне проста и понятна. А ее реализация в виде учебной программы позволяет наглядно увидеть, что и как происходит, когда несколько устройств пытаются считать задачу совместно. Сложную задачу решить не получится, но, если хорошо подумать, то и на простых примерах удается показать главные идеи. К тому же в программе вы легко можете экспериментировать и выбирать нужное вам количество вычислителей, а попробуйте-ка назначить число ядер по своему усмотрению!
Итак, знакомьтесь - перед вами система S9PU.
Устройство модели
Дается краткое описание устройства модели и объясняются принципы взаимодействия параллельных Удвоителей (ПУ). Подчеркивается необходимость в главном (управляющем) ПУ, который в модели, по сути, заменяет многопроцессорную операционную систему.
Система команд
Приводится полная таблица операций для всех Удвоителей, в том числе отдельно для главного (последний содержит ряд дополнительных команд). Дано краткое описание, как работают команды, а в конце приведены примеры простейших программ.
Алгоритм обмена между ПУ
Это очень важный раздел, поскольку обмен данными - это одно из характерных свойств параллельной системы. Главная трудность здесь заключается в том, что из-за неодновременности выхода на обмен одному из ПУ, как правило, приходится ждать, пока станет готов другой.
Пример: одновременные расчеты по нескольким программам
Здесь показан пример, когда система из нескольких вычислительных элементов параллельно считает по нескольким программам (так называемый параллелизм по задачам). Мы имеем дело с простейшей моделью многопроцессорной операционной системы. Из результатов следует, что реальный выигрыш по времени получается только для задач с большим объемом вычислений.
Пример: параллельная обработка данных одной задачи
А это пример, когда с помощью параллельных вычислений решается задача, разбитая на несколько однотипных подзадач (параллелизм по данным). Задача разбирается очень подробно: обсуждается текст программы, построена временная диаграмма ее выполнения, показано, как вывести формулы для величины ускорения от параллельных вычислений. Тут тоже отчетливо видно, что чем больший объем вычислений приходится на один Удвоитель, тем лучше.
Демонстрация эффективности параллельных вычислений по формуле
В некоторых случаях параллельные вычисления могут существенно ускорить получение результата. На примере специально подобранной формулы показано, как приблизится к эффективной параллельной программе для S9PU. Рекомендованные приемы могут оказаться полезными и для других задач.
Литература
Дополнительные детали работы с системой опубликованы в статьях. Ссылки на них приводятся на данной страничке. Где возможно, даются URL электронных версий.
Программная реализация
Программы для S9PU можно опробовать в действии. Для этого посетите указанную выше ссылку и загрузите программную поддержку. Запустите программу и Вы получите на своем компьютере виртуальную модель параллельной системы.
Правила записи программ
Чтобы писать свои программы для S9PU надо знать определенные правила. Они несложные. В конце странички приведен пример оформления одной из программ, входящих в состав прилагаемого архива задач.