Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ураков А.Р. Технологические особенности проектирования вычислительной техники.doc
Скачиваний:
34
Добавлен:
02.05.2014
Размер:
839.17 Кб
Скачать

4.8. Резюме

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

  • устройство управления;

  • арифметико-логическое устройство;

  • регистр состояния;

  • регистры общего назначения и/или аккумулятор;

  • счетчик команд;

  • регистр команды;

  • регистр адреса.

5. Развитие процессоров. Параллельные вычисления

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

5.1. Пути повышения производительности

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

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

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

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

Теперь, с учетом этих целей, рассмотрим пути повышения производительности. Существуют следующие способы:

  1. уменьшение времени переключения;

  2. увеличение разрядности;

  3. усложнение системы команд;

  4. уменьшение количества тактов на операцию;

  5. параллельная обработка.

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

Второй способ – увеличение разрядности. Ранее в пособии говорилось о выборе разрядности процессора. Что дает увеличение разрядности с точки зрения производительности? В некоторых случаях потребуется усложнить систему команд – это мы отнесем к другому способу и рассмотрим ниже. Если мы просто увеличиваем разрядность, принципиально не изменяя систему команд, это не всегда может дать ожидаемый эффект. Например, за одну операцию мы сможем обработать число в два раза большей разрядности: неN, а 2N, в чем будет заключаться рост производительности процессора?

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

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

Как мы видим, увеличение разрядности приносит хороший эффект только когда обрабатываемые числа имеют соответствующую разрядность. Рассмотрим типичные разрядности микропроцессоров: 8, 16 и 32. 8 разрядов позволяют работать, например, с целыми числами от 0 до 255. Это очень мало, таким набором чисел редко удается ограничиться на практике, поэтому переход от 8 к 16 разрядам произошел очень быстро (т.е. соответствующие программы были написаны очень быстро) и дал очень сильный общий рост производительности практически на любых задачах. 16 разрядов позволяют работать с целыми числами от 0 до 65535. Задач, которые могут обойтись этим набором чисел уже довольно много. В более сложных задачах существует большое число подзадач, где этих чисел также достаточно. Поэтому переход от 16 разрядов к 32 был не таким быстрым (создание новых программ растянулось на десятилетие, причем, во многих программах не требовались 32 разрядные данные, но программы переписывались из соображений совместимости), соответственно, эффект был получен далеко не сразу. 32 разряда позволяют работать с целыми числами от 0 до 4 294 967 295. Почти во всех практических задачах можно обойтись этим набором чисел, поэтому переход к 64 разрядам большинству пользователей не даст никакого эффекта.

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

Усложнение системы команд.

Как было сказано в предыдущей главе, процессор будет работоспособным, если реализовать выполнение следующих команд: сложение; сдвиг; инверсия; логическое умножение; команда загрузки данных (из памяти или устройств ввода/вывода в аккумулятор); команда выгрузки данных (из аккумулятора в память или устройства ввода/вывода); команда внутренней пересылки (из регистра в аккумулятор и наоборот); команда передачи управления (по условию).

Любой требуемый алгоритм, затратив определенные усилия, можно свести к набору этих команд. Однако большие усилия будут противоречить критерию «в» (см. начало главы) – приведут к неоправданно большим срокам создания прикладных программ. Следовательно, набор команд должен быть удобным для программирования – это значит к минимальному набору следует добавить команды, которые упростят написание программ, но если добавить все команды, которые мы сможем придумать, может не хватить элементов переключения на кристалле.

По какому принципу происходит добавление? Есть команды более и менее нужные, есть команды, которые добавить легко, т.е. их реализация требуют мало элементов переключения и есть те, которые добавить трудно. Условно и грубо команды можно разделить на 4 группы: 1) которые очень необходимы и легко реализуемы; 2) которые очень необходимы и трудно реализуемы; 3) которые мало необходимы и легко реализуемы; 4) которые мало необходимы и трудно реализуемы. Самое простое правило: команды первой группы реализовать в первую очередь, четвертой группы в последнюю очередь или не реализовать вообще.

В каком порядке выбирать команды из групп 2 и 3? Кажется очевидным следующий способ: выбрать наиболее важные команды из группы два, использовав большую долю элементов переключения, а оставшиеся элементы переключения потратить на команды из группы три. К сожалению, на практике все усложняется еще и тем, что команды при их использовании в программах дополняют друг друга или даже зависят друг от друга. Это значит, например, следующее: если реализовывать некую команду А, придется реализовывать команды B,CиD, без которых использование командыAне имеет смысла.

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

Для чего еще требуется усложнять систему команд? Процессор должен управлять целым набором подчиненных ему ресурсов, как внутренних – регистры, так и внешних – память и устройства ввода/вывода. По мере увеличения производительности нашего процессора ему требуется все больше данных для обработки. Это значит, что растет объем адресуемой памяти, усложняются устройства ввода/вывода, значит усложняются методы управления ими, в процессоре появляются новые регистры и, как результат, требуются новые команды. С другой стороны, повышаются требования к надежности как самого процессора, так и надежности программного обеспечения. Это опять-таки означает появление новых регистров и новых команд. Как мы видим, усложнение системы команд на первых этапах развития процессоров – обязательное явление и соответствует всем трем целям, заявленным нами в начале главы.

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

Далее наступит момент когда все команды, необходимые для быстрого удобного программирования, будут реализованы. Система команд будет достаточно хорошо изучена и освоена программистами. Какие-то попытки ее изменения будет сильно задерживать разработку программ, а значит противоречить цели «в». В идеальном случае программистам ничего не надо осваивать заново, потому что новая система команд совпадает с некоторой, уже хорошо известной. К сожалению, такое бывает далеко не всегда, потому что если некая система команд хорошо им известна, значит она создавалась достаточно давно и возможно имеет некоторые недостатки (например, отсутствие важных операций), которые хотелось бы исправить. Вполне может оказаться, что эти недостатки системы команд мешают росту производительности процессора. Более того, может оказаться, что новый процессор создавался именно для того, чтобы исправить недостатки системы команд старого процессора. Как тут быть разработчикам процессоров?

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

С какого-то момента усложнение системы команд не позволит увеличить надежность (скорее наоборот – более сложную систему трудней отладить, а это значит, что надежность такой системы, в общем случае, выше).

Резюме. Усложнение системы команд дает сильный эффект только для достаточно простых процессоров. По мере развития и усложнения процессора эффект исчезает и усложнение теряет смысл.

Уменьшение количества тактов на операцию.

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

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

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

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