Железо

Новая статья: Обзор видеокарт AMD Radeon RX 5700 и Radeon RX 5700 XT: наконец-то получилось!

Два года тому назад AMD, вооруженная архитектурой Zen, совершила триумфальное возвращение на рынок центральных процессоров, но печальная примета вновь сбылась. С тех пор, как Advanced Micro Devices и ATi превратились в одну компанию, у ценителей процессоров AMD и графических карт Radeon ни разу не было возможности собрать компьютер из комплектующих любимого производителя, не поступившись быстродействием в одном из ключевых аспектов — CPU или GPU. И началось это гораздо раньше — после Radeon R9 Fury X на чипе Fiji графическое подразделение AMD уже не смогло породить устройство, готовое наравне соревноваться с решениями NVIDIA за мантию самого производительного игрового GPU, да и в нижних ценовых эшелонах позиции «красных» слабеют год от года. Марка Radeon с тех пор и вплоть до настоящего момента переживает свои худшие времена.

Сегодня мы представляем обзор ускорителей Radeon RX 5700 и Radeon RX 5700 XT, с помощью которых AMD намеревается потеснить NVIDIA из рыночной ниши, которую оккупировали младшие модели серии GeForce RTX — 2060 и 2070. Но теперь, решив вопрос с центральными процессорами, AMD набралась сил для атаки на рынок дискретных графических карт. RDNA призвана решить проблемы, которые помешали чипам Polaris и Vega в полную силу выступить против конкурирующего кремния Pascal и Turing, а затем — если первый опыт будет удачным — она откроет дорогу ускорителям AMD к борьбе за титул абсолютного чемпиона. Причем на этот раз главная ставка AMD сделана не на передовой техпроцесс 7 нм, по которому выпускают чип Navi, а на абсолютно новую логику RDNA, которая пришла на смену GCN — архитектуре с без малого восьмилетним стажем.

И все-таки, какие обстоятельства побудили разработчиков Radeon 5000-й серии отказаться от проверенной архитектуры GCN в пользу совершенно иного решения и что такого в RDNA, чтобы на рынке дискретных GPU опять возникла интенсивная конкуренция? Трудно удержаться от аналогий с архитектурой Zen, которой удалось за пару лет перевернуть рынок центральных процессоров, да и в истории ATi есть примеры революционных преобразований. Попробуем разобраться в этих вопросах, а затем приступим к долгожданным тестам Radeon RX 5700 и Radeon RX 5700 XT.

⇡#Новая архитектура RDNA

Однако переход к архитектуре Maxwell, а затем Pascal, позволил конкурентам AMD радикально нарастить производительность в 3D-рендеринге, оставаясь в границах прежнего резерва мощности. В первые годы GCN, которая дебютировала вместе с ускорителями Radeon HD 7970 еще в конце 2011 года, графические процессоры AMD, по большому счету, совершенно не уступали продуктам NVIDIA на чипах Kepler по энергоэффективности и быстродействию. GCN, тем не менее, всегда держала паритет с чипами NVIDIA по массиву вычислительных блоков, однако колоссальный резерв теоретического быстродействия, которым отличаются продукты AMD, целиком раскрывается только в расчетах общего назначения — не удивительно, ведь GCN и была задумана как решение для задач GP-GPU в противовес предшествующей архитектуре TeraScale, ориентированной преимущественно на игры.

Тем не менее, коль скоро чипы GCN с определенного момента утратили возможность настолько эффективно транслировать терафлопсы расчетной производительности в быстродействие 3D-приложений, для того, чтобы поддерживать накал борьбы, видеокартам Radeon требуются более крупные чипы, чем те, которыми довольствуется NVIDIA. Для рынка дискретных видеокарт определяющее значение имеет показатель быстродействия на рубль, а на не на ватт мощности, поэтому экономный кошелек нередко голосует именно за «красных». В результате AMD уже давно не претендует на корону абсолютного быстродействия, да и в нижних категориях производительности NVIDIA было легче придать видеокарте такие характеристики, чтобы оправдать, как правило, более высокую розничную цену. А в погоне за локальными победами в той или иной ценовой нише AMD раз за разом принуждала GPU работать на грани оптимальной зоны тактовых частот и питающего напряжения.

Кроме того, архитектура GCN, несмотря на постоянные оптимизации и попытки консервативной переработки, которые происходили в каждом новом поколении кремния, не располагает такими новаторскими функциями, как аппаратное ускорение трассировки лучей и обработки данных методом машинного обучения. Благодаря архитектуре Turing NVIDIA совершила очередной скачок в энергоэффективности, и теперь стало совершенно ясно, что дальше AMD уже не может ехать по накатанным рельсам. Свою роль сыграл и вероятный дефицит бюджета R&D в те годы, когда комапния работала едва ли не в убыток из-за плачевного положения дел на рынке центральных процессоров, и неудачное партнерство с полупроводниковым контрактором GlobalFoundries, который сперва аннулировал все планы по запуску линии 10 нм, а затем и вовсе прекратил работу над любыми новыми узлами после 14 нм FinFET. Однако AMD было не так-то просто отказаться от наследия GCN в пользу совершенно новой микроархитектуры.

NVIDIA по всем этими причинам чувствует себя более свободно и не стесняется проводить резкие изменения в архитектуре GPU. Пространство для маневра наверняка ограничено и союзом с производителями консолей, для которых AMD разработала целую серию SoC с графическим ядром архитектуры GCN. Неспроста ее то и дело обвиняют в том, что современные игры, рассчитанные на Direct3D 12 и Vulkan, из рук вон плохо работают на старых GPU архитектуры Kepler и Maxwell — все дело в том, как сильно Pascal и Turing отличаются от прошлых итераций «зеленого» кремния.

Как утверждает AMD, над принципами архитектуры RDNA компания работала в течение восьми лет, и последняя, в отличие от GCN, глубоко уходящей корнями в задачи GP-GPU, всецело сфокусирована на быстродействии 3D-приложений. Однако для ускорителей Radeon все-таки настал судьбоносный момент. AMD последовала успешному примеру NVIDIA и отныне собирается поддерживать два отдельных направления архитектуры GPU — RDNA для игровых ускорителей и GCN для серверов и рабочих станций. Это еще совсем не значит, что RDNA не подходит для вычислений общего назначения, но место в этой нише по-прежнему будет занято существующими и, наверняка, грядущими продуктами на основе GCN.

⇡#Легче и быстрее: Compute Unit графического процессора в GCN и RDNA

Для того, чтобы понять фундаментальные различия между RDNA и GCN, сперва придется освежить в памяти основные принципы массивно-параллельных вычислительных процессоров, которыми являются GPU, и конкретику их реализации в чипах AMD начиная с Tahiti — самого первого кристалла на основе GCN.

AMD называет их потоковыми процессорами, NVIDIA — ядрами CUDA, но в сущности и тот, и другой блок выполняет одну функцию — арифметические операции над целочисленными или вещественными (с плавающей точкой) данными. Львиную долю каждого современного GPU занимает массив шейдерных ALU. 3D-рендеринг и масса вычислительных задач иного рода подразумевает выполнение однотипных действий над массивом разных операндов, поэтому вычислительные блоки внутри чипа группируются так, чтобы одна инструкция могла занять в одно и то же время несколько ALU, а данные поступают на обработку в виде нескольких потоков (threads). Но сила GPU заключается в том, каким образом организована совместная работа шейдерных ALU. Соответственно, каждая инструкция warp’a или wavefront’а позволяет выполнить необходимую операцию над 32 или 64 операндами (последние мы будем далее называть рабочими единицами — work items). Группа из 32 потоков в терминологии NVIDIA называется warp, GCN оперирует группами по 64 потока под названием wavefront.

Основным строительным блоком архитектуры GCN является Compute Unit (CU) — именно его, а вовсе не отдельные ALU, можно считать аналогом ядра центральных процессоров, поскольку только CU целиком обладает способностью декодировать и отправлять инструкции на исполнение.

векторных ALU, разделенных на четыре блока SIMD (Single Instruction Multiple Data). Compute Unit содержит 64 т. н. Другая важная особенность состоит в том, что векторный планировщик в CU всего один, и для того, чтобы загрузить все четыре SIMD работой, они получают собственные инструкции поочередно. И хотя wavefront’ы в архитектуре GCN состоят как раз из 64 потоков, каждый SIMD обрабатывает собственный wavefront параллельно с другими SIMD’ами, а поскольку в каждом SIMD’е есть всего лишь 16 ALU, для выполнения одной инструкции ему необходимо четыре такта — это ключевая черта архитектуры GCN, определяющая немало сильных и слабых сторон данной архитектуры.

Но у подобной логики есть и другой изъян. Для того, чтобы запустить CU с нуля, требуется потратить четыре такта, а в течение трех первых часть ALU будет простаивать. Wavefront’ам свойственно ветвиться, и в этот момент получается так, что часть рабочих единиц включает одну операцию, а часть — другую. Все дело в том, что далеко не каждая инструкция требует полной загрузки 16-ти векторых ALU в течение четырех тактов. Кроме того, CU всегда требует не меньше четырех wavefront’ов для максимальной загрузки ALU — условие, которое по тем или иным причинам может кратковременно нарушаться. SIMD должен проходить «ветки» в два приема, независимо от того, сколько векторных ALU при этом будет бездействовать.

CU теперь содержит два SIMD’a по 32 векторных ALU, и каждый SIMD снабжен отдельным планировщиком. Чтобы снизить влияние этих факторов и адаптировать GPU к операциям с меньшим количеством потоков, создатели архитектуры RDNA совершили переход от 64-поточных к 32-поточным wavefront’ам. CU архитектуры RDNA рассчитан на исполнение двух инструкций в течение одного такта, в то время как CU чипов GCN исполняет четыре инструкции в течение четырех тактов.

Тем не менее, RDNA действительно обязана проявить высокую эффективность в задачах с «легкопоточной» нагрузкой, и на этом все плюсы реорганизации CU далеко не заканчиваются. Заметим, что поскольку wavefront’а в то же время стал в два раза уже, старая и новая архитектуры являются эквивалентными по терафлопсам на один CU — ни о каком удвоении пропускной способности тут речи не идет. И наконец, у RDNA есть еще одно, не столь очевидное, достоинство. Так, благодаря отдельным планировщикам, обслуживающим собственные SIMD’ы, и одновременной отдаче двух инструкций каждый такт, RDNA характеризуется пониженной латентностью исполнения индивидуальных инструкций. Но количество потоков, находящихся в рабочем пуле отдельно взятого CU, в результате уменьшилось с 2560 до 1280 — это значит, что в кешах теперь находятся менее разнородные данные и их объем используется более экономно. Как и в GCN, SIMD здесь не привязан к единственному wavefront’у — каждый раз, когда планировщик дает инструкцию на исполнение, она может быть выбрана из нескольких wavefront’ов (вплоть до 10 на каждый SIMD в GCN и 20 в RDNA).

Пока инструкция «бегает» на SIMD в течение четырех тактов, CU может дождаться получения данных, необходимых для следующей инструкции — например, из оперативной памяти, обращение к которой происходит целую вечность по меркам внутренней логики GPU. Тем не менее, темп исполнения одной инструкции в четыре такта, свойственный GCN, был изначально установлен не без веских оснований. Конечно, SIMD в этот момент может переключиться на один из 19 других wavefront’ов, но возможно и альтернативное решение проблемы. Архитектура RDNA, напротив, пролетит через инструкции wavefront’а, пока не столкнется с необходимостью ожидания данных. В таком режиме инструкция широкого wavefront’а отдается на исполнение в два приема, и в период отработки за два такта латентность в ожидании отсутствующих данных эффективно маскируются. RDNA допускает работу со старым, 64-поточным форматом wavefront’а.

Как бы то ни было, устоявшиеся приложения GP-GPU, тщательно оптимизированные с расчетом на особенности GCN, равно как и игровые шейдеры, скомпилированные в машинном коде (Shader Intrinsics), наверняка нуждаются в ревизии, чтобы извлечь из RDNA максимально высокую эффективность. Широкие и узкие wavefront’ы могут сосуществовать в пределах рабочего пула одного SIMD без необходимости в смене контекста, однако специфику выбора между тем или иным форматом — существуют ли в ISA архитектуры RDNA инструменты, определяющие ширину wavefront’а или это является решением драйвера — AMD не раскрывает.

⇡#Скалярные ALU в GCN и RDNA

Этот компонент открывает инструкции wavefront’а альтернативный путь исполнения — на тот случай, когда все из 32-х или 64-х рабочих единиц содержат однородные данные, и можно смело заменить их единственной операций вместо того, чтобы делать одну и ту же работу несколько десятков раз подряд. Помимо векторных SIMD, которые обслуживает собственный планировщик, в каждом Compute Unit’е графических процессоров AMD — как GCN, так и RDNA — существует скалярный блок с отдельным целочисленным ALU и логикой, выполняющей декодирование и отдачу инструкций. В коде шейдерных kernel'ов скалярный блок, по большей части, обслуживает операции условного ветвления или перехода.

В RDNA скалярных блоков два, а поскольку четырехтактная ротация SIMD’ов ушла в прошлое, они способны принимать инструкцию на исполнение каждый такт. В GCN скалярный блок может быть использован в течение каждого такта, но только одновременно с тем из четырех SIMD, к которому подошла очередь единого векторного планировщика. Разумеется, тогда SIMD и скалярный блок должны взять инструкции из разных wavefront’ов, ведь ни GCN, ни RDNA не допускают суперскалярное исполнение, при котором можно одновременно выполнить две последовательные инструкции из одного потока. Тем не менее, из документации AMD не вполне понятно, может ли скалярный блок GCN и RDNA получать инструкцию параллельно векторной инструкции соответствующего SIMD’а. Как бы то ни было, косвенные признаки указывают на то, что одновременная отдача и исполнение скалярных и векторных инструкций в рамках GCN и RDNA все-таки возможна, что дополнительно усиливает параллелизм в чипах AMD. Или все наоборот, SIMD вынужден уступить свой такт приема инструкции в пользу скалярного блока.

⇡#Блоки специального назначения (SFU)

операций специального назначения. Третий тип исполнительных блоков, который присутствует в Compute Unit’е GCN и RDNA, предназначен для т.н. В рамках GCN блок SFU представляет собой отдельный SIMD, состоящий из четырех ALU, привязанный к каждому из основных векторных SIMD’ов, и служит в качестве резервного пути исполнения инструкции wavefront’а — для этого требуется 16 тактов, в течение которых векторный SIMD вынужден бездействовать. Под этим термином скрываются тригонометрические функции, которые нередко используются при 3D-рендеринге.

Таким образом, тригонометрические операции чип RDNA тоже исполняет в темпе 1/4 от стандартных векторных инструкций. В RDNA используется похожая организация SFU: с каждым из двух векторных SIMD ассоциирован SFU, в который входят 8 ALU. Чтобы CU мог загрузить SFU, векторный SIMD должен пропустить лишь один такт, а в течение трех следующих, пока SFU отрабатывает свою инструкцию, SIMD готов принимать и исполнять инструкции в стандартном режиме. Но есть одно ключевое отличие: из общих ресурсов векторый SIMD и SFU имеют только порт планировщика, а в остальном оперируют независимо друг от друга. Вот еще один источник параллелизма и, в конечном счете, более высокой фактической производительности в пересчете на терафлопс, который сулжит графическим процессорам AMD архитектура RDNA.

⇡#Переработанная структура кешей

Ведь даже чипы GCN, для которых характерна латентность исполнения инструкции в четыре такта (включая «Вегу» с чрезвычайно высокой ПСП, которую обеспечивает память HBM2) нуждаются в доступе к данным на коротком расстоянии и значительно выигрывают от разгона RAM. Как мы уже писали выше, исполнение инструкций с темпом в один такт, на который рассчитана архитектура RDNA, делает ее уязвимой к задержкам исполнения, вызванным ожиданием данных, а значит чип Navi особенно требователен к организации стека памяти — от внутренних кешей Compute Unit’а до интерфейса оперативной памяти. К счастью, создатели RDNA не обошли стороной этот момент и полностью преобразили структуру кешей графического процессора.

Однако если в чипах GCN эти хранилища были общими для четырех (а впоследствии трех) CU, то в RDNA группа связанных CU, называемая Workgroup Processor, уменьшена до двух участников, а конкуренция за общие ресурсы в результате ослабевает. Отдельные CU в составе GCN и RDNA сгруппированы по несколько штук и пользуются несколькими типами разделяемых ресурсов — таких, как 32-килобайтный кеш инструкций и скалярный кеш объемом в 16 Кбайт. Впрочем, благодаря тому, что количество потоков на отдельно взятый CU при работе с 32-поточными wavefront’ами сократилось вдвое, это изменение также ни в коем случае нельзя рассматривать как шаг назад по сравнению с GCN. Напротив, хранилище LDS (Local Data Store), которое представляет собой наиболее быстрый тип памяти после регистров векторных SIMD, теперь тоже стало общим для двух CU, несмотря на то, что объем LDS остался прежним (64 Кбайт).

Место старого L1 в иерархии памяти RDNA теперь занимает громадный 128-килобайтный кеш, доступный десяти Compute Unit’ам, с 16-канальной ассоциативностью. Не менее грандиозные изменения произошли на следующих уровнях стека памяти RDNA: 16-килобайтный кеш L1 в пределах отдельно взятого CU теперь считается кешем нулевого уровня, а попутно инженеры AMD увеличили его ассоциативность с 4 до 32-каналов (а это, в свою очередь, значительно влияет на процент попаданий в кеш) и нарастили вдвое пропускную способность дороги к векторным ALU. Он должен снять значительную часть нагрузки с кеша L2, ведь последний обошелся без значительных изменений после предыдущей итерации в чипах Vega: при 16-канальной ассоциативности и объеме в 4 Мбайт кеш L2 чипа Navi связан, с одной стороны, с каждой секцией L1, а с другой — посредством шины Infinity Fabric — с контроллерами RAM и uncore-компонентами SoC (блоками DMA для коммуникации между дискретными GPU, кодеком видеопотока и т.д.).

Шейдерные программы могут считывать и записывать компрессированный цвет не только в RAM, но и кеш-память L1 и L2 (шейдерам в Polaris и Vega было позволено только чтение). И наконец, в дополнение к очередной оптимизации алгоритмов компрессии цвета, RDNA допускает передачу сжатых данных по тем участкам конвейера рендеринга, где в GCN было разрешено только движение «сырых» данных. Также возможна передача сжатого цвета из L2 в контроллер дисплея.

⇡#Графический процессор Navi 10

В составе Navi 10 их два — каждый содержит по 20 CU и массив конвейеров растеризации (ROP). Наиболее крупной структурой в организации компонентов чипа Navi является Shader Engine. Среди чипов прошлого поколения можно безошибочно назвать аналог подобной конфигурации — это старший чип семейства Polaris. Таким образом, полнофункциональная версия Navi 10 включает 2560 шейдерных ALU и 160 блоков фильтрации текстур. Только Polaris, несмотря на две ревизии после его дебюта в составе Radeon RX 480, таки не появился в коммерческих устройствах с полностью активным набором вычислительных блоков — во всех видеокартах на его основе разблокированы только 36 CU.

Это совершенно необходимое изменение back-end’a GPU в свете того, что от RDNA ожидается повышенная эффективность в 3D-рендеринге — считается, что Polaris избегал «пузырей», возникающих при ожидании отработки ROP, попросту за счет общего недостатка эффективной загрузки шейдерных ALU. Однако между Polaris и Navi можно обнаружить существенные различиях, выходящие за пределы внутренней организации Compute Unit’ов, которую мы обсуждали до сих пор — начиная с того, что Navi досталось вдвое больше ROP: 64 вместо 32.

Navi 10, как и старший Polaris, обходится 256-битной шиной RAM, но высокая пропускная способность GDDR6 (14 Гбит/с на контакт) гарантирует необходимую более эффективной архитектуре скорость доступа к данным. Впечатляющий пиксельный филлрейт, который развивают 64 конвейера растеризации, сочетается с поддержкой оперативной памяти типа GDDR6. Впрочем, увидеть PCI Express 4. Полная ревизия стека памяти, которую провели инженеры AMD в чипе Navi, заканчивается поддержкой удаленных коммуникаций по шине PCI Express четвертого поколения. 0 в деле на первых порах позволит только собственная платформа AMD с процессорами Ryzen 3000-й серии, а Navi 10 в любом случае не сможет загрузить настолько быстрый канал связи с CPU.

Front-end чипа представлен блоками обработки геометрических примитивов, причем AMD изменила конфигурацию ранних стадий аппаратного конвейера таким образом, что часть геометрической логики осталась в пределах Compute Engine (познакомьтесь с еще одним термином архитектуры чипов AMD) — структуры, объединяющей половину всего содержимого Shader Engine, — а общий геометрический процессор, занятый отсечением невидимых полигонов, вынесен за ее пределы поближе к командным процессорам ACE (Asynchronous Compute Engine), распределяющим потоки шейдерных вычислений между Compute Unit’ами.

Всего Navi 10 может получить вплоть до четырех геометрических примитивов, прошедших стадию фильтрации невидимых поверхностей — как Vega, однако напомним, что в составе полностью функционального чипа Vega на 60 % больше шейдерных ALU и блоков фильтрации текстур, так что пропорция между мощностью геометрического front-end’a и основных ресурсов, обеспечивающих текстурирование и работу шейдерных kernel’ов, в Navi явно улучшилась.

А вот каким образом AMD поступила с альтернативным конвейером NGG (Next Generation Geometry), остается загадкой. Драйвер GPU автоматически включает тайловый рендеринг, появившийся в графических процессорах Vega, для того, чтобы сократить обращения к оперативной памяти и удержать данные, необходимые для растеризации и шейдеров, в пределах кеша L2. примитивные шейдеры (Primitive Shaders). Vega обещала нарастить пропускную способность геометрического процессора с 4 до 17 примитивов за такт при условии, что код приложений научится использовать т.н. До сих пор эта возможность не была использована на практике — ни в игровых движках, ни в виде расширений API так и не появилась поддержка Primitive Shaders спустя без малого два года жизни Vega на рынке игровых ускорителей.

В RDNA доступна такая функция, как Asynchronous Compute Tunneling (ACT). Что касается упомянутых блоков ACE (Asynchronous Compute Engine), то и они научились новым трюкам. Благодаря ACT графический процессор способен мгновенно приостановить прием дальнейших инструкций из очередей, имеющих низкий приоритет, ради того, чтобы закончить критически важную работу из другой очереди. Она оперирует на уровне очередей инструкций, которые драйвер видеокарты получает от графического API — в отличие от preemption и других методов, работающих на уровне wavefront’ов и отдельных цепочек данных для векторных ALU (к примеру, Direct3D 12 поддерживает одну очередь для рендеринга и несколько для неграфических расчетов). Разработчики «железа» продолжают уделять шлемам виртуальной реальности повышенное внимание, несмотря на то, к какому плачевному состоянию сегодня пришла эта, когда-то перспективная, идея. Главной целью подобных оптимизаций, разумеется, является VR.

Старший Polaris при такой же конфигурации основных вычислительных блоков обходится скромными 5,7 млрд транзисторов, а для того, чтобы построить Navi 10, понадобилось уже 10,3 млрд — так много места занимает дополнительная управляющая логика и разбухшая система кешей. Однако все те нововведения, которые вобрал в себя чип Navi 10, не достались бесплатно с точки зрения компонентного бюджета. Неудивительно, что AMD оставит архитектуру GCN для ускорителей неграфических расчетов, ведь всю эту площадь можно попросту забить шейдерными ALU, которым GCN всегда найдет работу в GP-GPU.

Графические процессоры NVIDIA тоже набирали вес с каждым поколением, а ведь масштаб изменений в архитектуре RDNA можно сравнить одновременно с двумя крупнейшими переходами, которые совершил конкурент, — от Kepler к Maxwell и от Pascal к Turing. Для того, чтобы эффективно задействовать ресурсы чипа в играх, с такими жертвами волей-неволей приходится мириться.

Площадь Navi 10 составляет 251 мм2 — немногим больше, чем у Polaris 10/20, а плотность компонентов возросла на 67 %. Куда важнее то, что в играх Navi 10 сулит повысить удельное быстродействие на площадь чипа в 2,3 раза по сравнению с Vega 10, а быстродействие на ватт — на 48 %. Во всяком случае, техпроцесс 7 нм позволяет упаковывать дополнительные транзисторы намного компактнее, чем при норме 14 нм. Немалый вклад в энергоэффективность Navi внесла и схемотехника кристалла — в этой части команда Radeon позаимствовала лучшие методы у создателей Ryzen. Примечательно, что львиную долю выигранной мощности AMD относит именно на счет архитектуры RDNA, в то время как отдельно взятая смена технологической нормы с 14 на 7 нм дала только 11 %.

Следующая страница →

⇣ Содержание

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

3dnews.ru/www/delivery/avw.php?zoneid=1778&cb=INSERT_RANDOM_NUMBER_HERE&n=a08ada54" border="0" alt=""/> <img src="https://ad.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть