CUDA
Тип | |
---|---|
Разработчик | |
Операционная система |
Windows XP и выше, OS X, Linux |
Аппаратная платформа | |
Последняя версия |
7.5 (8 сентября 2015) |
Лицензия | |
Сайт |
[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 |
|
|
|
|
|
- Модели Tesla C1060, Tesla S1070, Tesla C2050/C2070, Tesla M2050/M2070, Tesla S2050 позволяют производить вычисления на GPU с двойной точностью.
Особенности и спецификации различных версий
Необходимо проверить качество перевода и привести статью в соответствие со стилистическими правилами Википедии. Вы можете помочь улучшить эту статью, исправив в ней ошибки.
Оригинал на английском языке — CUDA#Version features and specifications. Эта отметка стоит на статье с 31 октября 2012 года. |
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
Неофициальные ресурсы
- Дмитрий Чеканов. [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].
- Алексей Берилло. [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]. Центр Параллельных Вычислений
Примечания
- ↑ 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].
- ↑ См. Официальное руководство по программированию на 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
- ↑ [www.opennet.ru/opennews/art.shtml?num=33800 NVIDIA передала CUDA Compiler в руки сообщества LLVM — opennet.ru]
- ↑ 1 2 [www.nvidia.ru/object/cuda_learn_products_ru.html Приобрели CUDA?]
- ↑ [news.ferra.ru/hard/2011/04/14/110214/ ASUS оснащает свою версию GeForce GT 520 пассивным кулером - Ferra.ru]
- ↑ Cores perform only single-precision floating-point arithmetics. There is 1 double-precision floating-point unit.
- ↑ 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.
- ↑ [mathema.tician.de/software/pycuda PyCUDA]. [www.webcitation.org/65tfzeDZn Архивировано из первоисточника 4 марта 2012].
- ↑ Арсений Герасименко. [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 (которая оставалась в Богучарове и не хотела оттуда уехать) и незнакомого мужчину. Это был предводитель уезда, сам приехавший к княжне с тем, чтобы представить ей всю необходимость скорого отъезда. Княжна Марья слушала и не понимала его; она ввела его в дом, предложила ему завтракать и села с ним. Потом, извинившись перед предводителем, она подошла к двери старого князя. Доктор с встревоженным лицом вышел к ней и сказал, что нельзя.
– Идите, княжна, идите, идите!
Княжна Марья пошла опять в сад и под горой у пруда, в том месте, где никто не мог видеть, села на траву. Она не знала, как долго она пробыла там. Чьи то бегущие женские шаги по дорожке заставили ее очнуться. Она поднялась и увидала, что Дуняша, ее горничная, очевидно, бежавшая за нею, вдруг, как бы испугавшись вида своей барышни, остановилась.
– Пожалуйте, княжна… князь… – сказала Дуняша сорвавшимся голосом.
– Сейчас, иду, иду, – поспешно заговорила княжна, не давая времени Дуняше договорить ей то, что она имела сказать, и, стараясь не видеть Дуняши, побежала к дому.
– Княжна, воля божья совершается, вы должны быть на все готовы, – сказал предводитель, встречая ее у входной двери.
– Оставьте меня. Это неправда! – злобно крикнула она на него. Доктор хотел остановить ее. Она оттолкнула его и подбежала к двери. «И к чему эти люди с испуганными лицами останавливают меня? Мне никого не нужно! И что они тут делают? – Она отворила дверь, и яркий дневной свет в этой прежде полутемной комнате ужаснул ее. В комнате были женщины и няня. Они все отстранились от кровати, давая ей дорогу. Он лежал все так же на кровати; но строгий вид его спокойного лица остановил княжну Марью на пороге комнаты.