Главная / Искусственный интеллект / Компьютеры для искусственного интеллекта / Параллелизм - способ повышения производительности компьютеров

Параллелизм - способ повышения производительности компьютеров

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

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

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

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

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

Типичным примером программной разработки, осуществленной без серьезного изучения возможностей аппаратуры, могут служить предложенные в последнее время параллельные версии языка Лисп. Разработчики выявили те места в лисповских программах, в которых использование нескольких процессоров могло бы оказаться полезным, однако они не учли дополнительных накладных расходов. Обычно предполагается, что несколько процессоров совместно используют большую главную память, где хранятся списки и другие объекты языка Лисп. Между тем такое предположение правомерно лишь при условии, что обращение к памяти осуществляется бесконечно быстро, а это так же невероятно, как и допущение о бесконечно быстрой работе самого процессора. Дело в том, что один современный лисповский процессор может работать гораздо быстрее, чем осуществляется обслуживание его системой памяти. Поэтому добавление новых процессоров не приведет к увеличению производительности.

Разработчики параллельных версий Лиспа но ряду причин не учли этого факта. Одна из причин, возможно, состоит в том, что в существующих версиях Лиспа для процессора 68000 память не является ограничением. Другая причина связана с возможностью использовать кэш-память, что позволяет сделать производительность памяти менее критичной. Однако даже при использовании кэш-памяти количество добавленных процессоров не может быть безграничным: при эффективности поиска, достигающей 90%, в принципе удается обеспечить одновременную работу лишь 10 процессоров.

Что можно сказать об архитектуре, предполагающей использование тысяч процессоров? Эксперименты показывают» что один процессор способен работать значительно быстрее, чем позволяет память: чтобы процессор мог работать в полную силу, приходится использовать кэш-память. Это означает, что пока процессоры работают значительно быстрее, чем память; поэтому обмен данными между процессорами (если их достаточно много) должен происходить по специальным каналам связи. Другими словами, архитектура типа MIMD (архитектура с множеством потоков команд и множеством потоков данных) с единой общей памятью не пригодна для параллельных вычислений. Это важно учитывать в некоторых методах построения искусственного интеллекта, например в методе «доски обьявленин- или систем продукции, которые — в их современном виде — используют память для связи между различными задачами.

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

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