Вычислительный конвейер

Поделись знанием:
(перенаправлено с «Конвейер (процессор)»)
Перейти к: навигация, поиск

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





Описание

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

На иллюстрации справа показан простой пятиуровневый конвейер в RISC-процессорах. Здесь:

Вертикальная ось — последовательные независимые инструкции, горизонтальная — время. Зелёная колонка описывает состояние процессора в один момент времени, в ней самая ранняя, верхняя инструкция уже находится в состоянии записи в регистр, а самая последняя, нижняя инструкция — только в процессе чтения.

Терминология

  • арифметический конвейер (arithmetic pipeline) - реализация в АЛУ поэтапного исполнения арифметических операций чаще всего над вещественными числами
  • супер-конвейер, гипер-конвейер, глубокий конвейер (super-pipeline, hyper-pipeline, deep pipline) - вычислительный конвейер с необычно большим количеством стадий. Например, процессор Intel Pentium 4 имел 20 стадий конвейера, а в модификации Prescott получил конвейер из 31 стадии.
  • недозагруженный конвейер (underutilized pipeline) - конвейер, в котором в одно и то же время не все стадии конвейера выполняют какую-то операцию. Например ранние процессоры MIPS имели 6-стадийный конвейер но в каждый момент было занято только 3 его стадии.

История

Сам термин «конвейер» пришёл из промышленности, где используется подобный принцип работы — материал автоматически подтягивается по ленте конвейера к рабочему, который осуществляет с ним необходимые действия, следующий за ним рабочий выполняет свои функции над получившейся заготовкой, следующий делает ещё что-то. Таким образом, к концу конвейера цепочка рабочих полностью выполняет все поставленные задачи, сохраняя высокий темп производства. Например, если на самую медленную операцию затрачивается одна минута, то каждая деталь будет сходить с конвейера через одну минуту.

Простейшая форма совмещения выполнения инструкций во времени была реализована в машине Z3 Конрада Цузе в 1941 году[1].

Ламповая малая ЭЦВМ "Урал" (1957 год, СССР) имела двухступенчатый конвейер операций.[2]

Многостадийные конвейеры в современном представлении были реализованы в компьютерах М-100 (1959 год, СССР)[уточнить][3], UNIVAC LARC (1960 год, США), IBM Stretch (1961 год, США)[4], Atlas (1962 год, Великобритания) и БЭСМ-6 (1967 год, СССР). В проекте IBM Stretch были предложены термины «выборка» (англ. Fetch), «декодирование» (англ. Decode) и «выполнение» (англ. Execute), которые затем стали общеупотребительными.

Тактовый генератор

Многие современные процессоры управляются тактовым генератором. Процессор внутри состоит из логических элементов и ячеек памяти — триггеров. Когда приходит сигнал от тактового генератора, триггеры приобретают своё новое значение, и «логике» требуется некоторое время для декодирования новых значений. Затем приходит следующий сигнал от тактового генератора, триггеры принимают новые значения, и так далее. Разбивая последовательности логических элементов на более короткие и помещая триггеры между этими короткими последовательностями, уменьшают время, необходимое логике для обработки сигналов. В этом случае длительность одного такта процессора может быть соответственно уменьшена.

Например, простейший конвейер RISC-процессоров можно представить пятью стадиями с наборами триггеров между стадиями:

  1. получение инструкции (англ. Instruction Fetch);
  2. декодирование инструкции (англ. Instruction Decode) и чтение регистров (англ. Register fetch);
  3. выполнение (англ. Execute);
  4. доступ к памяти (англ. Memory access);
  5. запись в регистр (англ. Register write back).

Конфликты конвейера

Ситуации, называемые конфликтами конвейера (англ. hazards), препятствуют выполнению очередной команды из потока команд в предназначенном для неё такте. Конфликты уменьшают реальное ускорение в производительности конвейерной обработки и могут вызвать необходимость останова конвейера. Для разрешения конфликта нужно, чтобы некоторые команды в конвейере могли продолжать выполняться, в то время как другие были задержаны. Существует три класса конфликтов[5].

Структурные конфликты

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

В качестве альтернативы такому структурному конфликту разработчик мог бы обеспечить отдельное обращение к памяти команд либо путём разбиения кэша на отдельные кэш команд и кэш данных, либо используя множество буферов, называемыми буферами команд для храниения команд, однако, этого не делается во избежание увеличения стоимости блока[7].

Конфликты по данным

Конфликты по данным возникают, когда зависимость команды от результатов предыдущей проявляется при совмещении команд в конвейере. Данные конфликты происходят, когда конвейер изменяет порядок обращений считывания/записи к операндам так, что он отличается от порядка, который существует для последовательно выполняемых команд в процессоре без конвейера. Существует метод устранения конфликта по данным: форвардинг (англ. register forwarding) (иногда называется bypass)[8]. К сожалению, не все потенциальные конфликты по данным можно обработать с помощью байпаса, в этом случае конвейер приостанавливается до разрешения конфликта.

Конфликты по управлению

Конфликты по управлению возникают при конвейерном выполнении условных передач управления и других команд, которые изменяют значение программного счетчика. Существует много способов обработки остановов конвейера, вызванных задержкой передачи управления, но для глубоких конвейеров в основном используются агрессивные средства[9], такие как предсказания передач управления.

Бесконвейерная архитектура

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

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

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

Преимущества и недостатки

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

Преимущества:

  1. Время цикла процессора уменьшается, таким образом увеличивая скорость обработки инструкций в большинстве случаев.
  2. Некоторые комбинационные логические элементы, такие, как сумматоры или умножители, могут быть ускорены путём увеличения количества логических элементов. Использование конвейера может предотвратить ненужное наращивание количества элементов.

Недостатки:

  1. Бесконвейерный процессор исполняет только одну инструкцию за раз. Это предотвращает задержки веток инструкций (фактически каждая ветка задерживается), и проблемы, связанные с последовательными инструкциями, которые исполняются параллельно. Следовательно, схема такого процессора проще, и он дешевле для изготовления.
  2. Задержка инструкций в бесконвейерном процессоре слегка ниже, чем в конвейерном эквиваленте. Это происходит из-за того, что в конвейерный процессор должны быть добавлены дополнительные триггеры.
  3. У бесконвейерного процессора скорость обработки инструкций стабильна. Производительность конвейерного процессора предсказать намного сложнее, и она может значительно различаться в разных программах.

Примеры

Общий конвейер

Справа изображён общий конвейер с четырьмя стадиями работы:

  1. Получение (англ. Fetch)
  2. Раскодирование (англ. Decode)
  3. Выполнение (англ. Execute)
  4. Запись результата (англ. Write-back)

Верхняя серая область — список инструкций, которые предстоит выполнить. Нижняя серая область — список инструкций, которые уже были выполнены. И средняя белая область является самим конвейером.

Выполнение происходит следующим образом:

Цикл Действия
0 Четыре инструкции ожидают исполнения
1
  • Зелёная инструкция забирается из памяти
2
  • Зелёная инструкция раскодируется
  • Фиолетовая инструкция забирается из памяти
3
  • Зелёная инструкция выполняется (то есть исполняется то действие, которое она кодировала)
  • Фиолетовая инструкция раскодируется
  • Синяя инструкция забирается из памяти
4
  • Итоги исполнения зелёной инструкции записываются в регистры или в память
  • Фиолетовая инструкция выполняется
  • Синяя инструкция раскодируется
  • Красная инструкция забирается из памяти
5
  • Зелёная инструкция завершилась
  • Итоги исполнения фиолетовой инструкции записываются в регистры или в память
  • Синяя инструкция выполняется
  • Красная инструкция раскодируется
6
  • Фиолетовая инструкция завершилась
  • Результаты исполнения синей инструкции записываются в регистры или в память
  • Красная инструкция выполняется
7
  • Синяя инструкция завершилась
  • Итоги исполнения красной инструкции записываются в регистры или в память
8
  • Красная инструкция завершилась
9 Все инструкции были выполнены

Пузырёк

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

Очевидно, что наличие пузырька в конвейере даёт суммарное время исполнения в 8 тактов вместо 7 на схеме исполнения, показанной выше.

Исполнительные устройства должны выполнять какое-то действие на каждом такте. Пузырьки являются способом создания задержки при обработке инструкции без прекращения работы конвейера. При их выполнении не происходит полезной работы на стадиях выборки, декодирования, исполнения и записи результата. Они могут быть выражены при помощи инструкции NOP[10][11][12] ассемблера.

Пример 1

Допустим, типичная инструкция для сложения двух чисел — это СЛОЖИТЬ A, B, C. Эта инструкция суммирует значения, находящиеся в ячейках памяти A и B, а затем кладет результат в ячейку памяти C. В конвейерном процессоре контроллер может разбить эту операцию на последовательные задачи вида

ЗАГРУЗИТЬ A, R1
ЗАГРУЗИТЬ B, R2
СЛОЖИТЬ R1, R2, R3
ЗАПИСАТЬ R3, C
загрузить следующую инструкцию

Ячейки R1, R2 и R3 являются регистрами процессора. Значения, которые хранятся в ячейках памяти, которые мы называем A и B, загружаются (то есть копируются) в эти регистры, затем суммируются, и результат записывается в ячейку памяти C.

В данном примере конвейер состоит из трех уровней — загрузки, исполнения и записи. Эти шаги называются, очевидно, уровнями или шагами конвейера.

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

Конвейер не уменьшает время, которое необходимо для того, чтобы выполнить инструкцию, но зато он увеличивает объём (число) инструкций, которые могут быть выполнены одновременно, и таким образом уменьшает задержку между выполненными инструкциями — увеличивая т. н. пропускную способность. Чем больше уровней имеет конвейер, тем больше инструкций могут выполняться одновременно и тем меньше задержка между завершенными инструкциями. Каждый микропроцессор, произведенный в наши дни, использует как минимум двухуровневый конвейер.

Пример 2

Теоретический трёхуровневый конвейер:

Шаг Англ. название Описание
Выборка Fetch Прочитать инструкцию из памяти
Исполнение Execute Исполнить инструкцию
Запись Write-back Записать результат в память и/или регистры

Псевдоассемблерный листинг, который нужно выполнить:

ЗАГРУЗИТЬ  40, A       ; загрузить число 40 в A
КОПИРОВАТЬ A,  B       ; скопировать A в B
СЛОЖИТЬ    20, B       ; добавить 20 к B
ЗАПИСАТЬ   B,  0x0300  ; записать B в ячейку памяти 0x0300

Как это будет исполняться:

Такт Выборка Исполнение Запись Пояснение
Такт 1 ЗАГРУЗИТЬ Инструкция ЗАГРУЗИТЬ читается из памяти.
Такт 2 КОПИРОВАТЬ ЗАГРУЗИТЬ Инструкция ЗАГРУЗИТЬ выполняется, инструкция КОПИРОВАТЬ читается из памяти.
Такт 3 СЛОЖИТЬ КОПИРОВАТЬ ЗАГРУЗИТЬ Инструкция ЗАГРУЗИТЬ находится на шаге записи результата, где её результат (то есть число 40) записывается в регистр А. В это же время инструкция КОПИРОВАТЬ исполняется. Так как она должна скопировать содержимое регистра A в регистр B, она должна дождаться окончания инструкции ЗАГРУЗИТЬ.
Такт 4 ЗАПИСАТЬ СЛОЖИТЬ СКОПИРОВАТЬ Загружена инструкция ЗАПИСАТЬ, тогда как инструкция СКОПИРОВАТЬ прощается с нами, а по инструкции СЛОЖИТЬ в данный момент производятся вычисления.

И так далее. Следует учитывать, что иногда инструкции будут зависеть от итогов других инструкций (например, как наша инструкция КОПИРОВАТЬ). Когда более, чем одна инструкция ссылается на определённое место, читая его (то есть используя в качестве входного операнда) либо записывая в него (то есть используя его в качестве выходного операнда), исполнение инструкций не в порядке, который был изначально запланирован в оригинальной программе, может повлечь за собой «конфликт конвейера (англ. hazard)» (о чём упоминалось выше). Существует несколько зарекомендовавших себя приёмов либо для предотвращения конфликтов, либо для их исправления, если они случились.

Трудности

Множество схем включают в себя конвейеры в 7, 10 или даже 20 уровней (как, например, в процессоре Pentium 4). Поздние ядра Pentium 4 с кодовыми именами Prescott и Cedar Mill (и их Pentium D-производные) имеют 31-уровневый конвейер. Процессор Xelerator X10q имеет конвейер длиной более, чем в тысячу шагов[13]. Обратной стороной медали в данном случае является необходимость сбрасывать весь конвейер в случае, если ход программы изменился (например, по условному оператору). Эту проблему пытаются решать предсказатели переходов. Предсказание переходов само по себе может только усугубить ситуацию, если предсказание производится плохо. В некоторых областях применения, таких, как вычисления на суперкомпьютерах, программы специально пишутся так, чтобы как можно реже использовать условные операторы, поэтому очень длинные конвейеры весьма позитивно скажутся на общей скорости вычислений, так как длинные конвейеры проектируются так, чтобы уменьшить CPI (англ. clocks per instruction, количество тактов на инструкцию). Если ветвление происходит постоянно, перестановка машинных инструкций таким образом, чтобы те инструкции, которые, скорее всего, понадобятся, были размещены в конвейере, может значительно уменьшить потери скорости по сравнению с необходимостью каждый раз полностью сбрасывать конвейер. Программы типа gcov могут использоваться для того, чтобы определять, как часто отдельные ветки исполняются на самом деле, используя технологию, известную как анализ покрытия кода (англ. code coverage analysis), хотя на практике подобный анализ является последней мерой при оптимизации.К:Википедия:Статьи без источников (тип: не указан)[источник не указан 4898 дней]

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

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

См. также

Напишите отзыв о статье "Вычислительный конвейер"

Литература

  • Amos R. Omondi. [books.google.ru/books?id=-_LiBwAAQBAJ Microarchitecture of Pipelined and Superscalar Computers]. — Springer, 1999. — 266 p. — ISBN 1441950818. (англ.)
  • David A. Patterson, John L. Hennessy. [books.google.ru/books?id=EVhgAAAAQBAJ Computer Organization and Design: The Hardware/Software Interface, 5th Edition]. — Morgan Kaufmann, 2013. — 800 p. — ISBN 0124077269. (англ.)
  • David A. Patterson. Computer Architecture, Fifth Edition: A Quantitative Approach. — 5. — Morgan Kaufmann, 2011. — 856 p. — (Series in Computer Architecture and Design). — ISBN 978-0123838728.

Примечания

  1. Raúl Rojas. [books.google.ru/books?id=nDWPW9uwZPAC&pg=PA249#v=onepage&q&f=false The First Computers: History and Architectures]. — MIT Press, 2002. — С. 249. — 472 с. — ISBN 0-262-68137-4.
  2. Смольников Н. Я. [emural.clan.su/file_archive/Smolnikov_programmirovanie_ural.djvu Основы программирования для цифровой машины «Урал»]. — Советское радио, 1961. — С. 83. — 328 с.
  3. Ревич Юрий Всеволодович, Малиновский Б. [it-history.ru/images/6/63/AIKitov_Revich.pdf Информационные технологии в СССР. Создатели советской компьютерной техники]. — БХВ-Петербург, 2014. — 336 с.
  4. Harvey G. Cragon. [books.google.ru/books?id=q2w3JSFD7l4C&pg=PA289#v=onepage&q&f=false Memory Systems and Pipelined Processors]. — Jones and Bartlett Learning, 1996. — С. 289. — 575 с. — ISBN 0-86720-474-5.
  5. Morgan Kaufmann Publishers, Computer Organization and Design, David A. Patterson & John L. Hennessy, Edition 3, ISBN 1-55860-604-1, page 738
  6. Morgan Kaufmann Publishers, Computer Organization and Design, David A. Patterson & John L. Hennessy, Edition 3, ISBN 1-55860-604-1, page 740
  7. Morgan Kaufmann Publishers, Computer Organization and Design, David A. Patterson & John L. Hennessy, Edition 3, ISBN 1-55860-604-1, page 743
  8. Morgan Kaufmann Publishers, Computer Organization and Design, David A. Patterson & John L. Hennessy, Edition 3, ISBN 1-55860-604-1, page 745
  9. Morgan Kaufmann Publishers, Computer Organization and Design, David A. Patterson & John L. Hennessy, Edition 3, ISBN 1-55860-604-1, page 756
  10. «For the stall case, a bubble (NOP instruction) is sent to the next stage of pipeline and all previous stages stall for a time-step» // [www.cs.washington.edu/homes/duhao/Projects/CPURisc/CPU32Riscwebsite.html CPU — 32bit RISC]
  11. «stream a pipeline bubble, or NOP, must be inserted» // [www.cse.unsw.edu.au/~cs9244/03/seminars/02-cgray.ps.gz Instruction Level Parallelism in VLIW Processors]
  12. «Bubbles are NOP instructions» // [faculty.kfupm.edu.sa/COE/mudawar/coe308/lectures/10-PipelinedProcessor.ppt Pipelined Processor Design]
  13. [www.linleygroup.com/newsletters/newsletter_detail.php?num=4501 The Linley Group - Best Extreme Processor: Xelerated X10q]

Ссылки

  • Воеводин Вл. В. [www.parallel.ru/vvv/lec1.html Параллельная обработка данных] (лекции). Раздел «Конвейерная обработка».
  • [x86.org/articles/branch/branchprediction.htm Предсказание ветвлений в процессорах семейства Pentium] (англ.)(недоступная ссылка — история)
  • [arstechnica.com/articles/paedia/cpu/pipelining-1.ars/1 Статья по конвейерам] (англ.) на ArsTechnica
  • [research.sun.com/techrep/1994/abstract-25.html Архитектура процессора с противоточным конвейером] (англ.)
  • [testlabs.kz/processors/25-golaya-proizvoditelnost-issleduem-effektivnost-alu-i-fpu.html Влияние длины конвейера. Исследование эффективности ALU и FPU процессоров разных поколений] от TestLabs.kz

Отрывок, характеризующий Вычислительный конвейер

Ростов задумался.
– Я ни в чем не беру назад своего слова, – сказал он. – И потом, Соня такая прелесть, что какой же дурак станет отказываться от своего счастия?
– Нет, нет, – закричала Наташа. – Мы про это уже с нею говорили. Мы знали, что ты это скажешь. Но это нельзя, потому что, понимаешь, ежели ты так говоришь – считаешь себя связанным словом, то выходит, что она как будто нарочно это сказала. Выходит, что ты всё таки насильно на ней женишься, и выходит совсем не то.
Ростов видел, что всё это было хорошо придумано ими. Соня и вчера поразила его своей красотой. Нынче, увидав ее мельком, она ему показалась еще лучше. Она была прелестная 16 тилетняя девочка, очевидно страстно его любящая (в этом он не сомневался ни на минуту). Отчего же ему было не любить ее теперь, и не жениться даже, думал Ростов, но теперь столько еще других радостей и занятий! «Да, они это прекрасно придумали», подумал он, «надо оставаться свободным».
– Ну и прекрасно, – сказал он, – после поговорим. Ах как я тебе рад! – прибавил он.
– Ну, а что же ты, Борису не изменила? – спросил брат.
– Вот глупости! – смеясь крикнула Наташа. – Ни об нем и ни о ком я не думаю и знать не хочу.
– Вот как! Так ты что же?
– Я? – переспросила Наташа, и счастливая улыбка осветила ее лицо. – Ты видел Duport'a?
– Нет.
– Знаменитого Дюпора, танцовщика не видал? Ну так ты не поймешь. Я вот что такое. – Наташа взяла, округлив руки, свою юбку, как танцуют, отбежала несколько шагов, перевернулась, сделала антраша, побила ножкой об ножку и, став на самые кончики носков, прошла несколько шагов.
– Ведь стою? ведь вот, – говорила она; но не удержалась на цыпочках. – Так вот я что такое! Никогда ни за кого не пойду замуж, а пойду в танцовщицы. Только никому не говори.
Ростов так громко и весело захохотал, что Денисову из своей комнаты стало завидно, и Наташа не могла удержаться, засмеялась с ним вместе. – Нет, ведь хорошо? – всё говорила она.
– Хорошо, за Бориса уже не хочешь выходить замуж?
Наташа вспыхнула. – Я не хочу ни за кого замуж итти. Я ему то же самое скажу, когда увижу.
– Вот как! – сказал Ростов.
– Ну, да, это всё пустяки, – продолжала болтать Наташа. – А что Денисов хороший? – спросила она.
– Хороший.
– Ну и прощай, одевайся. Он страшный, Денисов?
– Отчего страшный? – спросил Nicolas. – Нет. Васька славный.
– Ты его Васькой зовешь – странно. А, что он очень хорош?
– Очень хорош.
– Ну, приходи скорей чай пить. Все вместе.
И Наташа встала на цыпочках и прошлась из комнаты так, как делают танцовщицы, но улыбаясь так, как только улыбаются счастливые 15 летние девочки. Встретившись в гостиной с Соней, Ростов покраснел. Он не знал, как обойтись с ней. Вчера они поцеловались в первую минуту радости свидания, но нынче они чувствовали, что нельзя было этого сделать; он чувствовал, что все, и мать и сестры, смотрели на него вопросительно и от него ожидали, как он поведет себя с нею. Он поцеловал ее руку и назвал ее вы – Соня . Но глаза их, встретившись, сказали друг другу «ты» и нежно поцеловались. Она просила своим взглядом у него прощения за то, что в посольстве Наташи она смела напомнить ему о его обещании и благодарила его за его любовь. Он своим взглядом благодарил ее за предложение свободы и говорил, что так ли, иначе ли, он никогда не перестанет любить ее, потому что нельзя не любить ее.
– Как однако странно, – сказала Вера, выбрав общую минуту молчания, – что Соня с Николенькой теперь встретились на вы и как чужие. – Замечание Веры было справедливо, как и все ее замечания; но как и от большей части ее замечаний всем сделалось неловко, и не только Соня, Николай и Наташа, но и старая графиня, которая боялась этой любви сына к Соне, могущей лишить его блестящей партии, тоже покраснела, как девочка. Денисов, к удивлению Ростова, в новом мундире, напомаженный и надушенный, явился в гостиную таким же щеголем, каким он был в сражениях, и таким любезным с дамами и кавалерами, каким Ростов никак не ожидал его видеть.


Вернувшись в Москву из армии, Николай Ростов был принят домашними как лучший сын, герой и ненаглядный Николушка; родными – как милый, приятный и почтительный молодой человек; знакомыми – как красивый гусарский поручик, ловкий танцор и один из лучших женихов Москвы.
Знакомство у Ростовых была вся Москва; денег в нынешний год у старого графа было достаточно, потому что были перезаложены все имения, и потому Николушка, заведя своего собственного рысака и самые модные рейтузы, особенные, каких ни у кого еще в Москве не было, и сапоги, самые модные, с самыми острыми носками и маленькими серебряными шпорами, проводил время очень весело. Ростов, вернувшись домой, испытал приятное чувство после некоторого промежутка времени примеривания себя к старым условиям жизни. Ему казалось, что он очень возмужал и вырос. Отчаяние за невыдержанный из закона Божьего экзамен, занимание денег у Гаврилы на извозчика, тайные поцелуи с Соней, он про всё это вспоминал, как про ребячество, от которого он неизмеримо был далек теперь. Теперь он – гусарский поручик в серебряном ментике, с солдатским Георгием, готовит своего рысака на бег, вместе с известными охотниками, пожилыми, почтенными. У него знакомая дама на бульваре, к которой он ездит вечером. Он дирижировал мазурку на бале у Архаровых, разговаривал о войне с фельдмаршалом Каменским, бывал в английском клубе, и был на ты с одним сорокалетним полковником, с которым познакомил его Денисов.
Страсть его к государю несколько ослабела в Москве, так как он за это время не видал его. Но он часто рассказывал о государе, о своей любви к нему, давая чувствовать, что он еще не всё рассказывает, что что то еще есть в его чувстве к государю, что не может быть всем понятно; и от всей души разделял общее в то время в Москве чувство обожания к императору Александру Павловичу, которому в Москве в то время было дано наименование ангела во плоти.
В это короткое пребывание Ростова в Москве, до отъезда в армию, он не сблизился, а напротив разошелся с Соней. Она была очень хороша, мила, и, очевидно, страстно влюблена в него; но он был в той поре молодости, когда кажется так много дела, что некогда этим заниматься, и молодой человек боится связываться – дорожит своей свободой, которая ему нужна на многое другое. Когда он думал о Соне в это новое пребывание в Москве, он говорил себе: Э! еще много, много таких будет и есть там, где то, мне еще неизвестных. Еще успею, когда захочу, заняться и любовью, а теперь некогда. Кроме того, ему казалось что то унизительное для своего мужества в женском обществе. Он ездил на балы и в женское общество, притворяясь, что делал это против воли. Бега, английский клуб, кутеж с Денисовым, поездка туда – это было другое дело: это было прилично молодцу гусару.
В начале марта, старый граф Илья Андреич Ростов был озабочен устройством обеда в английском клубе для приема князя Багратиона.
Граф в халате ходил по зале, отдавая приказания клубному эконому и знаменитому Феоктисту, старшему повару английского клуба, о спарже, свежих огурцах, землянике, теленке и рыбе для обеда князя Багратиона. Граф, со дня основания клуба, был его членом и старшиною. Ему было поручено от клуба устройство торжества для Багратиона, потому что редко кто умел так на широкую руку, хлебосольно устроить пир, особенно потому, что редко кто умел и хотел приложить свои деньги, если они понадобятся на устройство пира. Повар и эконом клуба с веселыми лицами слушали приказания графа, потому что они знали, что ни при ком, как при нем, нельзя было лучше поживиться на обеде, который стоил несколько тысяч.
– Так смотри же, гребешков, гребешков в тортю положи, знаешь! – Холодных стало быть три?… – спрашивал повар. Граф задумался. – Нельзя меньше, три… майонез раз, – сказал он, загибая палец…
– Так прикажете стерлядей больших взять? – спросил эконом. – Что ж делать, возьми, коли не уступают. Да, батюшка ты мой, я было и забыл. Ведь надо еще другую антре на стол. Ах, отцы мои! – Он схватился за голову. – Да кто же мне цветы привезет?
– Митинька! А Митинька! Скачи ты, Митинька, в подмосковную, – обратился он к вошедшему на его зов управляющему, – скачи ты в подмосковную и вели ты сейчас нарядить барщину Максимке садовнику. Скажи, чтобы все оранжереи сюда волок, укутывал бы войлоками. Да чтобы мне двести горшков тут к пятнице были.
Отдав еще и еще разные приказания, он вышел было отдохнуть к графинюшке, но вспомнил еще нужное, вернулся сам, вернул повара и эконома и опять стал приказывать. В дверях послышалась легкая, мужская походка, бряцанье шпор, и красивый, румяный, с чернеющимися усиками, видимо отдохнувший и выхолившийся на спокойном житье в Москве, вошел молодой граф.
– Ах, братец мой! Голова кругом идет, – сказал старик, как бы стыдясь, улыбаясь перед сыном. – Хоть вот ты бы помог! Надо ведь еще песенников. Музыка у меня есть, да цыган что ли позвать? Ваша братия военные это любят.
– Право, папенька, я думаю, князь Багратион, когда готовился к Шенграбенскому сражению, меньше хлопотал, чем вы теперь, – сказал сын, улыбаясь.
Старый граф притворился рассерженным. – Да, ты толкуй, ты попробуй!
И граф обратился к повару, который с умным и почтенным лицом, наблюдательно и ласково поглядывал на отца и сына.
– Какова молодежь то, а, Феоктист? – сказал он, – смеется над нашим братом стариками.
– Что ж, ваше сиятельство, им бы только покушать хорошо, а как всё собрать да сервировать , это не их дело.
– Так, так, – закричал граф, и весело схватив сына за обе руки, закричал: – Так вот же что, попался ты мне! Возьми ты сейчас сани парные и ступай ты к Безухову, и скажи, что граф, мол, Илья Андреич прислали просить у вас земляники и ананасов свежих. Больше ни у кого не достанешь. Самого то нет, так ты зайди, княжнам скажи, и оттуда, вот что, поезжай ты на Разгуляй – Ипатка кучер знает – найди ты там Ильюшку цыгана, вот что у графа Орлова тогда плясал, помнишь, в белом казакине, и притащи ты его сюда, ко мне.
– И с цыганками его сюда привести? – спросил Николай смеясь. – Ну, ну!…
В это время неслышными шагами, с деловым, озабоченным и вместе христиански кротким видом, никогда не покидавшим ее, вошла в комнату Анна Михайловна. Несмотря на то, что каждый день Анна Михайловна заставала графа в халате, всякий раз он конфузился при ней и просил извинения за свой костюм.
– Ничего, граф, голубчик, – сказала она, кротко закрывая глаза. – А к Безухому я съезжу, – сказала она. – Пьер приехал, и теперь мы всё достанем, граф, из его оранжерей. Мне и нужно было видеть его. Он мне прислал письмо от Бориса. Слава Богу, Боря теперь при штабе.
Граф обрадовался, что Анна Михайловна брала одну часть его поручений, и велел ей заложить маленькую карету.
– Вы Безухову скажите, чтоб он приезжал. Я его запишу. Что он с женой? – спросил он.
Анна Михайловна завела глаза, и на лице ее выразилась глубокая скорбь…
– Ах, мой друг, он очень несчастлив, – сказала она. – Ежели правда, что мы слышали, это ужасно. И думали ли мы, когда так радовались его счастию! И такая высокая, небесная душа, этот молодой Безухов! Да, я от души жалею его и постараюсь дать ему утешение, которое от меня будет зависеть.
– Да что ж такое? – спросили оба Ростова, старший и младший.
Анна Михайловна глубоко вздохнула: – Долохов, Марьи Ивановны сын, – сказала она таинственным шопотом, – говорят, совсем компрометировал ее. Он его вывел, пригласил к себе в дом в Петербурге, и вот… Она сюда приехала, и этот сорви голова за ней, – сказала Анна Михайловна, желая выразить свое сочувствие Пьеру, но в невольных интонациях и полуулыбкою выказывая сочувствие сорви голове, как она назвала Долохова. – Говорят, сам Пьер совсем убит своим горем.
– Ну, всё таки скажите ему, чтоб он приезжал в клуб, – всё рассеется. Пир горой будет.
На другой день, 3 го марта, во 2 м часу по полудни, 250 человек членов Английского клуба и 50 человек гостей ожидали к обеду дорогого гостя и героя Австрийского похода, князя Багратиона. В первое время по получении известия об Аустерлицком сражении Москва пришла в недоумение. В то время русские так привыкли к победам, что, получив известие о поражении, одни просто не верили, другие искали объяснений такому странному событию в каких нибудь необыкновенных причинах. В Английском клубе, где собиралось всё, что было знатного, имеющего верные сведения и вес, в декабре месяце, когда стали приходить известия, ничего не говорили про войну и про последнее сражение, как будто все сговорились молчать о нем. Люди, дававшие направление разговорам, как то: граф Ростопчин, князь Юрий Владимирович Долгорукий, Валуев, гр. Марков, кн. Вяземский, не показывались в клубе, а собирались по домам, в своих интимных кружках, и москвичи, говорившие с чужих голосов (к которым принадлежал и Илья Андреич Ростов), оставались на короткое время без определенного суждения о деле войны и без руководителей. Москвичи чувствовали, что что то нехорошо и что обсуждать эти дурные вести трудно, и потому лучше молчать. Но через несколько времени, как присяжные выходят из совещательной комнаты, появились и тузы, дававшие мнение в клубе, и всё заговорило ясно и определенно. Были найдены причины тому неимоверному, неслыханному и невозможному событию, что русские были побиты, и все стало ясно, и во всех углах Москвы заговорили одно и то же. Причины эти были: измена австрийцев, дурное продовольствие войска, измена поляка Пшебышевского и француза Ланжерона, неспособность Кутузова, и (потихоньку говорили) молодость и неопытность государя, вверившегося дурным и ничтожным людям. Но войска, русские войска, говорили все, были необыкновенны и делали чудеса храбрости. Солдаты, офицеры, генералы – были герои. Но героем из героев был князь Багратион, прославившийся своим Шенграбенским делом и отступлением от Аустерлица, где он один провел свою колонну нерасстроенною и целый день отбивал вдвое сильнейшего неприятеля. Тому, что Багратион выбран был героем в Москве, содействовало и то, что он не имел связей в Москве, и был чужой. В лице его отдавалась должная честь боевому, простому, без связей и интриг, русскому солдату, еще связанному воспоминаниями Итальянского похода с именем Суворова. Кроме того в воздаянии ему таких почестей лучше всего показывалось нерасположение и неодобрение Кутузову.
– Ежели бы не было Багратиона, il faudrait l'inventer, [надо бы изобрести его.] – сказал шутник Шиншин, пародируя слова Вольтера. Про Кутузова никто не говорил, и некоторые шопотом бранили его, называя придворною вертушкой и старым сатиром. По всей Москве повторялись слова князя Долгорукова: «лепя, лепя и облепишься», утешавшегося в нашем поражении воспоминанием прежних побед, и повторялись слова Ростопчина про то, что французских солдат надо возбуждать к сражениям высокопарными фразами, что с Немцами надо логически рассуждать, убеждая их, что опаснее бежать, чем итти вперед; но что русских солдат надо только удерживать и просить: потише! Со всex сторон слышны были новые и новые рассказы об отдельных примерах мужества, оказанных нашими солдатами и офицерами при Аустерлице. Тот спас знамя, тот убил 5 ть французов, тот один заряжал 5 ть пушек. Говорили и про Берга, кто его не знал, что он, раненый в правую руку, взял шпагу в левую и пошел вперед. Про Болконского ничего не говорили, и только близко знавшие его жалели, что он рано умер, оставив беременную жену и чудака отца.


3 го марта во всех комнатах Английского клуба стоял стон разговаривающих голосов и, как пчелы на весеннем пролете, сновали взад и вперед, сидели, стояли, сходились и расходились, в мундирах, фраках и еще кое кто в пудре и кафтанах, члены и гости клуба. Пудренные, в чулках и башмаках ливрейные лакеи стояли у каждой двери и напряженно старались уловить каждое движение гостей и членов клуба, чтобы предложить свои услуги. Большинство присутствовавших были старые, почтенные люди с широкими, самоуверенными лицами, толстыми пальцами, твердыми движениями и голосами. Этого рода гости и члены сидели по известным, привычным местам и сходились в известных, привычных кружках. Малая часть присутствовавших состояла из случайных гостей – преимущественно молодежи, в числе которой были Денисов, Ростов и Долохов, который был опять семеновским офицером. На лицах молодежи, особенно военной, было выражение того чувства презрительной почтительности к старикам, которое как будто говорит старому поколению: уважать и почитать вас мы готовы, но помните, что всё таки за нами будущность.
Несвицкий был тут же, как старый член клуба. Пьер, по приказанию жены отпустивший волоса, снявший очки и одетый по модному, но с грустным и унылым видом, ходил по залам. Его, как и везде, окружала атмосфера людей, преклонявшихся перед его богатством, и он с привычкой царствования и рассеянной презрительностью обращался с ними.
По годам он бы должен был быть с молодыми, по богатству и связям он был членом кружков старых, почтенных гостей, и потому он переходил от одного кружка к другому.
Старики из самых значительных составляли центр кружков, к которым почтительно приближались даже незнакомые, чтобы послушать известных людей. Большие кружки составлялись около графа Ростопчина, Валуева и Нарышкина. Ростопчин рассказывал про то, как русские были смяты бежавшими австрийцами и должны были штыком прокладывать себе дорогу сквозь беглецов.
Валуев конфиденциально рассказывал, что Уваров был прислан из Петербурга, для того чтобы узнать мнение москвичей об Аустерлице.
В третьем кружке Нарышкин говорил о заседании австрийского военного совета, в котором Суворов закричал петухом в ответ на глупость австрийских генералов. Шиншин, стоявший тут же, хотел пошутить, сказав, что Кутузов, видно, и этому нетрудному искусству – кричать по петушиному – не мог выучиться у Суворова; но старички строго посмотрели на шутника, давая ему тем чувствовать, что здесь и в нынешний день так неприлично было говорить про Кутузова.
Граф Илья Андреич Ростов, озабоченно, торопливо похаживал в своих мягких сапогах из столовой в гостиную, поспешно и совершенно одинаково здороваясь с важными и неважными лицами, которых он всех знал, и изредка отыскивая глазами своего стройного молодца сына, радостно останавливал на нем свой взгляд и подмигивал ему. Молодой Ростов стоял у окна с Долоховым, с которым он недавно познакомился, и знакомством которого он дорожил. Старый граф подошел к ним и пожал руку Долохову.
– Ко мне милости прошу, вот ты с моим молодцом знаком… вместе там, вместе геройствовали… A! Василий Игнатьич… здорово старый, – обратился он к проходившему старичку, но не успел еще договорить приветствия, как всё зашевелилось, и прибежавший лакей, с испуганным лицом, доложил: пожаловали!
Раздались звонки; старшины бросились вперед; разбросанные в разных комнатах гости, как встряхнутая рожь на лопате, столпились в одну кучу и остановились в большой гостиной у дверей залы.
В дверях передней показался Багратион, без шляпы и шпаги, которые он, по клубному обычаю, оставил у швейцара. Он был не в смушковом картузе с нагайкой через плечо, как видел его Ростов в ночь накануне Аустерлицкого сражения, а в новом узком мундире с русскими и иностранными орденами и с георгиевской звездой на левой стороне груди. Он видимо сейчас, перед обедом, подстриг волосы и бакенбарды, что невыгодно изменяло его физиономию. На лице его было что то наивно праздничное, дававшее, в соединении с его твердыми, мужественными чертами, даже несколько комическое выражение его лицу. Беклешов и Федор Петрович Уваров, приехавшие с ним вместе, остановились в дверях, желая, чтобы он, как главный гость, прошел вперед их. Багратион смешался, не желая воспользоваться их учтивостью; произошла остановка в дверях, и наконец Багратион всё таки прошел вперед. Он шел, не зная куда девать руки, застенчиво и неловко, по паркету приемной: ему привычнее и легче было ходить под пулями по вспаханному полю, как он шел перед Курским полком в Шенграбене. Старшины встретили его у первой двери, сказав ему несколько слов о радости видеть столь дорогого гостя, и недождавшись его ответа, как бы завладев им, окружили его и повели в гостиную. В дверях гостиной не было возможности пройти от столпившихся членов и гостей, давивших друг друга и через плечи друг друга старавшихся, как редкого зверя, рассмотреть Багратиона. Граф Илья Андреич, энергичнее всех, смеясь и приговаривая: – пусти, mon cher, пусти, пусти, – протолкал толпу, провел гостей в гостиную и посадил на средний диван. Тузы, почетнейшие члены клуба, обступили вновь прибывших. Граф Илья Андреич, проталкиваясь опять через толпу, вышел из гостиной и с другим старшиной через минуту явился, неся большое серебряное блюдо, которое он поднес князю Багратиону. На блюде лежали сочиненные и напечатанные в честь героя стихи. Багратион, увидав блюдо, испуганно оглянулся, как бы отыскивая помощи. Но во всех глазах было требование того, чтобы он покорился. Чувствуя себя в их власти, Багратион решительно, обеими руками, взял блюдо и сердито, укоризненно посмотрел на графа, подносившего его. Кто то услужливо вынул из рук Багратиона блюдо (а то бы он, казалось, намерен был держать его так до вечера и так итти к столу) и обратил его внимание на стихи. «Ну и прочту», как будто сказал Багратион и устремив усталые глаза на бумагу, стал читать с сосредоточенным и серьезным видом. Сам сочинитель взял стихи и стал читать. Князь Багратион склонил голову и слушал.
«Славь Александра век
И охраняй нам Тита на престоле,
Будь купно страшный вождь и добрый человек,
Рифей в отечестве а Цесарь в бранном поле.
Да счастливый Наполеон,
Познав чрез опыты, каков Багратион,
Не смеет утруждать Алкидов русских боле…»
Но еще он не кончил стихов, как громогласный дворецкий провозгласил: «Кушанье готово!» Дверь отворилась, загремел из столовой польский: «Гром победы раздавайся, веселися храбрый росс», и граф Илья Андреич, сердито посмотрев на автора, продолжавшего читать стихи, раскланялся перед Багратионом. Все встали, чувствуя, что обед был важнее стихов, и опять Багратион впереди всех пошел к столу. На первом месте, между двух Александров – Беклешова и Нарышкина, что тоже имело значение по отношению к имени государя, посадили Багратиона: 300 человек разместились в столовой по чинам и важности, кто поважнее, поближе к чествуемому гостю: так же естественно, как вода разливается туда глубже, где местность ниже.
Перед самым обедом граф Илья Андреич представил князю своего сына. Багратион, узнав его, сказал несколько нескладных, неловких слов, как и все слова, которые он говорил в этот день. Граф Илья Андреич радостно и гордо оглядывал всех в то время, как Багратион говорил с его сыном.