CUDA

Поделись знанием:
Перейти к: навигация, поиск
CUDA
Тип

GPGPU

Разработчик

NVIDIA Corporation

Операционная система

Windows XP и выше, OS X, Linux

Аппаратная платформа

Поддерживаемые GPU

Последняя версия

7.5 (8 сентября 2015)

Лицензия

Freeware

Сайт

[www.nvidia.ru/object/cuda_home_new_ru.html dia.ru/object/cuda_home_new_ru.html]

К:Википедия:Статьи без изображений (тип: не указан)

CUDA (англ. Compute Unified Device Architecture) — программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы Nvidia.

CUDA SDK позволяет программистам реализовывать на специальном упрощённом диалекте языка программирования Си алгоритмы, выполнимые на графических процессорах Nvidia, и включать специальные функции в текст программы на Си. Архитектура CUDA даёт разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического ускорителя и управлять его памятью.





Программная архитектура

Первоначальная версия CUDA SDK была представлена 15 февраля 2007 года. В основе интерфейса программирования приложений CUDA лежит язык Си с некоторыми расширениями. Для успешной трансляции кода на этом языке в состав CUDA SDK входит собственный Си-компилятор командной строки nvcc компании Nvidia. Компилятор nvcc создан на основе открытого компилятора Open64 и предназначен для трансляции host-кода (главного, управляющего кода) и device-кода (аппаратного кода) (файлов с расширением .cu) в объектные файлы, пригодные в процессе сборки конечной программы или библиотеки в любой среде программирования, например, в NetBeans.

В архитектуре CUDA используется модель памяти грид, кластерное моделирование потоков и SIMD-инструкции. Применима не только для высокопроизводительных графических вычислений, но и для различных научных вычислений с использованием видеокарт nVidia. Учёные и исследователи широко используют CUDA в различных областях, включая астрофизику, вычислительную биологию и химию, моделирование динамики жидкостей, электромагнитных взаимодействий, компьютерную томографию, сейсмический анализ и многое другое. В CUDA имеется возможность подключения к приложениям, использующим OpenGL и Direct3D. CUDA — кроссплатформенное программное обеспечение для таких операционных систем как Linux, Mac OS X и Windows.

22 марта 2010 года nVidia выпустила CUDA Toolkit 3.0, который содержал поддержку OpenCL.[1]

Оборудование

Платформа CUDA впервые появились на рынке с выходом чипа NVIDIA восьмого поколения G80 и стала присутствовать во всех последующих сериях графических чипов, которые используются в семействах ускорителей GeForce, Quadro и NVidia Tesla.

Первая серия оборудования, поддерживающая CUDA SDK, G8x, имела 32-битный векторный процессор одинарной точности, использующий CUDA SDK как API (CUDA поддерживает тип double языка Си, однако сейчас его точность понижена до 32-битного с плавающей запятой). Более поздние процессоры GT200 имеют поддержку 64-битной точности (только для SFU), но производительность значительно хуже, чем для 32-битной точности (из-за того, что SFU всего два на каждый потоковый мультипроцессор, а скалярных процессоров — восемь). Графический процессор организует аппаратную многопоточность, что позволяет задействовать все ресурсы графического процессора. Таким образом, открывается перспектива переложить функции физического ускорителя на графический ускоритель (пример реализации — PhysX). Также открываются широкие возможности использования графического оборудования компьютера для выполнения сложных неграфических вычислений: например, в вычислительной биологии и в иных отраслях науки.

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

По сравнению с традиционным подходом к организации вычислений общего назначения посредством возможностей графических API, у архитектуры CUDA отмечают следующие преимущества в этой области:

  • Интерфейс программирования приложений CUDA (CUDA API) основан на стандартном языке программирования Си с некоторыми ограничениями. По мнению разработчиков, это должно упростить и сгладить процесс изучения архитектуры CUDA[2]
  • Разделяемая между потоками память (shared memory) размером в 16 Кб может быть использована под организованный пользователем кэш с более широкой полосой пропускания, чем при выборке из обычных текстур
  • Более эффективные транзакции между памятью центрального процессора и видеопамятью
  • Полная аппаратная поддержка целочисленных и побитовых операций
  • Поддержка компиляции GPU кода средствами открытого LLVM[3]

Ограничения

  • Все функции, выполнимые на устройстве, не поддерживают рекурсии (в версии CUDA Toolkit 3.1 поддерживает указатели и рекурсию) и имеют некоторые другие ограничения

Поддерживаемые GPU и графические ускорители[4]

Перечень устройств от производителя оборудования Nvidia с заявленной полной поддержкой технологии CUDA приведён на официальном сайте Nvidia: [www.nvidia.com/object/cuda_learn_products.html CUDA-Enabled GPU Products] (англ.).

Фактически же, в настоящее время на рынке аппаратных средств для ПК поддержку технологии CUDA обеспечивают следующие периферийные устройства[4]:

Версия спецификации GPU Видеокарты
1.0 G80, G92, G92b, G94, G94b GeForce 8800GTX/Ultra, Tesla C/D/S870, FX4/5600, 360M, GT 420
1.1 G86, G84, G98, G96, G96b, G94, G94b, G92, G92b GeForce 8400GS/GT, 8600GT/GTS, 8800GT/GTS, 9400GT, 9600 GSO, 9600GT, 9800GTX/GX2, 9800GT, GTS 250, GT 120/30/40, FX 4/570, 3/580, 17/18/3700, 4700x2, 1xxM, 32/370M, 3/5/770M, 16/17/27/28/36/37/3800M, NVS420/50
1.2 GT218, GT216, GT215 GeForce 210, GT 220/40, FX380 LP, 1800M, 370/380M, NVS 2/3100M
1.3 GT200, GT200b GeForce GTX 260, GTX 275, GTX 280, GTX 285, GTX 295, Tesla C/M1060, S1070, Quadro CX, FX 3/4/5800
2.0 GF100, GF110 GeForce (GF100) GTX 465, GTX 470, GTX 480, Tesla C2050, C2070, S/M2050/70, Quadro Plex 7000, Quadro 4000, 5000, 6000, GeForce (GF110) GTX 560 TI 448, GTX570, GTX580, GTX590
2.1 GF104, GF114, GF116, GF108, GF106 GeForce 610M, GT 430, GT 440, GT 640, GTS 450, GTX 460, GTX 550 Ti, GTX 560, GTX 560 Ti, 500M, Quadro 600, 2000
3.0 GK104, GK106, GK107 GeForce GTX 690, GTX 680, GTX 670, GTX 660 Ti, GTX 660, GTX 650 Ti, GTX 650, GeForce GTX 680MX, GeForce GTX 680M, GeForce GTX 675MX, GeForce GTX 670MX, GTX 660M, GeForce GT 650M, GeForce GT 645M, GeForce GT 640M
3.5 GK110, GK208 GeForce GTX TITAN, GeForce GTX TITAN Black, GeForce GTX 780 Ti, GeForce GTX 780, GeForce GT 640 (GDDR5), GeForce GT 630 v2, Quadro K6000, Tesla K40, Tesla K20x, Tesla K20
5.0 GM107, GM108 GeForce GTX 750 Ti, GeForce GTX 750 , GeForce GTX 860M, GeForce GTX 850M, GeForce 840M, GeForce 830M
Nvidia GeForce для настольных компьютеров
GeForce GTX TITAN X
GeForce GTX TITAN Z
GeForce GTX TITAN Black
GeForce GTX TITAN
GeForce GTX 980 Ti
GeForce GTX 980
GeForce GTX 970
GeForce GTX 960
GeForce GTX 950
GeForce GTX 780 Ti
GeForce GTX 780
GeForce GTX 770
GeForce GTX 760
GeForce GTX 750 Ti
GeForce GTX 750
GeForce GTX 690
GeForce GTX 680
GeForce GTX 670
GeForce GTX 660 Ti
GeForce GTX 660
GeForce GTX 650 Ti BOOST
GeForce GTX 650 Ti
GeForce GTX 650
GeForce GTX 590
GeForce GTX 580
GeForce GTX 570
GeForce GTX 560 Ti
GeForce GTX 560
GeForce GTX 550 Ti
GeForce GTX 520 [5]
GeForce GTX 480
GeForce GTX 470
GeForce GTX 465
GeForce GTX 460
GeForce GTS 450
GeForce GTX 295
GeForce GTX 285
GeForce GTX 280
GeForce GTX 275
GeForce GTX 260
GeForce GTS 250
GeForce GT 240
GeForce GT 220
GeForce 210
GeForce GTS 150
GeForce GT 130
GeForce GT 120
GeForce G100
GeForce 9800 GX2
GeForce 9800 GTX+
GeForce 9800 GTX
GeForce 9800 GT
GeForce 9600 GSO
GeForce 9600 GT
GeForce 9500 GT
GeForce 9400 GT
GeForce 9400 mGPU
GeForce 9300 mGPU
GeForce 8800 GTS 512
GeForce 8800 GT
GeForce 8600 GTS
GeForce 8600 GT
GeForce 8500 GT
GeForce 8400 GS
Nvidia GeForce для мобильных компьютеров
GeForce GTX 580M
GeForce GTX 570M
GeForce GTX 560M
GeForce GT 555M
GeForce GT 540M
GeForce GT 525M
GeForce GT 520M
GeForce GTX 485M
GeForce GTX 480M
GeForce GTX 470M
GeForce GTX 460M
GeForce GT 445M
GeForce GT 435M
GeForce GT 425M
GeForce GT 420M
GeForce GT 415M
GeForce GTX 285M
GeForce GTX 280M
GeForce GTX 260M
GeForce GTS 360M
GeForce GTS 350M
GeForce GTS 250M
GeForce GTS 160M
GeForce GTS 150M
GeForce GT 335M
GeForce GT 330M
GeForce GT 325M
GeForce GT 240M
GeForce GT 130M
GeForce G210M
GeForce G110M
GeForce G105M
GeForce 310M
GeForce 305M
GeForce 9800M GTX
GeForce 9800M GT
GeForce 9800M GTS
GeForce 9700M GTS
GeForce 9700M GT
GeForce 9650M GS
GeForce 9600M GT
GeForce 9600M GS
GeForce 9500M GS
GeForce 9500M G
GeForce 9300M GS
GeForce 9300M G
GeForce 9200M GS
GeForce 9100M G
GeForce 8800M GTS
GeForce 8700M GT
GeForce 8600M GT
GeForce 8600M GS
GeForce 8400M GT
GeForce 8400M GS
Nvidia Tesla*
Tesla C2050/C2070
Tesla M2050/M2070/M2090
Tesla S2050
Tesla S1070
Tesla M1060
Tesla C1060
Tesla C870
Tesla D870
Tesla S870
Nvidia Quadro для настольных компьютеров
Quadro 6000
Quadro 5000
Quadro 4000
Quadro 2000
Quadro 600
Quadro FX 5800
Quadro FX 5600
Quadro FX 4800
Quadro FX 4700 X2
Quadro FX 4600
Quadro FX 3700
Quadro FX 1700
Quadro FX 570
Quadro FX 470
Quadro FX 380 Low Profile
Quadro FX 370
Quadro FX 370 Low Profile
Quadro CX
Quadro NVS 450
Quadro NVS 420
Quadro NVS 290
Quadro Plex 2100 D4
Quadro Plex 2200 D2
Quadro Plex 2100 S4
Quadro Plex 1000 Model IV
Nvidia Quadro для мобильных компьютеров
Quadro 5010M
Quadro 5000M
Quadro 4000M
Quadro 3000M
Quadro 2000M
Quadro 1000M
Quadro FX 3800M
Quadro FX 3700M
Quadro FX 3600M
Quadro FX 2800M
Quadro FX 2700M
Quadro FX 1800M
Quadro FX 1700M
Quadro FX 1600M
Quadro FX 880M
Quadro FX 770M
Quadro FX 570M
Quadro FX 380M
Quadro FX 370M
Quadro FX 360M
Quadro NVS 5100M
Quadro NVS 4200M
Quadro NVS 3100M
Quadro NVS 2100M
Quadro NVS 320M
Quadro NVS 160M
Quadro NVS 150M
Quadro NVS 140M
Quadro NVS 135M
Quadro NVS 130M
  • Модели Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 позволяют производить вычисления на GPU с двойной точностью.

Особенности и спецификации различных версий

Feature support (unlisted features are
supported for all compute capabilities)
Compute capability (version)
1.0 1.1 1.2 1.3 2.x 3.0 3.5
Integer atomic functions operating on
32-bit words in global memory
Нет Да
atomicExch() operating on 32-bit
floating point values in global memory
Integer atomic functions operating on
32-bit words in shared memory
Нет Да
atomicExch() operating on 32-bit
floating point values in shared memory
Integer atomic functions operating on
64-bit words in global memory
Warp vote functions
Double-precision floating-point operations Нет Да
Atomic functions operating on 64-bit
integer values in shared memory
Нет Да
Floating-point atomic addition operating on
32-bit words in global and shared memory
_ballot()
_threadfence_system()
_syncthreads_count(),
_syncthreads_and(),
_syncthreads_or()
Surface functions
3D grid of thread block
Warp shuffle functions Нет Да
Funnel shift Нет Да
Dynamic parallelism
Технические характеристики Compute capability (версия)
1.0 1.1 1.2 1.3 2.x 3.0 3.5
Максимальная размерность сетки 2 3
Максимальный размер сетки по x, y или z 65535 231-1
Максимальная размерность потока блока 3
Максимальные x и y размера блока 512 1024
Максимальное z размера блока 64
Максимальное количество потоков в блоке 512 1024
Размер warp 32
Максимальное количество блоков в мультипроцессоре 8 16
Максимальное количество warps в мультипроцессоре 24 32 48 64
Максимальное количество потоков в мультипроцессоре 768 1024 1536 2048
Число 32-разрядных регистров в мультипроцессоре 8 K 16 K 32 K 64 K
Максимальное количество 32-битных регистров на поток 128 63 255
Максимальный объём разделяемой памяти в мультипроцессоре 16 KB 48 KB
Количество банков, разделяемой памяти 16 32
Объём локальной памяти для каждого потока 16 KB 512 KB
Размер константной памяти 64 KB
Размер кэша в мультипроцессоре для константной памяти 8 KB
Размер кэша в мультипроцессоре для текстурной памяти От 6 KB до 8 KB, в зависимости от устройства
Maximum width for 1D texture
reference bound to a CUDA array
8192 65536
Maximum width for 1D texture
reference bound to linear memory
227
Maximum width and number of layers
for a 1D layered texture reference
8192 x 512 16384 x 2048
Maximum width and height for 2D
texture reference bound to a CUDA array
65536 x 32768 65536 x 65535
Maximum width and height for 2D
texture reference bound to a linear memory
65000 x 65000
Maximum width and height for 2D
texture reference bound to a CUDA array
supporting texture gather
N/A 16384 x 16384
Maximum width, height, and number
of layers for a 2D layered texture reference
8192 x 8192 x 512 16384 x 16384 x 2048
Maximum width, height and depth
for a 3D texture reference bound to linear
memory or a CUDA array
2048 x 2048 x 2048 4096 x 4096 x 4096
Maximum width (and height) for a cubemap
texture reference
N/A 16384
Maximum width (and height) and number
of layers for a cubemap layered texture reference
N/A 16384 x 2046
Maximum number of textures that
can be bound to a kernel
128 256
Maximum width for a 1D surface
reference bound to a CUDA array
Not
supported
65536
Maximum width and number of layers
for a 1D layered surface reference
65536 x 2048
Maximum width and height for a 2D
surface reference bound to a CUDA array
65536 x 32768
Maximum width, height, and number
of layers for a 2D layered surface reference
65536 x 32768 x 2048
Maximum width, height, and depth
for a 3D surface reference bound to a CUDA array
65536 x 32768 x 2048
Maximum width (and height) for a cubemap
surface reference bound to a CUDA array
32768
Maximum width (and height) and number
of layers for a cubemap layered surface reference
32768 x 2046
Maximum number of surfaces that
can be bound to a kernel
8 16
Maximum number of instructions per
kernel
2 миллиона 512 миллионов
Architecture specifications Compute capability (version)
1.0 1.1 1.2 1.3 2.0 2.1 3.0 3.5
Number of cores for integer and floating-point arithmetic functions operations 8[6] 32 48 192
Number of special function units for single-precision floating-point transcendental functions 2 4 8 32
Number of texture filtering units for every texture address unit or render output unit (ROP) 2 4 8 32
Number of warp schedulers 1 2 4
Number of instructions issued at once by scheduler 1 1 2[7] 2

Пример

Этот пример кода на C++ загрузки текстур из изображения в массив на GPU:

cudaArray* cu_array;
texture<float, 2> tex;

// Allocate array
cudaMalloc( &cu_array, cudaCreateChannelDesc<float>(), width, height );

// Copy image data to array
cudaMemcpy( cu_array, image, width*height, cudaMemcpyHostToDevice);

// Bind the array to the texture
cudaBindTexture( tex, cu_array);

// Run kernel
dim3 blockDim(16, 16, 1);
dim3 gridDim(width / blockDim.x, height / blockDim.y, 1);
kernel<<< gridDim, blockDim, 0 >>>(d_odata, width, height);
cudaUnbindTexture(tex);

__global__ void kernel(float* odata, int height, int width)
{
   unsigned int x = blockIdx.x*blockDim.x + threadIdx.x;
   unsigned int y = blockIdx.y*blockDim.y + threadIdx.y;
   float c = texfetch(tex, x, y);
   odata[y*width+x] = c;
}

Пример программы на языке Python, перемножающий элементы массива средствами GPU. Взаимодействие идёт с использованием PyCUDA [8]

import pycuda.driver as drv
import numpy

drv.init()
dev = drv.Device(0)
ctx = dev.make_context()

mod = drv.SourceModule("""
__global__ void multiply_them(float *dest, float *a, float *b)
{
  const int i = threadIdx.x;
  dest[i] = a[i] * b[i];
}
""")

multiply_them = mod.get_function("multiply_them")

a = numpy.random.randn(400).astype(numpy.float32)
b = numpy.random.randn(400).astype(numpy.float32)

dest = numpy.zeros_like(a)
multiply_them(
        drv.Out(dest), drv.In(a), drv.In(b),
        block=(400,1,1))

print dest-a*b

Преподавание CUDA в вузах

По состоянию на декабрь 2009 года, программная модель CUDA преподается в 269 университетах по всему миру. В России обучающие курсы по CUDA читаются в вузах:

Кроме того, в декабре 2009 года было объявлено о начале работы первого в России научно-образовательного центра «Параллельные вычисления», расположенного в городе Дубна, в задачи которого входят обучение и консультации по решению сложных вычислительных задач на GPU.[9]

Напишите отзыв о статье "CUDA"

Ссылки

Официальные ресурсы

  • [www.nvidia.ru/object/cuda_home_new_ru.html CUDA Zone] (рус.) — официальный сайт CUDA
  • [forums.nvidia.com/index.php?showforum=62 CUDA GPU Computing] (англ.) — официальные веб-форумы, посвящённые вычислениям CUDA

Неофициальные ресурсы

Tom's Hardware
  • Дмитрий Чеканов. [www.thg.ru/graphic/nvidia_cuda/print.html nVidia CUDA: вычисления на видеокарте или смерть CPU?]. Tom's Hardware (22 июня 2008 г.). Проверено 20 января 2009. [www.webcitation.org/65tg0HcQV Архивировано из первоисточника 4 марта 2012].
  • Дмитрий Чеканов. [www.thg.ru/graphic/nvidia_cuda_test/print.html nVidia CUDA: тесты приложений на GPU для массового рынка]. Tom's Hardware (19 мая 2009 г.). Проверено 19 мая 2009. [www.webcitation.org/65tg2gyw9 Архивировано из первоисточника 4 марта 2012].
iXBT.com
  • Алексей Берилло. [www.ixbt.com/video3/cuda-1.shtml NVIDIA CUDA — неграфические вычисления на графических процессорах. Часть 1]. iXBT.com (23 сентября 2008 г.). Проверено 20 января 2009. [www.webcitation.org/65tg5GMpD Архивировано из первоисточника 4 марта 2012].
  • Алексей Берилло. [www.ixbt.com/video3/cuda-2.shtml NVIDIA CUDA — неграфические вычисления на графических процессорах. Часть 2]. iXBT.com (22 октября 2008 г.). — Примеры внедрения NVIDIA CUDA. Проверено 20 января 2009. [www.webcitation.org/65tg6fVt0 Архивировано из первоисточника 4 марта 2012].
Другие ресурсы
  • Боресков Алексей Викторович. [www.steps3d.narod.ru/tutorials/cuda-tutorial.html Основы CUDA] (20 января 2009 г.). Проверено 20 января 2009. [www.webcitation.org/65tg7z0I9 Архивировано из первоисточника 4 марта 2012].
  • Владимир Фролов. [cgm.computergraphics.ru/issues/issue16/cuda Введение в технологию CUDA]. Сетевой журнал «Компьютерная графика и мультимедиа» (19 декабря 2008 г.). Проверено 28 октября 2009. [www.webcitation.org/65tg9Hcl3 Архивировано из первоисточника 4 марта 2012].
  • Игорь Осколков. [www.computerra.ru/interactive/423392/ NVIDIA CUDA – доступный билет в мир больших вычислений]. Компьютерра (30 апреля 2009 г.). Проверено 3 мая 2009.
  • Владимир Фролов. [www.uraldev.ru/articles/id/33 Введение в технологию CUDA] (1 августа 2009 г.). Проверено 3 апреля 2010. [www.webcitation.org/65tgAbswT Архивировано из первоисточника 4 марта 2012].
  • [www.gpgpu.ru GPGPU.ru]. Использование видеокарт для вычислений
  • [parallelcompute.sourceforge.net/parcom_ru.php ParallelCompute.sourceforge.net]. Центр Параллельных Вычислений

Примечания

  1. Theo Valich. [www.brightsideofnews.com/news/2010/3/22/nvidia-launches-cuda-toolkit-302c-expands-opencl.aspx nVidia Launches CUDA Toolkit 3.0, expands OpenCL] (англ.). Bright Side Of News (22 марта 2010 года). Проверено 5 апреля 2010. [www.webcitation.org/65tfxtFWz Архивировано из первоисточника 4 марта 2012].
  2. См. Официальное руководство по программированию на CUDA, вер. 1.1 // [developer.download.nvidia.com/compute/cuda/1_1/NVIDIA_CUDA_Programming_Guide_1.1.pdf CUDA Programming Guide]. Chapter 1. Introduction to CUDA → 1.2 CUDA: A New Architecture for Computing on the GPU
  3. [www.opennet.ru/opennews/art.shtml?num=33800 NVIDIA передала CUDA Compiler в руки сообщества LLVM — opennet.ru]
  4. 1 2 [www.nvidia.ru/object/cuda_learn_products_ru.html Приобрели CUDA?]
  5. [news.ferra.ru/hard/2011/04/14/110214/ ASUS оснащает свою версию GeForce GT 520 пассивным кулером - Ferra.ru]
  6. Cores perform only single-precision floating-point arithmetics. There is 1 double-precision floating-point unit.
  7. The first scheduler is in charge of the warps with an odd ID and the second scheduler is in charge of the warps with an even ID.
  8. [mathema.tician.de/software/pycuda PyCUDA]. [www.webcitation.org/65tfzeDZn Архивировано из первоисточника 4 марта 2012].
  9. Арсений Герасименко. [www.3dnews.ru/news/v_dubne_budut_uchit_reshat_vichislitelnie_zadachi_na_gpu/ В Дубне будут учить решать задачи на GPU и в среде CUDA]. 3DNews (28 декабря 2009 года). Проверено 10 февраля 2010.

См. также

Отрывок, характеризующий CUDA

Он увидал тут тонкую хитрость, как всегда во всем видят хитрость люди, подобные Лаврушке, насупился и помолчал.
– Оно значит: коли быть сраженью, – сказал он задумчиво, – и в скорости, так это так точно. Ну, а коли пройдет три дня апосля того самого числа, тогда, значит, это самое сражение в оттяжку пойдет.
Наполеону перевели это так: «Si la bataille est donnee avant trois jours, les Francais la gagneraient, mais que si elle serait donnee plus tard, Dieu seul sait ce qui en arrivrait», [«Ежели сражение произойдет прежде трех дней, то французы выиграют его, но ежели после трех дней, то бог знает что случится».] – улыбаясь передал Lelorgne d'Ideville. Наполеон не улыбнулся, хотя он, видимо, был в самом веселом расположении духа, и велел повторить себе эти слова.
Лаврушка заметил это и, чтобы развеселить его, сказал, притворяясь, что не знает, кто он.
– Знаем, у вас есть Бонапарт, он всех в мире побил, ну да об нас другая статья… – сказал он, сам не зная, как и отчего под конец проскочил в его словах хвастливый патриотизм. Переводчик передал эти слова Наполеону без окончания, и Бонапарт улыбнулся. «Le jeune Cosaque fit sourire son puissant interlocuteur», [Молодой казак заставил улыбнуться своего могущественного собеседника.] – говорит Тьер. Проехав несколько шагов молча, Наполеон обратился к Бертье и сказал, что он хочет испытать действие, которое произведет sur cet enfant du Don [на это дитя Дона] известие о том, что тот человек, с которым говорит этот enfant du Don, есть сам император, тот самый император, который написал на пирамидах бессмертно победоносное имя.
Известие было передано.
Лаврушка (поняв, что это делалось, чтобы озадачить его, и что Наполеон думает, что он испугается), чтобы угодить новым господам, тотчас же притворился изумленным, ошеломленным, выпучил глаза и сделал такое же лицо, которое ему привычно было, когда его водили сечь. «A peine l'interprete de Napoleon, – говорит Тьер, – avait il parle, que le Cosaque, saisi d'une sorte d'ebahissement, no profera plus une parole et marcha les yeux constamment attaches sur ce conquerant, dont le nom avait penetre jusqu'a lui, a travers les steppes de l'Orient. Toute sa loquacite s'etait subitement arretee, pour faire place a un sentiment d'admiration naive et silencieuse. Napoleon, apres l'avoir recompense, lui fit donner la liberte, comme a un oiseau qu'on rend aux champs qui l'ont vu naitre». [Едва переводчик Наполеона сказал это казаку, как казак, охваченный каким то остолбенением, не произнес более ни одного слова и продолжал ехать, не спуская глаз с завоевателя, имя которого достигло до него через восточные степи. Вся его разговорчивость вдруг прекратилась и заменилась наивным и молчаливым чувством восторга. Наполеон, наградив казака, приказал дать ему свободу, как птице, которую возвращают ее родным полям.]
Наполеон поехал дальше, мечтая о той Moscou, которая так занимала его воображение, a l'oiseau qu'on rendit aux champs qui l'on vu naitre [птица, возвращенная родным полям] поскакал на аванпосты, придумывая вперед все то, чего не было и что он будет рассказывать у своих. Того же, что действительно с ним было, он не хотел рассказывать именно потому, что это казалось ему недостойным рассказа. Он выехал к казакам, расспросил, где был полк, состоявший в отряде Платова, и к вечеру же нашел своего барина Николая Ростова, стоявшего в Янкове и только что севшего верхом, чтобы с Ильиным сделать прогулку по окрестным деревням. Он дал другую лошадь Лаврушке и взял его с собой.


Княжна Марья не была в Москве и вне опасности, как думал князь Андрей.
После возвращения Алпатыча из Смоленска старый князь как бы вдруг опомнился от сна. Он велел собрать из деревень ополченцев, вооружить их и написал главнокомандующему письмо, в котором извещал его о принятом им намерении оставаться в Лысых Горах до последней крайности, защищаться, предоставляя на его усмотрение принять или не принять меры для защиты Лысых Гор, в которых будет взят в плен или убит один из старейших русских генералов, и объявил домашним, что он остается в Лысых Горах.
Но, оставаясь сам в Лысых Горах, князь распорядился об отправке княжны и Десаля с маленьким князем в Богучарово и оттуда в Москву. Княжна Марья, испуганная лихорадочной, бессонной деятельностью отца, заменившей его прежнюю опущенность, не могла решиться оставить его одного и в первый раз в жизни позволила себе не повиноваться ему. Она отказалась ехать, и на нее обрушилась страшная гроза гнева князя. Он напомнил ей все, в чем он был несправедлив против нее. Стараясь обвинить ее, он сказал ей, что она измучила его, что она поссорила его с сыном, имела против него гадкие подозрения, что она задачей своей жизни поставила отравлять его жизнь, и выгнал ее из своего кабинета, сказав ей, что, ежели она не уедет, ему все равно. Он сказал, что знать не хочет о ее существовании, но вперед предупреждает ее, чтобы она не смела попадаться ему на глаза. То, что он, вопреки опасений княжны Марьи, не велел насильно увезти ее, а только не приказал ей показываться на глаза, обрадовало княжну Марью. Она знала, что это доказывало то, что в самой тайне души своей он был рад, что она оставалась дома и не уехала.
На другой день после отъезда Николушки старый князь утром оделся в полный мундир и собрался ехать главнокомандующему. Коляска уже была подана. Княжна Марья видела, как он, в мундире и всех орденах, вышел из дома и пошел в сад сделать смотр вооруженным мужикам и дворовым. Княжна Марья свдела у окна, прислушивалась к его голосу, раздававшемуся из сада. Вдруг из аллеи выбежало несколько людей с испуганными лицами.
Княжна Марья выбежала на крыльцо, на цветочную дорожку и в аллею. Навстречу ей подвигалась большая толпа ополченцев и дворовых, и в середине этой толпы несколько людей под руки волокли маленького старичка в мундире и орденах. Княжна Марья подбежала к нему и, в игре мелкими кругами падавшего света, сквозь тень липовой аллеи, не могла дать себе отчета в том, какая перемена произошла в его лице. Одно, что она увидала, было то, что прежнее строгое и решительное выражение его лица заменилось выражением робости и покорности. Увидав дочь, он зашевелил бессильными губами и захрипел. Нельзя было понять, чего он хотел. Его подняли на руки, отнесли в кабинет и положили на тот диван, которого он так боялся последнее время.
Привезенный доктор в ту же ночь пустил кровь и объявил, что у князя удар правой стороны.
В Лысых Горах оставаться становилось более и более опасным, и на другой день после удара князя, повезли в Богучарово. Доктор поехал с ними.
Когда они приехали в Богучарово, Десаль с маленьким князем уже уехали в Москву.
Все в том же положении, не хуже и не лучше, разбитый параличом, старый князь три недели лежал в Богучарове в новом, построенном князем Андреем, доме. Старый князь был в беспамятстве; он лежал, как изуродованный труп. Он не переставая бормотал что то, дергаясь бровями и губами, и нельзя было знать, понимал он или нет то, что его окружало. Одно можно было знать наверное – это то, что он страдал и, чувствовал потребность еще выразить что то. Но что это было, никто не мог понять; был ли это какой нибудь каприз больного и полусумасшедшего, относилось ли это до общего хода дел, или относилось это до семейных обстоятельств?
Доктор говорил, что выражаемое им беспокойство ничего не значило, что оно имело физические причины; но княжна Марья думала (и то, что ее присутствие всегда усиливало его беспокойство, подтверждало ее предположение), думала, что он что то хотел сказать ей. Он, очевидно, страдал и физически и нравственно.
Надежды на исцеление не было. Везти его было нельзя. И что бы было, ежели бы он умер дорогой? «Не лучше ли бы было конец, совсем конец! – иногда думала княжна Марья. Она день и ночь, почти без сна, следила за ним, и, страшно сказать, она часто следила за ним не с надеждой найти призкаки облегчения, но следила, часто желая найти признаки приближения к концу.
Как ни странно было княжне сознавать в себе это чувство, но оно было в ней. И что было еще ужаснее для княжны Марьи, это было то, что со времени болезни ее отца (даже едва ли не раньше, не тогда ли уж, когда она, ожидая чего то, осталась с ним) в ней проснулись все заснувшие в ней, забытые личные желания и надежды. То, что годами не приходило ей в голову – мысли о свободной жизни без вечного страха отца, даже мысли о возможности любви и семейного счастия, как искушения дьявола, беспрестанно носились в ее воображении. Как ни отстраняла она от себя, беспрестанно ей приходили в голову вопросы о том, как она теперь, после того, устроит свою жизнь. Это были искушения дьявола, и княжна Марья знала это. Она знала, что единственное орудие против него была молитва, и она пыталась молиться. Она становилась в положение молитвы, смотрела на образа, читала слова молитвы, но не могла молиться. Она чувствовала, что теперь ее охватил другой мир – житейской, трудной и свободной деятельности, совершенно противоположный тому нравственному миру, в который она была заключена прежде и в котором лучшее утешение была молитва. Она не могла молиться и не могла плакать, и житейская забота охватила ее.
Оставаться в Вогучарове становилось опасным. Со всех сторон слышно было о приближающихся французах, и в одной деревне, в пятнадцати верстах от Богучарова, была разграблена усадьба французскими мародерами.
Доктор настаивал на том, что надо везти князя дальше; предводитель прислал чиновника к княжне Марье, уговаривая ее уезжать как можно скорее. Исправник, приехав в Богучарово, настаивал на том же, говоря, что в сорока верстах французы, что по деревням ходят французские прокламации и что ежели княжна не уедет с отцом до пятнадцатого, то он ни за что не отвечает.
Княжна пятнадцатого решилась ехать. Заботы приготовлений, отдача приказаний, за которыми все обращались к ней, целый день занимали ее. Ночь с четырнадцатого на пятнадцатое она провела, как обыкновенно, не раздеваясь, в соседней от той комнаты, в которой лежал князь. Несколько раз, просыпаясь, она слышала его кряхтенье, бормотанье, скрип кровати и шаги Тихона и доктора, ворочавших его. Несколько раз она прислушивалась у двери, и ей казалось, что он нынче бормотал громче обыкновенного и чаще ворочался. Она не могла спать и несколько раз подходила к двери, прислушиваясь, желая войти и не решаясь этого сделать. Хотя он и не говорил, но княжна Марья видела, знала, как неприятно было ему всякое выражение страха за него. Она замечала, как недовольно он отвертывался от ее взгляда, иногда невольно и упорно на него устремленного. Она знала, что ее приход ночью, в необычное время, раздражит его.
Но никогда ей так жалко не было, так страшно не было потерять его. Она вспоминала всю свою жизнь с ним, и в каждом слове, поступке его она находила выражение его любви к ней. Изредка между этими воспоминаниями врывались в ее воображение искушения дьявола, мысли о том, что будет после его смерти и как устроится ее новая, свободная жизнь. Но с отвращением отгоняла она эти мысли. К утру он затих, и она заснула.
Она проснулась поздно. Та искренность, которая бывает при пробуждении, показала ей ясно то, что более всего в болезни отца занимало ее. Она проснулась, прислушалась к тому, что было за дверью, и, услыхав его кряхтенье, со вздохом сказала себе, что было все то же.
– Да чему же быть? Чего же я хотела? Я хочу его смерти! – вскрикнула она с отвращением к себе самой.
Она оделась, умылась, прочла молитвы и вышла на крыльцо. К крыльцу поданы были без лошадей экипажи, в которые укладывали вещи.
Утро было теплое и серое. Княжна Марья остановилась на крыльце, не переставая ужасаться перед своей душевной мерзостью и стараясь привести в порядок свои мысли, прежде чем войти к нему.
Доктор сошел с лестницы и подошел к ней.
– Ему получше нынче, – сказал доктор. – Я вас искал. Можно кое что понять из того, что он говорит, голова посвежее. Пойдемте. Он зовет вас…
Сердце княжны Марьи так сильно забилось при этом известии, что она, побледнев, прислонилась к двери, чтобы не упасть. Увидать его, говорить с ним, подпасть под его взгляд теперь, когда вся душа княжны Марьи была переполнена этих страшных преступных искушений, – было мучительно радостно и ужасно.
– Пойдемте, – сказал доктор.
Княжна Марья вошла к отцу и подошла к кровати. Он лежал высоко на спине, с своими маленькими, костлявыми, покрытыми лиловыми узловатыми жилками ручками на одеяле, с уставленным прямо левым глазом и с скосившимся правым глазом, с неподвижными бровями и губами. Он весь был такой худенький, маленький и жалкий. Лицо его, казалось, ссохлось или растаяло, измельчало чертами. Княжна Марья подошла и поцеловала его руку. Левая рука сжала ее руку так, что видно было, что он уже давно ждал ее. Он задергал ее руку, и брови и губы его сердито зашевелились.
Она испуганно глядела на него, стараясь угадать, чего он хотел от нее. Когда она, переменя положение, подвинулась, так что левый глаз видел ее лицо, он успокоился, на несколько секунд не спуская с нее глаза. Потом губы и язык его зашевелились, послышались звуки, и он стал говорить, робко и умоляюще глядя на нее, видимо, боясь, что она не поймет его.
Княжна Марья, напрягая все силы внимания, смотрела на него. Комический труд, с которым он ворочал языком, заставлял княжну Марью опускать глаза и с трудом подавлять поднимавшиеся в ее горле рыдания. Он сказал что то, по нескольку раз повторяя свои слова. Княжна Марья не могла понять их; но она старалась угадать то, что он говорил, и повторяла вопросительно сказанные им слона.
– Гага – бои… бои… – повторил он несколько раз. Никак нельзя было понять этих слов. Доктор думал, что он угадал, и, повторяя его слова, спросил: княжна боится? Он отрицательно покачал головой и опять повторил то же…
– Душа, душа болит, – разгадала и сказала княжна Марья. Он утвердительно замычал, взял ее руку и стал прижимать ее к различным местам своей груди, как будто отыскивая настоящее для нее место.
– Все мысли! об тебе… мысли, – потом выговорил он гораздо лучше и понятнее, чем прежде, теперь, когда он был уверен, что его понимают. Княжна Марья прижалась головой к его руке, стараясь скрыть свои рыдания и слезы.
Он рукой двигал по ее волосам.
– Я тебя звал всю ночь… – выговорил он.
– Ежели бы я знала… – сквозь слезы сказала она. – Я боялась войти.
Он пожал ее руку.
– Не спала ты?
– Нет, я не спала, – сказала княжна Марья, отрицательно покачав головой. Невольно подчиняясь отцу, она теперь так же, как он говорил, старалась говорить больше знаками и как будто тоже с трудом ворочая язык.
– Душенька… – или – дружок… – Княжна Марья не могла разобрать; но, наверное, по выражению его взгляда, сказано было нежное, ласкающее слово, которого он никогда не говорил. – Зачем не пришла?
«А я желала, желала его смерти! – думала княжна Марья. Он помолчал.
– Спасибо тебе… дочь, дружок… за все, за все… прости… спасибо… прости… спасибо!.. – И слезы текли из его глаз. – Позовите Андрюшу, – вдруг сказал он, и что то детски робкое и недоверчивое выразилось в его лице при этом спросе. Он как будто сам знал, что спрос его не имеет смысла. Так, по крайней мере, показалось княжне Марье.
– Я от него получила письмо, – отвечала княжна Марья.
Он с удивлением и робостью смотрел на нее.
– Где же он?
– Он в армии, mon pere, в Смоленске.
Он долго молчал, закрыв глаза; потом утвердительно, как бы в ответ на свои сомнения и в подтверждение того, что он теперь все понял и вспомнил, кивнул головой и открыл глаза.
– Да, – сказал он явственно и тихо. – Погибла Россия! Погубили! – И он опять зарыдал, и слезы потекли у него из глаз. Княжна Марья не могла более удерживаться и плакала тоже, глядя на его лицо.
Он опять закрыл глаза. Рыдания его прекратились. Он сделал знак рукой к глазам; и Тихон, поняв его, отер ему слезы.
Потом он открыл глаза и сказал что то, чего долго никто не мог понять и, наконец, понял и передал один Тихон. Княжна Марья отыскивала смысл его слов в том настроении, в котором он говорил за минуту перед этим. То она думала, что он говорит о России, то о князе Андрее, то о ней, о внуке, то о своей смерти. И от этого она не могла угадать его слов.
– Надень твое белое платье, я люблю его, – говорил он.
Поняв эти слова, княжна Марья зарыдала еще громче, и доктор, взяв ее под руку, вывел ее из комнаты на террасу, уговаривая ее успокоиться и заняться приготовлениями к отъезду. После того как княжна Марья вышла от князя, он опять заговорил о сыне, о войне, о государе, задергал сердито бровями, стал возвышать хриплый голос, и с ним сделался второй и последний удар.
Княжна Марья остановилась на террасе. День разгулялся, было солнечно и жарко. Она не могла ничего понимать, ни о чем думать и ничего чувствовать, кроме своей страстной любви к отцу, любви, которой, ей казалось, она не знала до этой минуты. Она выбежала в сад и, рыдая, побежала вниз к пруду по молодым, засаженным князем Андреем, липовым дорожкам.
– Да… я… я… я. Я желала его смерти. Да, я желала, чтобы скорее кончилось… Я хотела успокоиться… А что ж будет со мной? На что мне спокойствие, когда его не будет, – бормотала вслух княжна Марья, быстрыми шагами ходя по саду и руками давя грудь, из которой судорожно вырывались рыдания. Обойдя по саду круг, который привел ее опять к дому, она увидала идущих к ней навстречу m lle Bourienne (которая оставалась в Богучарове и не хотела оттуда уехать) и незнакомого мужчину. Это был предводитель уезда, сам приехавший к княжне с тем, чтобы представить ей всю необходимость скорого отъезда. Княжна Марья слушала и не понимала его; она ввела его в дом, предложила ему завтракать и села с ним. Потом, извинившись перед предводителем, она подошла к двери старого князя. Доктор с встревоженным лицом вышел к ней и сказал, что нельзя.
– Идите, княжна, идите, идите!
Княжна Марья пошла опять в сад и под горой у пруда, в том месте, где никто не мог видеть, села на траву. Она не знала, как долго она пробыла там. Чьи то бегущие женские шаги по дорожке заставили ее очнуться. Она поднялась и увидала, что Дуняша, ее горничная, очевидно, бежавшая за нею, вдруг, как бы испугавшись вида своей барышни, остановилась.
– Пожалуйте, княжна… князь… – сказала Дуняша сорвавшимся голосом.
– Сейчас, иду, иду, – поспешно заговорила княжна, не давая времени Дуняше договорить ей то, что она имела сказать, и, стараясь не видеть Дуняши, побежала к дому.
– Княжна, воля божья совершается, вы должны быть на все готовы, – сказал предводитель, встречая ее у входной двери.
– Оставьте меня. Это неправда! – злобно крикнула она на него. Доктор хотел остановить ее. Она оттолкнула его и подбежала к двери. «И к чему эти люди с испуганными лицами останавливают меня? Мне никого не нужно! И что они тут делают? – Она отворила дверь, и яркий дневной свет в этой прежде полутемной комнате ужаснул ее. В комнате были женщины и няня. Они все отстранились от кровати, давая ей дорогу. Он лежал все так же на кровати; но строгий вид его спокойного лица остановил княжну Марью на пороге комнаты.