Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 143
Текст из файла (страница 143)
В первом случае было разработано программное обеспечение, нозволя1ощее эффективнее использовать аппаратную часть коьп1ьютсра. Операторы, подобные оператору апо, обсуждавшемуся а разделе 11.2.1, позволяют программисту создавать параллельно выполняющиеся программы. Это дает возможность более эффективной работы аппаратной части, поскольку позволяет выполнять другую программу в то время, когда выполнение первой программы заблокировано из-за ожидания данных. Альтернативный подход заключается в разработке более эффективной аппаратуры. Выпуск центральных процессоров с большей по размерам управляющей памятью уменьшает количество необходимых обращений к оперативной памяти за требуемыми данными.
Использование кэш-памяти между оперативной и управляющей памятью позволяет значительно ускорить работу последней. Тем не менее, как бы ни возрастало быстродействие компьютеров, постоянно создак~тся приложения, которые требуют все больших компьютерных ресурсов, Помимо того, меняется сама природа компьютерных вычислений. Теперь компьютеры уже не являются изолированными вычислительными машинами, сушествукпцими сами по себе.
Миллионы настольных компьютеров представляют собой мошныс рабочие станции. Текст данной книги был набран на персональном компьютере, подключенном к международной сети Интернет. Концепция клиентсерверных вычислений, когда вычислительные задачи распределены среди мно- 11.3. Развитие аппаратной части компьютера 517 жества компьютеров, меняет в корне природу программного обеспечения. Хотя, как подчеркивается в разделе 4.2, мы заинтересованы в том, чтобы проверить корректность программы и убедиться в том, что она завершится; для многих приложений, например систем управления телефонной сетью, предварительного заказа авиабилетов или бронирования мест в гостинице, понятие «завершение приложения» вообще отсутствует, так как подобные программы никогда не должны завершаться.
Завершение их работы могло бы повлечь за собой значительные потери в прибыли для пользователей таких приложений. Чтобы разобраться в этих вопросах, мы кратко обсудим некоторые современные тенденции в компьютерных вычислениях, а также приведем наши предположения о том, как эти тенденции отразятся на идеологии языков программирования. Мы разделяем тенденции развития аппаратной части компьютера и программного обеспечения. Как отмечалось в разделе 2.1.1, компьютер состоит из центрального процессора (ЦП), выполняющего команды, небольшой по размерам, но быстродействующей управляющей памяти н большей по размеру, но и более медленной оперативной памяти. Из-за различия скоростей доступа к памяти ЦП и оперативной памяти центральному процессору часто приходится ждать получения данных — это так называемая проблема узкого меспш фон Неймана.
В главе 2 говорилось, что кэшпамять — одно из аппаратных решений этой проблемы, которое полностью незаметно для программиста. Аппаратная часть компьютера автоматически управляет кэш-памятью, так что се добавление в компьютерную систему весьма незначительно влияет на разработку языка программирования. Это утверждение, впрочем, нс является абсолютно точным. Управление кэшпамятью может повысить производительность работы компьютера.
Если, например, цикл в программе занимает 32 байт и каждый сегмент кэш-памяти также имеет длипу 32 байт, можно значительно увеличить эффективность работы программы, разместив начало цикла на границе сегмента кэш-памяти, что позволит впоследствии весь цикл хранить в од~ ям сегменте кэш-памяти вместо того, чтобы использовать для него два сегмента кэщ-памяти. Таким образом можно высвободить дополцительпьш сегмент кшп-памяти для других данных. Хотя при этом кэш-память получает доцолнительцый сегмент и может работать несколько быстрее, этот выигрыш в скорости будет незначительным по сравнению с гораздо большим выигрышем, обусловленным применением самой кэш-памяти. К увеличению общей производительности аппаратной части компьютера существует два основных подхода: 1) повысить производительность отдельного ЦП; 2) разработать альтернативные архитектуры, которые позволят увеличить общую производительность.
В следующих двух разделах мы обсудим каждый из этих подходов. 11.3.1. Конструирование процессоров Очевидный метод увеличения эффективности работы компьютера заключается в том, чтобы увеличить скорость ЦП. В этом разделе мы сначала обсудим компьютер с центральным процессором, имеющим стандартную архитектуру, который 51 8 Глава ] 1. Распределенная обработкаданных часто называезся компьютером с полным набором команд (сошр1ех [пзггцсг]оп зет сошрцтег, С1БС). Затем мы рассмотрим компьютер с сокращенным набором команл (гег[псес1 [пзтгцст[озз чст соглрцгег, И8С) как метод улучшения производительности системы. С1эС-компьютерьь Один из ранних подходов к увеличению эффективности работы компьютеров связан с минимизацией перемещений данных между оперативной памятью и ЦГ[. Если бы команды стали более мощными, потребовалось бы меньшее их количество, лаже сели при этом понадобилось бы большее время на выполнение каждой такой команды. Такой подход привел к появлению С[8С-архитектуры.
Хотя в первых машинах обычно имелся только ограниченный набор команд (например. перемещение данных в оперативную память или нз нее, простые арифметические операции с данными в управляющей памяти, переход к адресу новой команды), в современных машинах может быть представлено до сотни доступных операций. Каждая операция часто разбивается на подполя: [операция][ааниые источиича][дачные назначения) Источником для команды может служить некоторая область основной или управляюп[ей памяти, исполнительный адрес в основной памяти или некоторое значение-константа.
То же самое (за псклхзчсннем значения-константы) относится и к назначению. Операция может быть операцией, работающей с байтами или словами, арифметической (например, + или х), логической (например, л или м) илн условной операцией (например, > или <) или операцией нсрсхода (например, до[о). Сложпыс операции, такие как вычисление индекса цикла 4о, доступ к элсментала массива, преобразование целочисленного формата в вещественный, часто представляются в зиле одной встроснной операции благодаря их широколяу применению в большинстве языков программирования. С18С-архитектура налагает на разработчика компилятора бремя обеспечения эффективного использования новых команд. Например, в мире персональных компьютеров процессор 1зйс[ 80286 использовал 16-битныс данные, н операционная система М8-Г)08 была создана для работы на машине именно с таким процессором.
Эта операционная система также функционирует и на компьютерах с более быстрыми пропессорамп 1486 и Рслйшп, в которых используются 32-битные команды. Но программы, разработанные для старого процессора 80286, не использовали эффективно новую аппаратную часть, и производители компиляторов были вынуждены модифицировать свои компиляторы, чтобы оци генерировали команды, которые эффективно использовали более мощные команды более быстродействуинцих пснтралзнззах процессоров. КИС-компьютерьь Лобавление все более и более сложных команд означает, что требуется вес большсс количество циклов центрального процессора для выполнения каждой команды. Хотя скорость работы компьютеров постепенно увеличивалась сперва до 100 МГц, а затем до 200 МГц, 600 МГц и более, количество циклов, [шобходпмых для выполнения каждой инструкции, также увеличивается от 1 до 2, 3, 4 н т.
д, Таким образом, хотя компьютеры становятся все более быстродействующими, сложность используемых центральных процессоров также возрастает — например, в современных микропроцессорах один чиц состоит из более чем 3 млн компонентов, Такая сложность часто приводит к аппаратным ошибкам в архитектуре чипа.
11.3. Развитие аппаратной части компьютера 519 Для того чтобы остановить неограниченное увеличение быстродействия и возрастание сложности чипа в 70-е гг, была предложена альтернативная К13С-архитектура, Идея заключалась в том, чтобы уменьшить насколько это возможно сложность ЦП и извлечь всю выгоду из скорости выполнения машинного цикла. Так, машина с тактовой частотой процессора 400 МГц должна выполнять 400 млн команд в секунду.
Хотя такой машине, возможно, потребуется выполнить большее количество команл, чем соответствующей программе на С13С-компьютере, общее убеждение заключалось в том, что увеличение скорости машины даст болыпий эффект, чем использование дополнительных инструкций. ЕЦЗС-процессор соединяет несколько принципов проектирования, которые способствуют быстрому выполнению. + Выполнение за один цикл.
Каждая команда должна выполняться за один цикл (при условии конвейерной обработки). + Конвейерная архитектура. Выполнение команды требует несколько этапов — например, следующие: 1) извлечь команду из оперативной памяти; 2) декодировать лоле операции, данные источника и данные назначения; 3) получить данные источника для операции; 4) выполнить операцию. Конвейерная архитектура выполняет эту последовательность в несколько этапов с помощью послсдовательных команд на каждой стадии.