Главная » Видеокарты » От клика до выстрела — аппаратное тестирование лага в играх

От клика до выстрела — аппаратное тестирование лага в играх

Игровые возможности компьютеров и отдельных компонентов системы испокон веков принято измерять в кадрах за секунду, а золотым стандартом тестирования являются длительные бенчмарки, которые позволяют сравнить различные устройства по устойчивому быстродействию. Тем не менее, в последние годы на производительность GPU начали смотреть и под другим углом. В обзорах видеокарт появились графики длительности рендеринга отдельных кадров, во весь рост встал вопрос стабильности FPS, а средние показатели фреймрейта теперь приятно сопровождать минимальными значениями, отфильтрованными по границе 99-го процентиля времени кадра. Усовершенствования тестовых методик направлены на поиск задержек, растворяющихся в усредненных показателях кадровой частоты, но порой вполне заметных невооруженным глазом пользователя.

Тем не менее, любые программные измерительные инструменты, работающие внутри тестовой системы, дают лишь косвенную оценку скрытой переменной, которая имеет определяющее значение для комфортной игры — времени задержки между нажатием на кнопку клавиатуры или мышки до изменения картинки на мониторе. Приходится руководствоваться простым правилом, которое гласит, что чем выше FPS в игре и чем он стабильнее, тем меньше будет время реакции на ввод. Тем более, часть проблемы уже решили быстрые мониторы с частотой обновления 120, 144 или 240 Гц, не говоря уже о будущих 360-герцевых экранах.

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

Но теперь все изменится — встречайте LDAT (Latency Display Analysis Tool), универсальное аппаратное средство для измерения игровой латентности. Читатели, знакомые с такими аббревиатурами, как FCAT, могут догадаться, что это продукт NVIDIA. Так и есть, компания предложила устройство избранным IT-изданиям, включая редакцию 3DNews. Давайте посмотрим, сможет ли новая измерительная методика пролить свет на такое загадочное явление, как задержка ввода, и помочь геймерам с выбором комплектующих для киберспортивных соревнований.

#LDAT — как это работает

Принцип работы LDAT очень прост. Ядром системы является высокоскоростной светочувствительный датчик с микроконтроллером, который монтируется в нужной точке экрана. К нему подключена модифицированная мышь, а управляющее ПО по интерфейсу USB засекает время, разделяющее нажатие на клавишу и локальный скачок яркости изображения. Таким образом, если поместить датчик поверх ствола оружия в каком-нибудь шутере, мы получим точное значение задержки, которая требуется монитору, компьютеру и всему программному стэку (включая драйверы устройств, игру и операционную систему), чтобы отреагировать на действия пользователя.

Прелесть такого подхода в том, что работа LDAT совершенно не зависит от того, какое железо и какие программы установлены на компьютере. Тот факт, что NVIDIA озаботилась производством очередного измерительного инструмента, который, к тому же, доступен только ограниченному кругу IT-журналистов, намекает на то, что компания стремится подчеркнуть преимущества собственных продуктов в сравнении с конкурентами (так уже произошло с FCAT несколько лет тому назад). Действительно, на рынке вот-вот появятся 360-Гц мониторы с поддержкой G-SYNC, а разработчики игр начнут применять библиотеки NVIDIA Reflex, направленные на сокращение латентности в играх под Direct3D 12. Тем не менее, мы уверены, что сам LDAT не дает никаких поблажек «зеленым» видеокартам и не искажает результаты «красных», ведь никакого доступа к конфигурации подопытного железа у устройства нет, когда оно подключено USB-кабелем к другой машине, на которой запущено управляющее ПО.

Надо ли говорить, что в своей сфере применения LDAT открывает просто громадные перспективы. Сравнить между собой игровые мониторы (и даже телевизоры) с той или иной частоте обновления и матрицами разного типа, проверить, как на задержку влияют технологии адаптивной синхронизации G-SYNC и FreeSync, масштабирование кадра силами видеокарты или монитора — все это стало возможным. Но для начала мы решили сфокусироваться на более узкой задаче и проверить, как работают на видеокартах различных ценовых категорий несколько соревновательных игр, заточенных под высокий FPS и низкое время реакции. А если сформулировать задачу точнее, нас интересуют два главных вопроса: является ли избыточный фреймрейт гарантией низких задержек и в каких условиях наращивать его (а значит покупать более мощную видеокарту) уже нет никакого смысла. В частности, полезно ли превышать кадровую частоту, соответствующую частоте обновления экрана, если вы счастливый обладатель скоростного 240-Гц монитора.

Для тестирования мы выбрали четыре популярных многопользовательских проекта — CS:GO, DOTA 2, Overwatch и Valorant, — которые являются достаточно нетребовательными, чтобы современные GPU, включая бюджетные модели, могли развивать  производительность на уровне сотен FPS. Вместе с тем, перечисленные игры позволяют без особого труда организовать среду для надежного измерения времени реакции, когда важнее всего постоянные условия: одна и та же позиция персонажа, одно оружие в каждом тесте и т.д. По этой причине нам пришлось до поры до времени отложить бенчмарки в таких играх, как PlayerUnknown’s Battlegrounds и Fortnite. В PUBG просто нет возможности изолироваться от других игроков даже на тестовом полигоне, а Fortnite в однопользовательском режиме Battle Lab все равно не защищена от случайностей лута и, соответствено, делает невозможным тестирование нескольких видеокарт с одним и тем же оружием в разумные сроки.

Кроме того, достоинство избранных игры в том, что они работают под API Direct3D 11, который, в отличие от Direct3D 12, позволяет драйверу видеокарты задавать ограничения на очередь рендеринга кадров, которые центральный процессор может подготовить для рендеринга на GPU в программном графическом конвейере.

В стандартных условиях, особенно тогда, когда бутылочным горлышком системы являются вычислительные ресурсы видеокарты, очередь кадров увеличивается вплоть до трех по умолчанию или, если требует приложение, еще больше. Таким образом Direct3D обеспечивает непрерывную загрузку графического процессора и постоянный темп рендеринга. Но при этом возникает побочный эффект в виде задержки реакции на ввод, ведь API не позволяет выбросить из очереди заранее спланированные кадры. Именно на борьбу c лагом направлены соответствующие настройки в драйверах видеокарты, которые популяризировала AMD под маркой Radeon Anti-Lag, а затем у NVIDIA появилась аналогичная опция Low Latency Mode.

blank

Тем не менее, подобные меры не являются универсальным средством от задержек: к примеру, если быстродействие игры сдерживается возможностями центрального, а не графического процессора, короткая очередь кадров (или ее полное отсутствие) делает бутылочное горлышко CPU только уже. В добавок к остальной тестовой программе мы намерены выяснить, есть ли от «технологий» Radeon Anti-Lag и Low Latency Mode осязаемая польза, в каких именно играх и на каком железе.

#Тестовый стенд, методика тестирования

Тестовый стенд
CPU Intel Core i9-9900K (4,9 ГГц, 4,8 ГГц в AVX, фиксированная частота)
Материнская плата ASUS MAXIMUS XI APEX
Оперативная память G.Skill Trident Z RGB F4-3200C14D-16GTZR, 2 x 8 Гбайт (3200 МГц, CL14)
ПЗУ Intel SSD 760p, 1024 Гбайт
Блок питания Corsair AX1200i, 1200 Вт
Система охлаждения CPU Corsair Hydro Series H115i
Корпус CoolerMaster Test Bench V1.0
Монитор NEC EA244UHD
Операционная система Windows 10 Pro x64
ПО для GPU AMD
Все видеокарты AMD Radeon Software Adrenalin 2020 Edition 20.8.3
ПО для GPU NVIDIA
Все видеокарты NVIDIA GeForce Game Ready Driver 452.06

Измерения кадровой частоты и времени реакции во всех играх были выполнены при максимальных или приближенных к максимальным настройках качества графики для того, чтобы а) акцентировать различия между сравниваемыми устройствами, б) получить результаты как при высокой кадровой частоте, превышающей частоту обновления экрана, так и наоборот. Специально для этой статьи мы позаимствовали быстрый монитор Samsung Odyssey 9 (C32G75TQSI) с разрешением WQHD и частотой обновления 240 Гц — максимальной для современных потребительских мониторов, пока в продаже еще не появились экраны стандарта 360 Гц. Технологии адаптивной частоты обновления (G-SYNC и FreeSync) были отключены.

Результаты каждого индивидуального теста (конкретная видеокарта в конкретной игре с антилаговой настрокой драйвера или без нее) получены на выборке из 50 измерений.

Игра API Настройки Полноэкранное сглаживание
Counter-Strike: Global Offensive DirectX 11 Макс. качество графики (Motion Blur выкл.) 8x MSAA
DOTA 2 Качество Best Looking FXAA
Overwatch Качество Epic, 100% масштаб рендеринга SMAA Medium
Valorant Макс. качество графики (Vignette выкл.) MSAA x4

#Участники тестирования

Прим. В скобках после названий видеокарт указаны базовая и boost-частота согласно спецификациям каждого устройства. Видеокарты нереференсного дизайна приведены в соответствие с референсными параметрам (или приближены к последним) при условии, что это можно сделать без ручной правки кривой тактовых частот. В противном случае (ускорители серии GeForce 16, а также GeForce RTX Founders Edition) используются настройки производителя.

#Counter-Strike: Global Offensive

Результаты испытаний в первой же игре, CS:GO, дали немало пищи для ума. Это самый легковесный проект во всей тестовой программе, где такие видеокарты, как GeForce RTX 2080 Ti, развивают частоту смены кадров за пределами 600 FPS, и даже самые слабые из восьми участников тестирования (GeForce GTX 1650 SUPER и Radeon RX 590) держатся значительно выше частоты обновления монитора в 240 Гц. Тем не менее, CS:GO отлично проиллюстрировал тезис о том, что наращивать FPS сверх частоты монитора совершенно не бесполезно для сокращения задержек. Если сравнить видеокарты верхней группы (GeForce RTX 2070 SUPER и выше, а также Radeon RX 5700 XT) с младшими моделями (GeForce GTX 1650 SUPER, GeForce GTX 1060, Radeon RX 5500 XT и Radeon RX 590), речь идет о полуторакратной разнице в общем времени, прошедшем от нажатия на клавишу мыши до появления вспышки на экране. В абсолютном значении выигрыш достигает 9,2 мс — на первый взгляд немного, но, к примеру, почти столько же дает смена частоты обновления экрана с 60 на 144 Гц (9,7 мс)!

Что касается того, как соотносятся по времени задержки видеокарты, принадлежащие к одной широкой ценовой категории, но основанные на чипах разных производителей, то в каждой группе мы не обнаружили значительных отличий. То же касается опций в драйверах ускорителя, призванных уменьшить лаг путем сокращения очереди кадров в Direct3D 11. На CS:GO (по крайней мере, в данных тестовых условиях) они, как правило, не оказывают полезного эффекта. В группе слабых видеокарт есть небольшой сдвиг времени реакции, но только у GeForce GTX 1650 SUPER он достиг статистической значимости по результатам.

blank

Прим. Значками насыщенного цвета отмечены результаты со стандартными настройками драйвера. Бледными значками — с включенной опцией Low Latency Mode (значение Ultra) или Radeon Anti-Lag. Обратите внимание на вертикальную шкалу — она начинается выше нуля.

Counter-Strike: Global Offensive
По умолчанию Low Latency Mode (Ultra) / Radeon Anti-Lag
Средняя частота смены кадров, FPS Средняя время реакции, мс Ст. отклонение времени реакции, мс Средняя частота смены кадров, FPS Средняя время реакции, мс Ст. отклонение времени реакции, мс
GeForce RTX 2080 Ti 642 20,7 6,5 630 21 4,6
GeForce RTX 2070 SUPER 581 20,8 5 585 21,7 5,6
GeForce RTX 2060 SUPER 466 23,9 4,6 478 22,4 5,8
GeForce GTX 1650 SUPER 300 27,6 4,3 275 23,2 5,4
Radeon RX 5700 XT 545 20,4 5,8 554 21,5 4,4
Radeon RX 5500 XT 323 29,3 14 316 26,5 14,5
Radeon RX 590 293 29,3 5,8 294 27,5 4,9
GeForce GTX 1060 (6 Гбайт) 333 29,6 7,9 325 28,2 12,9

Прим. Красным выделены статистически значимые различия в среднем времени реакции (по t-критерию Стьюдента).

Хотя DOTA 2 тоже считается нетребовательной игрой по действующим стандартам, в ней современным видеокартам труднее набирать несколько сотен FPS. Так, все бюджетные решения, участвующие в сравнении, опустились ниже фреймрейта 240 кадров в секунду, соответствующего частоте обновления экрана. Мощные ускорители, начиная с Radeon RX 5700 XT и GeForce RTX 2060 SUPER, выдают здесь свыше 360 FPS, но, в отличие от CS:GO, DOTA 2 более эффективно направляет избыток быстродействия графического процессора на борьбу с лагом. В предыдущей игре достаточно видеокарты уровня Radeon RX 5700 XT, чтобы никакого смысла наращивать производительность дальше ради времени реакции уже не было. Здесь же задержка продолжает снижаться на более мощных видеокартах вплоть до GeForce RTX 2080 Ti.

Надо заметить, что именно к результатам Radeon RX 5700 XT в этой игре возникают вопросы. Действующий флагман AMD намного превосходит по времени задержки даже GeForce RTX 2060 и выступил ничем не лучше младших моделей невзирая на более высокий фреймрейт. А вот сокращать очередь рендеринга кадров в DOTA 2 действительно полезно. Эффект не так велик, чтобы его заметили даже опытные кибератлеты, но он является статистически значимым для четырех видеокарт из восьми 

blank

Прим. Значками насыщенного цвета отмечены результаты со стандартными настройками драйвера. Бледными значками — со включенной опцией Low Latency Mode (значение Ultra) или Radeon Anti-Lag. Обратите внимание на вертикальную шкалу — она начинается выше нуля.

DOTA 2
По умолчанию Low Latency Mode (Ultra) / Radeon Anti-Lag
Средняя частота смены кадров, FPS Средняя время реакции, мс Ст. отклонение времени реакции, мс Средняя частота смены кадров, FPS Средняя время реакции, мс Ст. отклонение времени реакции, мс
GeForce RTX 2080 Ti 418 17,7 2 416 17,4 1,4
GeForce RTX 2070 SUPER 410 18,2 1,6 409 17,6 1,6
GeForce RTX 2060 SUPER 387 20,8 1,5 385 19,8 1,6
GeForce GTX 1650 SUPER 230 27,9 2,5 228 27,9 2,3
Radeon RX 5700 XT 360 26,3 1,5 363 25,2 1,3
Radeon RX 5500 XT 216 25,4 1,2 215 21,7 1,4
Radeon RX 590 224 25 1,4 228 21,8 1,3
GeForce GTX 1060 (6 Гбайт) 255 25,8 1,9 254 25,8 1,7

Прим. Красным выделены статистически значимые различия в среднем времени реакции (по t-критерию Стьюдента).

#Overwatch

Overwatch — самая тяжелая из четверки тестовых игр при максимальном качестве графики с активированным полноэкранным сглаживанием. Неудивительно, что и каждый гигафлопс производительности GPU здесь идет на пользу времени реакции. Размах значений лага в Overwatch между такими видеокартами, как GeForce RTX 2080 Ti и Radeon RX 5500 XT является двукратным. Числа говорят и о том, что более мощные видеокарты, чем GeForce RTX 2070 SUPER, только накручивают FPS, а вот ускорить реакцию уже не могут даже номинально. Но вот замена Radeon RX 5700 XT или GeForce RTX 2060 SUPER на пресловутый RTX 2070 SUPER в теории имеет смысл для того, чтобы свести лаг к минимуму, сохранив высокое качество графики. Кроме того, в Overwatch опять с не самой лучшей стороны проявил себя один из ускорителей на «красных» чипах. На этот раз Radeon RX 5500 XT, который по среднему времени задержки реакции существенно превосходит все остальные бюджетные решения.

Overwatch в очередной раз помог доказать, что а) быстродействие видеокарты даже на высоких значениях фреймрейта еще как влияет на величину лага, б) формально более производительный GPU не гарантирует меньших задержек реакции на ввод. Кроме всего этого игра продемонстрировала эталонную работу антилаговых настроек графического драйвера. Если играть на относительно слабых видеокартах (GeForce GTX 1650 SUPER, GeForce GTX 1060, Radeon RX 5500 XT и Radeon 590), сокращенная очередь кадров может уменьшить лаг на величину от 9 до 17 %. Ну а для мощного железа она по-прежнему совершенно бесполезна.

blank

Прим. Значками насыщенного цвета отмечены результаты со стандартными настройками драйвера. Бледными значками — со включенной опцией Low Latency Mode (значение Ultra) или Radeon Anti-Lag. Обратите внимание на вертикальную шкалу — она начинается выше нуля.

Overwatch
По умолчанию Low Latency Mode (Ultra) / Radeon Anti-Lag
Средняя частота смены кадров, FPS Средняя время реакции, мс Ст. отклонение времени реакции, мс Средняя частота смены кадров, FPS Средняя время реакции, мс Ст. отклонение времени реакции, мс
GeForce RTX 2080 Ti 282 35,6 10,4 300 34,2 9,6
GeForce RTX 2070 SUPER 225 35,8 5,1 228 36,7 8,6
GeForce RTX 2060 SUPER 198 41,2 6,4 195 38,8 9
GeForce GTX 1650 SUPER 116 58,2 8 115 51 8,7
Radeon RX 5700 XT 210 39,6 7,2 208 41,4 7,2
Radeon RX 5500 XT 120 69,7 13,2 120 63,5 15,1
Radeon RX 590 111 61,2 8,6 111 51,7 7,7
GeForce GTX 1060 (6 Гбайт) 121 60,7 8,7 118 50,7 6,5

Прим. Красным выделены статистически значимые различия в среднем времени реакции (по t-критерию Стьюдента).

Valorant выделилась среди тестовых игр превосходной — или наоборот, посредственной — оптимизацией графики. Дело в том, что вопреки громадной разнице в потенциальном быстродействии тестовых GPU по оценкам частоты смены кадров все они сосредоточились в диапазоне от 231 до 309 FPS. И это при том, что мы намеренно выбрали для измерений латентности самую ресурсоемкую сцену, чтобы усилить ожидаемые различия. Тем не менее, по распределению значений лага Valorant отчасти похож на CS:GO. В этой игре владельцы GeForce RTX 2060 SUPER или Radeon RX 5700 XT находятся в равных условиях с пользователями более дорогих и мощных ускорителей. Даже младшие видеокарты класса GeForce GTX 1650 SUPER и Radeon RX 5500 XT здесь не так уж сильно отстают от старших. При таких вводных данных не удивительно, что ограничивать очередь кадров Direct3D в Valorant бесполезно: соответствующие настройки имеют статистически значимый эффект для избранных видеокарт, но его величина совершенно мизерная.

blank

Прим. Значками насыщенного цвета отмечены результаты со стандартными настройками драйвера. Бледными значками — со включенной опцией Low Latency Mode (значение Ultra) или Radeon Anti-Lag. Обратите внимание на вертикальную шкалу — она начинается выше нуля.

Valorant
По умолчанию Low Latency Mode (Ultra) / Radeon Anti-Lag
Средняя частота смены кадров, FPS Средняя время реакции, мс Ст. отклонение времени реакции, мс Средняя частота смены кадров, FPS Средняя время реакции, мс Ст. отклонение времени реакции, мс
GeForce RTX 2080 Ti 309 19,3 2,6 306 20,2 3
GeForce RTX 2070 SUPER 293 19,2 3,1 289 19,5 2,9
GeForce RTX 2060 SUPER 308 20,7 2,7 310 19,6 2,9
GeForce GTX 1650 SUPER 251 24,5 2,9 243 23,6 2,5
Radeon RX 5700 XT 256 21,9 3,3 257 21,9 2,7
Radeon RX 5500 XT 258 23,5 2,8 262 22,8 2,6
Radeon RX 590 237 25,8 2,7 234 24,3 2,5
GeForce GTX 1060 (6 Гбайт) 269 23,5 2,8 268 23,4 4,4

Прим. Красным выделены статистически значимые различия в среднем времени реакции (по t-критерию Стьюдента).

#Выводы

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

В кратком исследовании популярных многопользовательских проектов мы обнаружили несколько любопытных феноменов. Во-первых, наши данные опровергают популярное мнение о том, что нет смысла накручивать FPS сверх значений, соответствующих частоте обновления экрана. Даже на очень быстром 240-Гц мониторе такие игры, как Counter-Strike: Global Offensive, позволяют уменьшить лаг в полтора раза за счет замены бюджетной видеокарты на топовую модель. Речь идет о таком же выигрыше по времени реакции, как, например, при переходе с экрана 60 Гц на 144 Гц.

С другой стороны, фреймрейт все-таки может быть избыточным, когда более мощная видеокарта только зря греет воздух и уже не помогает бороться с и без того чрезвычайно низкими задержками. Во всех тестовых играх при разрешении 1080p мы не нашли никакой значимой разницы между такими устройствами, как GeForce RTX 2070 SUPER и GeForce RTX 2080 Ti. Абсолютный минимум времени реакции, зарегистрированный нами, составляет 17,7 мс и был получен в DOTA 2. Это, между прочим, не такая уж скромная величина, которая, если переводить в частоту обновления, соответствует 57 герцам. Так что напрашивается следующий вывод: грядущие мониторы с частотой 360 Гц обязательно найдут применение в соревновательных играх — это прямой способ уменьшить лаг, когда компьютерное железо уже исчерпало свои возможности и упирается в ограничения толстого программного стека операционной системы, графического API, драйверов и самой игры.

Затем мы проверили, есть ли польза от программных средств борьбы с латентностью, которые пока сводятся к ограничению очереди рендеринга кадров в приложениях, опирающихся на графический API Direct3D 9 и 11, — пресловутых Radeon Anti-Lag в драйвере AMD и Low Latency Mode у NVIDIA. Как выяснилось, обе «технологии» действительно работают, но способны принести ощутимую пользу только в условиях, когда бутылочным горлышком системы является именно GPU, а не центральный процессор. В нашей тестовой системе с разогнанным процессором Intel Core i7-9900K такие средства помогли недорогим видеокартам средней категории производительности (Radeon RX 5500 XT, GeForce GTX 1650 SUPER и аналогичным по быстродействию ускорителям прошлого поколения), но совершенно бессмысленны, когда есть мощный GPU. Впрочем, когда антилаговые настройки работают, они могут быть чрезвычайно эффективны, уменьшая задержку в каком-нибудь Overwatch на величину вплоть до 10 мс или 17% от исходной.

И наконец, были обнаружены определенные различия между графическими картами разных производителей, которые невозможно было предсказать по одной лишь кадровой частоте. Так, видеокарты AMD иной раз обеспечивают такую же короткую задержку, как формально более производительные «зеленые» устройства (пример: Radeon RX 5700 XT в CS:GO), а в других случаях работают подозрительно медленно (та же модель в DOTA 2). Не удивимся, что если методики аппаратного измерения лага, подобные LDAT, получат широкое распространение, заядлые кибератлеты, которые борются за малейшее преимущество перед соперниками, начнут подбирать видеокарты под конкретную игру — в зависимости от того, какая модель обеспечивает наименьшее время реакции.

Но самое главное, благодаря LDAT у нас появилась возможность проводить более глубокие исследования времени задержки. То, что мы сделали в данном предварительном обзоре, — это лишь верхушка айсберга. За рамками пока остались такие темы, как влияние на лаг технологий адаптивной синхронизации (G-SYNC и FreeSync), ограничение FPS в игре, зависимость от производительности CPU и многое другое. Кроме того, мы собираемся выяснить, достижим ли высокий фреймрейт в сотни FPS и, соответственно, быстрая реакция на ввод, не только в соревновательных играх, специально оптимизированных под эти критерии, но и в проектах класса ААА, нагружающих систему куда сильнее. А следовательно, нужен ли обычному геймеру, а не чемпиону, передовой монитор с частотой обновления 240 или даже 360 Гц? На эти вопросы мы ответим в будущих работах с применением LDAT.


⇣ Содержание

Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
Материалы по теме

Оставить комментарий