Основные характеристики видеокарт

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

Тактовая частота видеочипа

Рабочая частота GPU измеряется в мегагерцах, в миллионах тактов в секунду. Эта характеристика прямо влияет на производительность видеочипа, чем она выше, тем больший объем работы чип может выполнить в единицу времени, обработать большее количество вершин и пикселей. Пример из реальной жизни: частота видеочипа, установленного на плате RADEON X1900 XTX равна 650 МГц, а точно такой же чип на RADEON X1900 XT работает на частоте в 625 МГц. Соответственно будут отличаться и все основные характеристики производительности. Но далеко не только рабочая частота чипа однозначно определяет производительность, на его скорость сильно влияет и архитектура: количество различных исполнительных блоков, их характеристики и т.п.

В последнее время участились случаи, когда тактовая частота для отдельных блоков GPU отличается от частоты работы всего остального чипа. То есть, разные части GPU работают на разных частотах, и сделано это для увеличения эффективности, ведь некоторые блоки способны работать на повышенных частотах, а другие — нет. Из последних примеров можно назвать семейство GeForce 8800 от NVIDIA, видеочип модели GTS работает на частоте 512 МГц, но универсальные шейдерные блоки тактуются на значительно более высокой частоте — 1200 МГц.

Скорость заполнения (филлрейт)

Скорость заполнения показывает, с какой скоростью видеочип способен отрисовывать пиксели. Различают два типа филлрейта: пиксельный (pixel fill rate) и текстурный (texel rate). Пиксельная скорость заполнения показывает скорость отрисовки пикселей на экране и зависит от рабочей частоты и количества блоков ROP (блоков операций растеризации и блендинга), а текстурная — это скорость выборки текстурных данных, которая зависит от частоты работы и количества текстурных блоков.

Например, пиксельный филлрейт у GeForce 7900 GTX равен 650 (частота чипа) * 16 (количество блоков ROP) = 10400 мегапикселей в секунду, а текстурный — 650 * 24 (кол-во блоков текстурирования) = 15600 мегатекселей/с. Чем больше первое число – тем быстрее видеокарта может отрисовывать готовые пиксели, а чем больше второе – тем быстрее производится выборка текстурных данных. Оба параметра важны для современных игр, но они должны быть сбалансированы. Именно поэтому количество блоков ROP в чипах семейства G7x, на которых построено семейство GeForce 7, меньше количества текстурных и пиксельных блоков.

Количество блоков пиксельных шейдеров (или пиксельных процессоров)

Пиксельные процессоры — это одни из главных блоков видеочипа, которые выполняют специальные программы, известные также как пиксельные шейдеры. По числу блоков пиксельных шейдеров и их частоте можно сравнивать шейдерную производительность разных видеокарт. Так как большая часть игр сейчас ограничена производительностью исполнения пиксельных шейдеров (см. технологические обзоры игр), то количество этих блоков очень важно! Если одна модель видеокарты основана на GPU с 8 блоками пиксельных шейдеров, а другая из той же линейки — 16 блоками, то при прочих равных вторая будет вдвое быстрее обрабатывать пиксельные программы, и в целом будет производительнее. Но на основании одного лишь количества блоков делать однозначные выводы нельзя, обязательно нужно учесть и тактовую частоту и разную архитектуру блоков разных поколений и производителей чипов. Чисто по этим цифрам прямо можно сравнивать чипы только в пределах одной линейки одного производителя: AMD(ATI) или NVIDIA. В других же случаях нужно обращать внимание на тесты производительности в интересующих играх.

Количество блоков вершинных шейдеров (или вершинных процессоров)

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

Количество унифицированных шейдерных блоков (или универсальных процессоров)

Унифицированные шейдерные блоки объединяют два типа перечисленных выше блоков, они могут исполнять как вершинные, так и пиксельные программы (а также геометрические, которые появились в DirectX 10). Впервые унифицированная архитектура была применена в видеочипе игровой консоли Microsoft Xbox 360, этот графический процессор был разработан компанией ATI. А в видеочипах для персональных компьютеров унифицированные шейдерные блоки появились не так давно, с появлением плат NVIDIA GeForce 8800. И, похоже, что все DirectX 10 совместимые видеочипы будут основаны на подобной унифицированной архитектуре. Унификация блоков шейдеров значит, что код разных шейдерных программ (вершинных, пиксельных и геометрических) универсален, и соответствующие унифицированные процессоры могут выполнить любые программы из вышеперечисленных. Соответственно, в новых архитектурах число пиксельных, вершинных и геометрических шейдерных блоков как бы сливается в одно число — количество универсальных процессоров.

Блоки текстурирования (TMU)

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

Блоки операций растеризации (ROP)

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

Нужно еще раз отметить, что современные видеочипы нельзя оценивать только числом разнообразных блоков и их частотой. Каждая серия GPU использует новую архитектуру, в которой исполнительные блоки сильно отличаются от старых, да и соотношение количества разных блоков может отличаться. Компания ATI первой применила архитектуру, в которой количество блоков пиксельных шейдеров было в разы больше числа блоков текстурирования. Это было сделано немного преждевременно, на наш взгляд, но в некоторых приложениях пиксельные блоки используются более активно, чем остальные и для таких приложений подобное решение будет неплохим вариантом, не говоря уже о будущем. Также, в предпоследней архитектуре AMD(ATI) нет отдельных пиксельных конвейеров, пиксельные процессоры не «привязаны» к блокам TMU. Впрочем, у NVIDIA в GeForce 8800 получилось еще сложнее.

Рассмотрим ситуацию на примере видеокарт GeForce 7900 GT и GeForce 7900 GS. Обе они имеют одинаковые рабочие частоты, интерфейс памяти и даже одинаковый видеочип. Но модификация 7900 GS использует GPU с 20 активными блоками пиксельных шейдеров и текстурных блоков, а видеокарта 7900 GT — по 24 блока каждого типа. Рассмотрим разницу в производительности этих двух решений в игре Prey:

Разница в количестве основных исполнительных блоков в 20% дала разный прирост скорости в тестовых разрешениях. Значение 20% оказалось недостижимо потому, что производительность в Prey не ограничена на этих видеокартах только скоростью блоков TMU и ROP. Разница в разрешении 1024×768 составила меньше 8%, а в более высоких достигла 12%, что ближе к теоретической разности в количестве исполнительных блоков.

Объем видеопамяти

Собственная память используется видеочипами для хранения необходимых данных: текстур, вершин, буферов и т.п. Казалось бы, что чем её больше — тем лучше. Но не всё так просто, оценка мощности видеокарты по объему видеопамяти — это наиболее распространенная ошибка! Значение объема памяти неопытные пользователи переоценивают чаще всего, используя его для сравнения разных моделей видеокарт. Оно и понятно — раз параметр, указываемый во всех источниках одним из первых, в два раза больше, то и скорость у решения должна быть в два раза выше, считают они. Реальность же от этого мифа отличается тем, что рост производительности растет до определенного объема и после его достижения попросту останавливается.

В каждой игре есть определенный объем видеопамяти, которого хватает для всех данных, и хоть 4 ГБ туда поставь — у нее не появится причин для ускорения рендеринга, скорость будут ограничивать исполнительные блоки, о которых речь шла выше. Именно поэтому почти во всех случаях видеокарта с 320 Мбайт видеопамяти будет работать с той же скоростью, что и карта с 640 Мбайт (при прочих равных условиях). Ситуации, когда больший объем памяти приводит к видимому увеличению производительности, существуют, это очень требовательные игры в высоких разрешениях и при максимальных настройках. Но такие случаи весьма редки, поэтому, объем памяти учитывать нужно, но не забывая о том, что выше определенного объема производительность просто не растет, есть более важные параметры, такие как ширина шины памяти и ее рабочая частота. Подробнее о выборе объема видеопамяти читайте во второй части статьи.

Ширина шины памяти

Ширина шины памяти является важнейшей характеристикой, влияющей на пропускную способность памяти (ПСП). Большая ширина позволяет передавать большее количество информации из видеопамяти в GPU и обратно в единицу времени, что положительно влияет на производительность в большинстве случаев. Теоретически, по 128-битной шине можно передать в два раза больше данных за такт, чем по 64-битной. На практике разница в скорости рендеринга хоть и не достигает двух раз, но весьма близка к этому во многих случаях с упором в пропускную способность видеопамяти.

Современные видеокарты используют разную ширину шины: от 64 до 512 бит, в зависимости от ценового диапазона и времени выпуска конкретной модели GPU. Для low-end видеокарт чаще всего используется 64- и (значительно реже) 128-бит, для среднего уровня 128-бит и иногда 256-бит, ну а high-end видеокарты используют шины от 256 до 512 бит шириной.

Частота видеопамяти

Еще одним параметром, влияющим на пропускную способность памяти, является её тактовая частота. А как мы поняли выше, повышение ПСП прямо влияет на производительность видеокарты в 3D приложениях. Частота шины памяти на современных видеокартах бывает от 500 МГц до 2000 МГц, то есть может отличаться в четыре раза. И так как ПСП зависит и от частоты памяти и от ширины ее шины, то память с 256-битной шиной, работающая на частоте 1000 МГц, будет иметь большую пропускную способность, по сравнению с 1400 МГц памятью с 128-битной шиной.

Рассмотрим относительную производительность видеокарт с разной пропускной способностью на примере видеокарт RADEON X1900 XTX и RADEON X1950 XTX, которые используют почти одинаковые GPU с одними характеристиками и частотой. Основные их отличия состоят в типе и частоте используемой памяти — GDDR3 на частоте 775(1550) МГц и GDDR4 на 1000(2000) МГц, соответственно.

Хорошо видно, как отстает карта с меньшей пропускной способностью памяти, хотя разница никогда не достигает теоретических 29%. Разница между достигнутой частотой кадров растет с увеличением разрешения, начинаясь с 8% в 1024×768 и достигая 12-13% в максимальных режимах. Но это сравнение видеокарт с небольшой разницей в ПСП, а особенное внимание на параметры ширины шины памяти и частоты ее работы следует уделять при покупке недорогих видеокарт, на многие из которых ставят лишь 64-битные интерфейсы, что сильно сказывается на их производительности. Вообще, покупка решений на базе 64-бит шины для игр вовсе не рекомендуется.

Типы памяти

На видеокарты устанавливают несколько различных типов памяти. Старую SDR память с одинарной скоростью передачи мы рассматривать не будем, её уже почти нигде не встретишь. Все современные типы памяти DDR и GDDR позволяют передавать в два раза большее количество данных на той же тактовой частоте за единицу времени, поэтому цифру её рабочей частоты зачастую указывают удвоенной (умножают на два). Так, если для DDR памяти указана частота 1400 МГц, то эта память работает на физической частоте в 700 МГц, но указывают так называемую «эффективную» частоту, то есть ту, на которой должна работать SDR память, чтобы обеспечить такую же пропускную способность.

Основное преимущество DDR2 памяти заключается в возможности работы на больших тактовых частотах, а соответственно — увеличении пропускной способности по сравнению с предыдущими технологиями. Это достигается за счет увеличенных задержек, которые, впрочем, не так важны для видеокарт. Первой платой, использующей DDR2 память, стала NVIDIA GeForce FX 5800 Ultra. По сути, на ней стояла GDDR2 память, которая не настоящая DDR2, а нечто среднее между технологиями DDR и DDR2. После применения GDDR2 в серии GeForce FX 5800, последующие видеокарты NVIDIA использовали DDR память, но эта память получила дальнейшее распространение в GeForce FX 5700 Ultra и в некоторых более поздних mid-end видеокартах. С тех пор технологии графической памяти продвинулись дальше, был разработан стандарт GDDR3, который близок к спецификациям DDR2, с некоторыми изменениями, сделанными специально для видеокарт.

GDDR3 — это специально предназначенная для видеокарт память, с теми же технологиями, что и DDR2, но с улучшениями характеристик потребления и тепловыделения, что позволило создать микросхемы, работающие на более высоких тактовых частотах. И опять же, несмотря на то, что стандарт был разработан в ATI, первой видеокартой, ее использующей, стала вторая модификация NVIDIA GeForce FX 5700 Ultra, а следующей стала GeForce 6800 Ultra.

Ну а GDDR4 — это последнее поколение "графической" памяти, работающее почти в два раза быстрее, чем GDDR3. Основными отличиями GDDR4 от GDDR3, существенными для пользователей, являются в очередной раз повышенные рабочие частоты и сниженное энергопотребление. Технически, память GDDR4 не сильно отличается от GDDR3, это дальнейшее развитие тех же идей. Первыми видеокартами с чипами GDDR4 на борту стали RADEON X1950 XTX, а у компании NVIDIA продукты на базе этого типа памяти еще не вышли. Преимущества новых микросхем памяти перед GDDR3 в том, что энергопотребление модулей может быть примерно на треть ниже. Это достигается за счет более низкого номинального напряжения для GDDR4.

Итак, видеопамять самых современных типов: GDDR3 и GDDR4, отличается от DDR некоторыми деталями, но также работает с удвоенной передачей данных. В ней применяются некоторые специальные технологии, позволяющие поднять частоту работы. Так, GDDR2 память обычно работает на более высоких частотах, по сравнению с DDR, GDDR3 — на еще более высоких, ну а GDDR4 обеспечивает максимальную частоту и пропускную способность.

FAQ по видеокартам GeForce: что следует знать о графических картах?

Ядро CUDA, потоковый процессор, блок шейдеров – все это синонимы вычислительного блока GPU, который выполняет расчет данных. NVIDIA по традиции называет их ядрами CUDA, где CUDA расшифровывается как Compute Unified Device Architecture. Ядра CUDA отличаются от ядер процессора, они намного менее сложные и имеют высокую степень специализации под обрабатываемые данные. GPU сегодня умеют намного больше, чем выполнять рендеринг графики через конвейер, поэтому унификация под названиями потоковый процессор или унифицированный блок шейдеров вполне обоснована.

Потоковый процессор обрабатывает непрерывный поток данных, которых насчитываются многие сотни, причем они выполняются параллельно на множестве потоковых процессоров. Современные GPU оснащаются несколькими тысячами потоковых процессоров, они отлично подходят для задач с высокой степенью параллельности. Это и рендеринг графики, и научные расчеты. Что, кстати, позволило GPU закрепиться в серверном сегменте в качестве вычислительных ускорителей.

Впрочем, потоковые процессоры – довольно общий термин, на практике у современных GPU все сложнее. GPU могут выполнять как вычисления с плавающей запятой (FP), так и целочисленные (INT) с различной точностью. Для графики важнее всего вычисления FP32 и INT32 с 32-битной точностью. В случае научных расчетов все более важными являются расчеты с более высокой точностью, а именно FP64. Поэтому в GPU появились выделенные вычислительные блоки для типа данных FP64. Впрочем, далеко не для всех расчетов нужна точность с 32 и 64 битами. Были разработаны способы выполнения менее точных вычислений на блоках INT32, например, одновременное выполнение операций над двумя 16-битными целыми числами.

Еще одним шагом дальше можно назвать интеграцию ядер Tensor в архитектуру NVIDIA Volta и Turing, которые способны эффективно вычислять менее сложные числа INT8 и INT4, но об этом мы поговорим чуть позже.

TU102-GPU Blockdiagramm

Мы рассмотрим структуру вычислительных блоков на основе архитектуры Turing, которые организованы в определенные структуры. В составе GPU TU102 имеются шесть кластеров Graphics Processing Clusters (GPC), 36 кластеров Texture Processing Clusters (TPC) и 72 потоковых мультипроцессоров Streaming Multiprocessors (SM). Но на GPU видеокарты GeForce RTX 2080 Ti активны только 34 TPC. Каждый кластер GPC содержит шесть кластеров TPC, в каждом TPC содержатся два потоковых мультипроцессора SM. Последние предлагают 64 потоковых процессора, так что 34 TPC x 2 SM x 64 потоковых процессора как раз дают 4.352 потоковых процессора на видеокарте GeForce RTX 2080 Ti.

NVIDIA масштабирует архитектуру Turing с GeForce RTX 2060 до GeForce RTX 2080 Ti. Ниже представлен обзор видеокарт линейки GeForce RTX:

Технические спецификации GeForce RTX

Модель GeForce RTX 2080 Ti GeForce RTX 2080 GeForce RTX 2070 GeForce RTX 2060
Цена от 72.600 ₽ от 47.000 ₽ от 31.500 ₽ от 21.100 ₽
Технические спецификации
Архитектура Turing Turing Turing Turing
GPU TU102 TU104 TU106 TU106
Техпроцесс TSMC 12 нм TSMC 12 нм TSMC 12 нм TSMC 12 нм
Число транзисторов 18,6 млрд. 13,6 млрд. 10,8 млрд. 10,8 млрд.
Площадь кристалла 754 мм² 545 мм² 445 мм² 445 мм²
Потоковые процессоры 4.352 2.944 2.304 1.920
Ядра Tensor 544 368 288 240
Ядра RT 68 46 36 30
Текстурные блоки 272 184 144 120
Геометрические блоки 34 23 18 15
ROPs 88 64 64 42
Частота GPU (базовая) 1.350 МГц 1.515 МГц 1.410 МГц 1.365 МГц
Частота GPU (Boost) 1.635 МГц 1.800 МГц 1.710 МГц 1.680 МГц
RTX-OPS 78 TRTX-OPS 60 TRTX-OPS 45 TRTX-OPS 37 TRTX-OPS
Гигалучей/с 10 Глуч/с 8 Глуч/с 6 Глуч/с 5 Глуч/с
Частота памяти 1.750 МГц 1.750 МГц 1.750 МГц 1.750 МГц
Тип памяти GDDR6 GDDR6 GDDR6 GDDR6
Объем памяти 11 GB 8 GB 8 GB 6 GB
Ширина шины памяти 352 бит 256 бит 256 бит 192 бит
Пропускная способность 616 Гбайт/с 448 Гбайт/с 448 Гбайт/с 336 Гбайт/с
TDP 260 Вт 225 Вт 185 Вт 160 Вт
Доп. питание 2x 8-конт. 1x 8-конт. + 1x 6-конт. 1x 8-конт. 1x 8-конт.
SLI/NVLink 2x NVLink 1x NVLink

Также на рынок была представлена видеокарта Titan RTX, которая опирается на полную версию GPU TU102. NVIDIA позиционирует Titan RTX как “Ultimate PC GPU”, видеокарта нацелена на исследователей, ученых и разработчиков в сфере глубокого обучения и искусственного интеллекта. TU102 GPU в полной версии оснащен шестью кластерами Graphics Processing Clusters (GPC), 36 кластерами TPC (Texture Processing Cluster) и 72 потоковыми мультипроцессорами Streaming Multiprocessors (SM). В случае Titan RTX мы получаем 4.608 потоковых процессоров, 576 ядер Tensor и 96 ядер RT. Полная конфигурация памяти составляет 384 бита, NVIDIA подключает 12 чипов памяти GDDR6. В случае Titan RTX, NVIDIA использует 2-Гбайт чипы памяти Samsung, которые дают емкость до 24 Гбайт.

NVIDIA Titan RTX

NVIDIA Titan RTX

NVIDIA Titan RTX

NVIDIA Titan RTX

NVIDIA Titan RTX

Одновременное выполнение операций с целыми числами и числами с плавающей запятой

Как мы уже упоминали, вычислительные блоки FP32 могут работать в режиме 2x FP16, то же самое касается INT16. Чтобы увеличить вычислительную производительность и сделать ее более гибкой, в архитектуре NVIDIA Turing появилась возможность одновременного расчета чисел с плавающей запятой и целых чисел. NVIDIA проанализировала данные вычисления в конвейере рендеринга в десятках игр, обнаружив, что на каждые 100 расчетов FP выполняется примерно треть вычислений INT. Впрочем, значение среднее, на практике оно меняется от 20% до 50%. Конечно, если вычисления FP и INT будут выполняться одновременно, то конвейеру придется иногда “подтормаживать” в случае взаимных связей.

Hybrid-Rendering

В случае всех предыдущих архитектур NVIDIA одновременное выполнение целочисленных вычислений и расчетов с плавающей запятой не поддерживалось. В случае Turing все изменилось. Параллельная обработка FP и INT ускоряет рендеринг, поэтому NVIDIA как раз и добавила ее с архитектурой Turing. У Turing SM имеются 64 блока FP32 и 64 блока INT32 – не совсем типичное соотношение для конвейера рендеринга. Но одновременная работа блоков позволила существенно увеличить вычислительную производительность.

Потоковые процессоры уже давно превратились в универсальные вычислительные блоки в составе GPU. От их количества зависит итоговая вычислительная производительность, но здесь следует учитывать точность вычислений.

Текстурные блоки

Потоковые процессоры выполняют так называемые шейдеры – небольшие программы. Вершинные шейдеры используются для геометрических вычислений и динамического изменения объектов. Геометрические шейдеры позволяют рассчитать финальную геометрию и структуру объекта из точек, линий и треугольников. Шейдеры тесселяции обеспечивают дальнейшее разделение примитивов (тех же треугольников).

Текстурные блоки Texture Mapping Units (TMU) отвечают за то, чтобы все поверхности были покрыты соответствующими текстурами. TMU – выделенные арифметические блоки GPU. В случае архитектуры Turing, один текстурный блок дополняет 16 потоковых процессоров. Данные для текстурных блоков хранятся в видеопамяти, их можно считывать оттуда и записывать. Поскольку TMU уже не являются внешними арифметическими блоками в полном понимании, а встроены в конвейер рендеринга, каждый текстурный блок может обрабатывать объекты по нескольку раз. Действительно, для рендеринга объекта простых текстур уже недостаточно, использование нескольких слоев позволяет получить 3D-вид вместо плоской текстуры. Раньше объекты приходилось рассчитывать несколько раз, и каждый раз текстурный блок накладывал текстуру, сегодня достаточно обычного процесса рендеринга, текстурный блок может получать данные для многократной обработки из буфера.

Читайте также: 

Контроллер памяти

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

Еще с архитектуры Pascal NVIDIA придерживается почти идентичной структуры GPU по работе с памятью GDDR. Интерфейс памяти разбит на 32-битные блоки. В полном варианте NVIDIA предусматривает 384-битную ширину шины, но из-за одного отключенного 32-битного блока мы получаем 352 бита у GeForce RTX 2080 Ti. Через каждый 32-битный интерфейс подключен чип памяти. 352 бит/ 32 бит дает 11 каналов и 11 чипов памяти GDDR6. В случае GeForce RTX 2080 и GeForce RTX 2070 ширина шины ограничена 256 битами, то есть восемью каналами и восемью чипами памяти GDDR6.

Ядра Tensor и RT

Ядра Tensor

С архитектурой Turing NVIDIA представила два новых вычислительных блока, ранее на GPU не использовавшихся. Конечно, ядра Tensor знакомы нам по архитектуре Volta, но там они использовались для научных расчетов. В случае GPU Turing и видеокарт GeForce RTX данные блоки играют особую роль.

Ядра Tensor предназначены для выполнения матричного умножения. Матричное умножение (BLAS GEMM) – наиболее важный компонент для тренировки и инференса сетей глубокого обучения. Матричные операции подразумевают выборку значений матриц A и B (выполнение сложения и умножения), после чего результат будет записываться в матрицу C. Для матриц 4×4 данные операции выполняются для всех 16 полей. В архитектуре Pascal для выполнения упомянутых операций использовались блоки FP32, поэтому скорость оставляла желать лучшего.

Funktionsweise von Ray Tracing

Ядра Tensor в архитектуре Turing могут выполнять INT16, INT8 и INT4. Вычислительная производительность INT8 в два раза выше, чем для INT16, поскольку можно выполнить две операции INT8 вместо INT16. То же самое касается сравнения между INT4 и INT8. В максимальном варианте GPU TU102 NVIDIA указывает 576 ядер Tensor. Но у GeForce RTX 2080 мы получаем только 544 ядра Tensor, для которых NVIDIA указывает вычислительную производительность 110 TFLOPS FP16 для игр и обработки изображений. В случае вычислений INT8 мы получаем 220 TOPS, а INT4, которые пока не используются, уже 440 TOPS.

Основная сфера применения ядер Tensor – Neural Graphics Framework (NGX) от NVIDIA. NGX обеспечивает интерфейсы для вычисления Deep Learning Super Sampling (DLSS) и различных эффектов пост-обработки через ANSEL. Но мы остановимся на этом чуть позже.

Ядра RT

Ядра RT – второй тип особых аппаратных блоков архитектуры Turing, которые используются в ней впервые. На полную трассировку лучей уходит слишком много ресурсов и времени даже с учетом нескольких тысяч потоковых процессоров на GPU. Именно по этой причине NVIDIA добавила ядра RT в архитектуру Turing, которые выполняют расчеты, необходимые для трассировки лучей. И с некоторыми типами вычислений ядра RT справляются очень эффективно. Все технологии трассировки лучей сегодня пытаются снизить вычислительную нагрузку, для этого используются разные алгоритмы.

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

Aufbau eines Shader Multiprozessors der Turing-Architektur

Один из способов выборки примитивов – Bounding Volume Hierarchy (BVH). В случае BVH сцена разбивается на все меньшие по размеру блоки, в которых присутствуют примитивы. Луч следует обрабатывать только с теми блоками, которые он проходит на пути к примитиву. Подход несколько напоминает воксели, которые NVIDIA использует для Voxel Global Illumination (VXGI). BVH представляет собой дерево, в котором можно видеть, какой именно блок и, в конечном итоге, примитив следует учитывать для расчета трассировки лучей.

BVH на классических архитектурах GPU или на CPU может выполняться только программно. Таким образом, потоковым процессорам приходится на каждый луч выполнять несколько тысяч инструкций, в том числе многочисленные циклы для поиска блоков и, в конечном итоге, примитива. Только после нахождения примитива можно выполнять шейдинг луча. Именно здесь на помощь приходят ядра RT. Они содержат специальные функциональные блоки SFU (Special Function Units), оптимизированные под поиск нужных блоков и примитива, с которым пересекается луч. Потоковый процессор принимает задачу, после чего передает ее ядру RT, которое возвращает результат потоковому процессору – и последний может выполнять рендеринг дальше по конвейеру.

Изучаем, что важнее для игрового компьютера: процессор или видеокарта – июль 2021

В данном обзоре будет рассмотрена производительность двух ведущих платформ: Intel и AMD. В тестах примут участие процессоры: Core i7-10700KF, Core i3-10320, Ryzen 7 3700Х, Ryzen 5 3500 и видеокарты GeForce RTX 2080 Super 8192 Mбайт, GeForce RTX 2060 6144 Mбайт, Radeon RX 5700 XT 8192 Мбайт, Radeon RX 5500 XT 8192 Мбайт.

Сами конфигурации выглядят следующим образом:

реклама

  • Core i7-10700KF + GeForce RTX 2060.
  • Core i7-10700KF + Radeon RX 5500 XT.
  • Core i3-10320 + GeForce RTX 2080 Super.
  • Core i3-10320 + Radeon RX 5700 XT.
  • Ryzen 7 3700Х + GeForce RTX 2060.
  • Ryzen 7 3700Х + Radeon RX 5500 XT.
  • Ryzen 5 3500Х + GeForce RTX 2080 Super.
  • Ryzen 5 3500Х + Radeon RX 5700 XT.

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

Тестовая конфигурация

Тесты проводились на следующем стенде:

  • Материнская плата №1: ASUS ROG STRIX Z490-H GAMING, LGA 1200;
  • Материнская плата №2: ASUS ROG STRIX X470-F GAMING, АМ4;
  • Система охлаждения CPU: Corsair Hydro Series H105 (

  • Core i7-10700КF – 3800-5100 @ 5000 МГц;
  • Core i3-10320 – 3800-4600 МГц;
  • Ryzen 7 3700X – 3600-4400 @ 4200 МГц;
  • Ryzen 5 3500Х – 3700-4200 @ 4200 МГц.
  • GeForce RTX 2080 Super 8192 Mбайт – 1905/15500 @ 2070/18000 МГц (NVIDIA);
  • GeForce RTX 2060 6144 Mбайт – 1845/14000 @ 2055/16000 МГц (NVIDIA);
  • Radeon RX 5700 XT 8192 Мбайт – 1755/14000 @ 2000/15000 МГц (MSI);
  • Radeon RX 5500 XT 8192 Мбайт – 1800/14000 @ 1950/15000 МГц (ASUS).

Программное обеспечение:

  • Операционная система: Windows 10 x64;
  • Драйверы видеокарты: NVIDIA GeForce 471.89 WHQL и AMD Radeon Adrenalin Edition 21.6.2.
  • Утилиты: FPS Monitor Build 5102, AutoHotkey v1.0.48.05, MSI Afterburner 4.6.2.

реклама

Инструментарий и методика тестирования

Для более наглядного сравнения оперативной памяти игры, используемые в качестве тестовых приложений, запускалась в разрешении 1920х1080.

В качестве средств измерения быстродействия применялись утилиты FPS Monitor Build 5102 и AutoHotkey v1.0.48.05. Во всех играх замерялись 1% мгновенные (редкие события) и средние значения FPS.

Вертикальная синхронизация при проведении тестов была отключена.

Список игровых приложений:

  • Assassin’s Creed Valhalla.
  • Breathedge.
  • Call of Duty: Black Ops Cold War.
  • Cyberpunk 2077.
  • Kingdom Come Deliverance.
  • The Medium.
  • Watch Dogs Legion.
  • Wolfenstein Youngblood.

Режимы работы игровых компьютеров

  • Процессор (номинал) + видеокарта (номинал).
  • Процессор (разгон) + видеокарта (разгон).

Результаты тестов: сравнение производительности

Assassin’s Creed Valhalla

  • Версия 1.1.1.
  • DirectX 12.
    • Модификатор разрешения – 100%.
    • Сглаживание – высокое.
    • Качество окружения – ультра высокое.
    • Плотность мелких объектов – очень высокое.
    • Качество теней – ультра высокое.
    • Качество воды – высокое.
    • Полноэкранные отражения – включены.
    • Качество текстур окружения – высокое.
    • Качество текстур персонажей – высокое.
    • Качество глубины резкости – высокое.
    • Размытие в движении – включено.

    1920х1080

    Breathedge

    реклама

    • Версия 1.0.
    • DirectX 11.
      • Качество текстур – эпическое.
      • Качество сглаживания – эпическое.
      • Качество теней – эпическое.
      • Качество пост-обработки – эпическое.
      • Качество эффектов – эпическое.
      • Дальность видимости – эпическая.
      • Размытие в движении – включено.

      1920х1080

      Call of Duty: Black Ops Cold War

      реклама

      • Версия 1.4.1.8305760.
      • DirectX 12.
        • Поле зрения – 80.
        • Качество текстур – ультра высокое.
        • Качество моделей – высокое.
        • Текстуры и модели HD – установлены.
        • Качество спецэффектов – высокое.
        • Отражения в экранном пространстве – высокие.
        • Дальность показа объектов – высокая.
        • Качество объемного освещения – высокое.
        • Качество теней – ультра высокое.
        • Динамические тени – все.
        • Тени от спецэффектов – включены.
        • Затенение оружия – включено.
        • Трассировка лучей: тени от солнца – отключена.
        • Трассировка лучей: локальные тени – отключены.
        • Трассировка лучей: затение – отключено.
        • NVIDIA DLSS – отключено.
        • Качество сглаживания – ультра высокое.
        • Качество затенения – ультра высокое.
        • Эффект скорости – включен.
        • Качество эффекта скорости – высокое.
        • Подповерхностное рассеиваниеи – включено.
        • Порядко-независимая прозрачность – высокая.

        1920х1080

        Cyberpunk 2077

        реклама

        • Версия 1.12.
        • DirectX 12.
          • Поле зрения – 80.
          • Хроматическая аберрация – включена.
          • Глубина резкости – включена.
          • Блики – включены.
          • Размытие в движении – высокое.
          • Контактные тени – включены.
          • Улучшенное освещение геометрии лиц – включено.
          • Анизотропная фильтрация – х16.
          • Качество объектов для локальных теней – высокое.
          • Качество локальных теней – высокое.
          • Диапазон каскадных карт теней – высокое.
          • Разрешение каскадных карт теней – высокое.
          • Разрешение дальнгих теней – высокое.
          • Разрешение объемного тумана – высокое.
          • Качество объемных облаков – высокое.
          • Максимум динамических декалей – высокий.
          • Качество отражений – высокое.
          • Качество подповерхностного рассеивания – высокое.
          • Рассеянное затенение – высокое.
          • Точность цветопередачи – высокая.
          • Качество отражений в зеркалах – высокое.
          • Уровень детализации – высокий.
          • Трассировка лучей – выключена.
          • Отражения с трассировкой лучей – выключены.
          • Тени с трассировкой лучей – /выключены.
          • Освещение с трассировкой лучей – выключено.
          • DLSS 2.0 – выключено.
          • Постоянный FidelityFX CAS – выключен.

          1920х1080

          Kingdom Come Deliverance

          реклама

          • Версия 1.9.6.
          • DirectX 11.
            • Поле зрения – 75.
            • Сглаживание – SMAA 1TX.
            • Качество объектов – ультра высокое.
            • Качество эффектов – ультра высокое.
            • Качество освещения – ультра высокое.
            • Качество частиц – ультра высокое.
            • Качество физизки – ультра высокое.
            • Качество пост-обработки – ультра высокое.
            • Качество шейдеров – ультра высокое.
            • Качество теней – ультра высокое.
            • Качество текстур – ультра высокое.
            • Качество воды – ультра высокое.
            • Детализация объемных эффектов – ультра высокая.
            • Детализация растительности – ультра высокая.
            • Дальность видимости объектов – высокая.
            • Дальность отрисовки деталей окружения – высокая.
            • Дальность отрисовки растений – средняя.
            • Размытие в движении – полная.

            1920х1080

            The Medium

            реклама

            • Версия 1.2.
            • DirectX 12.
              • RTX отражения – выключены/включены/ультра качество.
              • DLSS – выключен/качество/производительность.
              • Сглаживание – FXAA/выключено.
              • Качество теней – высокое.
              • Качество текстур – высокое.
              • SSAO – включено.
              • SSR – включено.
              • Качество SSS – высокое.
              • Раздельная прозрачность – высокая.
              • LPV – включено.
              • Качество эффектов – высокое.
              • Качество шейдеров – высокое.
              • Размытие в движении – высокое.
              • Блики линзы – высокие.

              1920х1080

              Watch Dogs Legion

              реклама

              • Версия 1.3.0.
              • DirectX 12.
                • Угол обзора – 70.
                • Качество геометрии – ультра высокое.
                • Качество окружения – ультра высокое.
                • Разрешение текстур – ультра высокое.
                • Фильтрация текстур – ультра высокая.
                • Качество теней – ультра высокое.
                • Тени объектов в свете фар – четыре источника света.
                • Качество отражений – ультра высокое.
                • Глубина резкости – включена.
                • Размытие – включено.
                • Свечение – включено.
                • Объемный свет – включен.
                • Пост-обработка и сглаживание – ТАА.
                • Подпространственное рассеивание – высокое.
                • RTX отражения – выключены.
                • DLSS – выключен.
                • Временное масштабирование – 100.
                • Угол обзора – 70.

                1920х1080

                Wolfenstein Youngblood

                • Версия 1.0.9.
                • Vulkan.
                  • Сглаживание – TAA (1TX).
                  • Размытие в движении – включено.
                  • Поле зрения – 90.
                  • Качество освещения – очень высокое.
                  • Качество теней – высокое.
                  • Качество частиц – очень высокое.
                  • Качество направленного затенения – высокое.
                  • Качество отражений – очень высокое.
                  • Качество декалей – очень высокое.
                  • Качество размытия в движении – очень высокое.
                  • Качество передачи изображения – высокое.
                  • Качество воды – очень высокое.
                  • Качество объемного изображения – высокое.
                  • Фильтрация текстур – анизотропная, 16х.
                  • Фильтрация декалей – анизотропная, 16х.
                  • Фильтрация освещения – анизотропная, 4х.
                  • Фильтрация изображения – анизотропная, 16х.
                  • Качество детализации – очень высокое.
                  • Отложенный рендеринг – включен.
                  • Удаление полигонов – отключено.
                  • Асинхронное вычисление – включено.
                  • Трассировка лучей – отключена / включена.
                  • NVIDIA DLSS – отключен / качество / производительность.
                  • Адаптивное затенение NVIDIA – отключено / включено.
                  • Хроматическая аберрация – включена.
                  • Глубина резкости – включена.
                  • Сглаживание глубины резкости – включено.
                  • HDR свечение – включено.
                  • Резкость – 2.0.
                  • Зернистость – 1.0.
                  • Масштабирование разрешения – отключено.

                  1920х1080

                  1920х1080

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

                  Однако не будем делать поспешных выводов и рассмотрим сложившийся расклад сил более пристально.

                  В случае с видеокартами компании AMD системы “Core i3-10320 + Radeon RX 5700 XT” и “Ryzen 5 3500X + Radeon RX 5700 XT” были быстрее конфигураций “Core i7-10700K + Radeon RX 5500 XT” и “Ryzen 7 3700Х + RX 5500 XT” на 46% – 54%.

                  При использовании графических ускорителей компании NVIDIA связки “Core i3-10320 + GeForce RTX 2080 Super” и “Ryzen 5 3500X + GeForce RTX 2080 Super” опередили игровые ПК “Core i7-10700K + GeForce RTX 2060” и “Ryzen 7 3700Х + GeForce RTX 2060” на 6% – 9%.

                  Налицо следующая зависимость: чем мощнее процессор, тем больше он “прокачивал” производительность младшей видеокарты. Правда, данная закономерность актуальна для видеокарт NVIDIA. Разрыв в результатах между ускорителями Radeon RX 5700 XT и RX 5500 XT был настолько велик, что процессоры оказывали на их результаты минимальное влияние.

                  Теперь более подробно рассмотрим противостояние систем с графическими процессорами NVIDIA в отдельно взятых играх. Наблюдалось два сценария:

                  • Связки с мощной видеокартой и слабым процессором были быстрее их противоположностей в играх Assassin’s Creed Valhalla, Breathedge, Call of Duty: Black Ops Cold War, Kingdom Come Deliverance, The Medium и Wolfenstein Youngblood.
                  • Связки с мощной видеокартой и слабым процессором были медленнее их противоположностей в играх Cyberpunk 2077 и Watch Dogs Legion.

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

                  В проведенном тестировании большую роль играла мощная видеокарта. В 75% протестированных игр лидировали системы с производительными графическими ускорителями и умеренно мощными процессорами. В оставшихся двух проектах процессор оказывал большое влияние на производительность видеокарт.

                  Справедливости ради стоит отметить, что младшие процессоры Core i3-10320 и Ryzen 5 3500X обеспечили комфортную производительность в большинстве протестированных игр. И с некоторыми оговорками их вполне достаточно для современного игрового ПК.

                  Благодарю за помощь в подготовке материала к публикации: donnerjack.

                  Причина четвертая – конкуренция между Intel и AMD обострилась

                  Добавьте к этому обострившуюся конкуренцию между Intel и AMD, которая и привела к резкому наращиванию ядер, и вы поймете, что шесть ядер в 2020 году – это заранее обреченное на быстрое устаревание решение.

                  Многим кажется, что дополнительные два ядра, за которые нужно доплатить почти 80% цены – это неоправданные и лишние траты. Но это такая же переплата, как за Core i7-2600K в 2013 году, когда все покупали Core i5-2500K.

                  Эта переплата позволила владельцам Core i7-2600K пропустить один апгрейд или пару-тройку лет. Даже сейчас этот процессор вполне способен работать в связке с GeForce GTX 1660.

                  И точно также переплата за восьмиядерный процессор в 2020 году позволит вам сохранить актуальность вашего ПК на два-три года дольше.

                  Процессоры, ядра и потоки. Топология систем

                  В этой статье я попытаюсь описать терминологию, используемую для описания систем, способных исполнять несколько программ параллельно, то есть многоядерных, многопроцессорных, многопоточных. Разные виды параллелизма в ЦПУ IA-32 появлялись в разное время и в несколько непоследовательном порядке. Во всём этом довольно легко запутаться, особенно учитывая, что операционные системы заботливо прячут детали от не слишком искушённых прикладных программ.

                  Используемая далее терминология используется в документации процессорам Intel. Другие архитектуры могут иметь другие названия для похожих понятий. Там, где они мне известны, я буду их упоминать.

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

                  Процессор

                  Конечно же, самый древний, чаще всего используемый и неоднозначный термин — это «процессор».

                  В современном мире процессор — это то (package), что мы покупаем в красивой Retail коробке или не очень красивом OEM-пакетике. Неделимая сущность, вставляемая в разъём (socket) на материнской плате. Даже если никакого разъёма нет и снять его нельзя, то есть если он намертво припаян, это один чип.

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

                  Поддержка нескольких центральных процессоров в одной системе требует многочисленных изменений в её дизайне. Как минимум, необходимо обеспечить их физическое подключение (предусмотреть несколько сокетов на материнской плате), решить вопросы идентификации процессоров (см. далее в этой статье, а также мою предыдущую заметку), согласования доступов к памяти и доставки прерываний (контроллер прерываний должен уметь маршрутизировать прерывания на несколько процессоров) и, конечно же, поддержки со стороны операционной системы. Я, к сожалению, не смог найти документального упоминания момента создания первой многопроцессорной системы на процессорах Intel, однако Википедия утверждает, что Sequent Computer Systems поставляла их уже в 1987 году, используя процессоры Intel 80386. Широко распространённой поддержка же нескольких чипов в одной системе становится доступной, начиная с Intel® Pentium.

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

                  К взлёту готов! Intel® Desktop Board D5400XS

                  Исторически многоядерность в Intel IA-32 появилась позже Intel® HyperThreading, однако в логической иерархии она идёт следующей.

                  Казалось бы, если в системе больше процессоров, то выше её производительность (на задачах, способных задействовать все ресурсы). Однако, если стоимость коммуникаций между ними слишком велика, то весь выигрыш от параллелизма убивается длительными задержками на передачу общих данных. Именно это наблюдается в многопроцессорных системах — как физически, так и логически они находятся очень далеко друг от друга. Для эффективной коммуникации в таких условиях приходится придумывать специализированные шины, такие как Intel® QuickPath Interconnect. Энергопотребление, размеры и цена конечного решения, конечно, от всего этого не понижаются. На помощь должна прийти высокая интеграция компонент — схемы, исполняющие части параллельной программы, надо подтащить поближе друг к другу, желательно на один кристалл. Другими словами, в одном процессоре следует организовать несколько ядер, во всём идентичных друг другу, но работающих независимо.

                  Первые многоядерные процессоры IA-32 от Intel были представлены в 2005 году. С тех пор среднее число ядер в серверных, десктопных, а ныне и мобильных платформах неуклонно растёт.

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

                  Микроснимок четырёхядерного процессора Intel с кодовым именем Nehalem. Выделены отдельные ядра, общий кэш третьего уровня, а также линки QPI к другим процессорам и общий контроллер памяти.

                  Гиперпоток

                  До примерно 2002 года единственный способ получить систему IA-32, способную параллельно исполнять две или более программы, состоял в использовании именно многопроцессорных систем. В Intel® Pentium® 4, а также линейке Xeon с кодовым именем Foster (Netburst) была представлена новая технология — гипертреды или гиперпотоки, — Intel® HyperThreading (далее HT).

                  Ничто не ново под луной. HT — это частный случай того, что в литературе именуется одновременной многопоточностью (simultaneous multithreading, SMT). В отличие от «настоящих» ядер, являющихся полными и независимыми копиями, в случае HT в одном процессоре дублируется лишь часть внутренних узлов, в первую очередь отвечающих за хранение архитектурного состояния — регистры. Исполнительные же узлы, ответственные за организацию и обработку данных, остаются в единственном числе, и в любой момент времени используются максимум одним из потоков. Как и ядра, гиперпотоки делят между собой кэши, однако начиная с какого уровня — это зависит от конкретной системы.

                  Я не буду пытаться объяснить все плюсы и минусы дизайнов с SMT вообще и с HT в частности. Интересующийся читатель может найти довольно подробное обсуждение технологии во многих источниках, и, конечно же, в Википедии. Однако отмечу следующий важный момент, объясняющий текущие ограничения на число гиперпотоков в реальной продукции.

                  Ограничения потоков

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

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

                  Другая ситуация наблюдается на типичных задачах, выполняемых на видеоускорителях. Поэтому для этих архитектур характерно использование техники SMT с бóльшим числом потоков. Так как сопроцессоры Intel® Xeon Phi (представленные в 2010 году) идеологически и генеалогически довольно близки к видеокартам, на них может быть четыре гиперпотока на каждом ядре — уникальная для IA-32 конфигурация.

                  Логический процессор

                  Из трёх описанных «уровней» параллелизма (процессоры, ядра, гиперпотоки) в конкретной системе могут отсутствовать некоторые или даже все. На это влияют настройки BIOS (многоядерность и многопоточность отключаются независимо), особенности микроархитектуры (например, HT отсутствовал в Intel® Core™ Duo, но был возвращён с выпуском Nehalem) и события при работе системы (многопроцессорные сервера могут выключать отказавшие процессоры в случае обнаружения неисправностей и продолжать «лететь» на оставшихся). Каким образом этот многоуровневый зоопарк параллелизма виден операционной системе и, в конечном счёте, прикладным приложениям?

                  Далее для удобства обозначим количества процессоров, ядер и потоков в некоторой системе тройкой (x, y, z), где x — это число процессоров, y — число ядер в каждом процессоре, а z — число гиперпотоков в каждом ядре. Далее я буду называть эту тройку топологией — устоявшийся термин, мало что имеющий с разделом математики. Произведение p = xyz определяет число сущностей, именуемых логическими процессорами системы. Оно определяет полное число независимых контекстов прикладных процессов в системе с общей памятью, исполняющихся параллельно, которые операционная система вынуждена учитывать. Я говорю «вынуждена», потому что она не может управлять порядком исполнения двух процессов, находящихся на различных логических процессорах. Это относится в том числе к гиперпотокам: хотя они и работают «последовательно» на одном ядре, конкретный порядок диктуется аппаратурой и недоступен для наблюдения или управления программам.

                  Чаще всего операционная система прячет от конечных приложений особенности физической топологии системы, на которой она запущена. Например, три следующие топологии: (2, 1, 1), (1, 2, 1) и (1, 1, 2) — ОС будет представлять в виде двух логических процессоров, хотя первая из них имеет два процессора, вторая — два ядра, а третья — всего лишь два потока.


                  Windows Task Manager показывает 8 логических процессоров; но сколько это в процессорах, ядрах и гиперпотоках?


                  Linux top показывает 4 логических процессора.

                  Это довольно удобно для создателей прикладных приложений — им не приходится иметь дело с зачастую несущественными для них особенностями аппаратуры.

                  Программное определение топологии

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

                  Информация о топологии системы в целом, а также положении каждого логического процессора в IA-32 доступна с помощью инструкции CPUID. С момента появления первых многопроцессорных систем схема идентификации логических процессоров несколько раз расширялась. К настоящему моменту её части содержатся в листах 1, 4 и 11 CPUID. Какой из листов следует смотреть, можно определить из следующей блок-схемы, взятой из статьи [2]:

                  Я не буду здесь утомлять всеми подробностями отдельных частей этого алгоритма. Если возникнет интерес, то этому можно посвятить следующую часть этой статьи. Отошлю интересующегося читателя к [2], в которой этот вопрос разбирается максимально подробно. Здесь же я сначала кратко опишу, что такое APIC и как он связан с топологией. Затем рассмотрим работу с листом 0xB (одиннадцать в десятичном счислении), который на настоящий момент является последним словом в «апикостроении».

                  APIC ID

                  Local APIC (advanced programmable interrupt controller) — это устройство (ныне входящее в состав процессора), отвечающее за работу с прерываниями, приходящими к конкретному логическому процессору. Свой собственный APIC есть у каждого логического процессора. И каждый из них в системе должен иметь уникальное значение APIC ID. Это число используется контроллерами прерываний для адресации при доставке сообщений, а всеми остальными (например, операционной системой) — для идентификации логических процессоров. Спецификация на этот контроллер прерываний эволюционировала, пройдя от микросхемы Intel 8259 PIC через Dual PIC, APIC и xAPIC к x2APIC .

                  В настоящий момент ширина числа, хранящегося в APIC ID, достигла полных 32 бит, хотя в прошлом оно было ограничено 16, а ещё раньше — только 8 битами. Нынче остатки старых дней раскиданы по всему CPUID, однако в CPUID.0xB.EDX[31:0] возвращаются все 32 бита APIC ID. На каждом логическом процессоре, независимо исполняющем инструкцию CPUID, возвращаться будет своё значение.

                  Выяснение родственных связей

                  Значение APIC ID само по себе ничего не говорит о топологии. Чтобы узнать, какие два логических процессора находятся внутри одного физического (т.е. являются «братьями» гипертредами), какие два — внутри одного процессора, а какие оказались и вовсе в разных процессорах, надо сравнить их значения APIC ID. В зависимости от степени родства некоторые их биты будут совпадать. Эта информация содержится в подлистьях CPUID.0xB, которые кодируются с помощью операнда в ECX. Каждый из них описывает положение битового поля одного из уровней топологии в EAX[5:0] (точнее, число бит, которые нужно сдвинуть в APIC ID вправо, чтобы убрать нижние уровни топологии), а также тип этого уровня — гиперпоток, ядро или процессор, — в ECX[15:8].

                  У логических процессоров, находящихся внутри одного ядра, будут совпадать все биты APIC ID, кроме принадлежащих полю SMT. Для логических процессоров, находящихся в одном процессоре, — все биты, кроме полей Core и SMT. Поскольку число подлистов у CPUID.0xB может расти, данная схема позволит поддержать описание топологий и с бóльшим числом уровней, если в будущем возникнет необходимость. Более того, можно будет ввести промежуточные уровни между уже существующими.

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

                  Отмечу, что CPUID.0xB — не единственный источник информации о логических процессорах, доступный операционной системе. Список всех процессоров, доступный ей, вместе с их значениями APIC ID, кодируется в таблице MADT ACPI [3, 4].

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

                  Операционные системы предоставляют информацию о топологии логических процессоров приложениям с помощью своих собственных интерфейсов.

                  В Linux информация о топологии содержится в псевдофайле /proc/cpuinfo , а также выводе команды dmidecode . В примере ниже я фильтрую содержимое cpuinfo на некоторой четырёхядерной системе без HT, оставляя только записи, относящиеся к топологии:

                  В FreeBSD топология сообщается через механизм sysctl в переменной kern.sched.topology_spec в виде XML:

                  В MS Windows 8 сведения о топологии можно увидеть в диспетчере задач Task Manager.

                  Также их предоставляет консольная утилита Sysinternals Coreinfo и API вызов GetLogicalProcessorInformation.

                  Полная картина

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

                  Система (2, 2, 2)

                  Система (2, 4, 1)

                  Система (4, 1, 1)

                  Прочие вопросы

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

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

                  Лицензирование

                  Некоторые программные продукты поставляются числом лицензий, определяемых количеством процессоров в системе, на которой они будут использоваться. Другие — числом ядер в системе. Наконец, для определения числа лицензий число процессоров может умножаться на дробный «core factor», зависящий от типа процессора!

                  Виртуализация

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

                  Также хотелось отметить что количество объединенных шейдеров у AMD на много больше и от этого во всех тестах в интернете с включенным максимальным сглаживание фпс теряет очень мало в отличии от NVIDIA.

                  пример: GTX 660 2Gb и GTX 640 4Gb

                  GTX 640 частота ядра 902 МГц и количество ядер 384. это в 2 раза меньше чем у 660.

                  Производительность зависит от количества ядер CUDA и тактовой частоты графического процессора.

                  Выбираем чтобы память была высшей архитектуры пока это в основном GDDR5.

                  Также стоит помнить, что примерно GDDR3*2=GDDR5

                  GDDR3 128bit = GDDR5 64bit. И так далее.

                  В чем разница между CPU и GPU?

                  Все мы знаем, что у видеокарты и процессора несколько различные задачи, однако знаете ли вы, чем они отличаются друг от друга во внутренней структуре? Как CPU (англ. — central processing unit), так и GPU (англ. — graphics processing unit) являются процессорами, и между ними есть много общего, однако сконструированы они были для выполнения различных задач. Подробнее об этом вы узнаете из данной статьи.

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

                  Основная функция GPU — рендеринг 3D графики и визуальных эффектов, следовательно, в нем все немного проще: ему необходимо получить на входе полигоны, а после проведения над ними необходимых математических и логических операций, на выходе выдать координаты пикселей. По сути, работа GPU сводится к оперированию над огромным количеством независимых между собой задач, следовательно, он содержит большой объем памяти, но не такой быстрой, как в CPU, и огромное количество исполнительных блоков: в современных GPU их 2048 и более, в то время как у CPU их количество может достигать 48, но чаще всего их количество лежит в диапазоне 2-8.

                  Основные отличия

                  CPU отличается от GPU в первую очередь способами доступа к памяти. В GPU он связанный и легко предсказуемый — если из памяти читается тексел текстуры, то через некоторое время настанет очередь и соседних текселов. С записью похожая ситуация — пиксель записывается во фреймбуфер, и через несколько тактов будет записываться расположенный рядом с ним. Также графическому процессору, в отличие от универсальных процессоров, просто не нужна кэш-память большого размера, а для текстур требуются лишь 128–256 килобайт. Кроме того, на видеокартах применяется более быстрая память, и в результате GPU доступна в разы большая пропускная способность, что также весьма важно для параллельных расчетов, оперирующих с огромными потоками данных.

                  Есть множество различий и в поддержке многопоточности: CPU исполняет 12 потока вычислений на одно процессорное ядро, а GPU может поддерживать несколько тысяч потоков на каждый мультипроцессор, которых в чипе несколько штук! И если переключение с одного потока на другой для CPU стоит сотни тактов, то GPU переключает несколько потоков за один такт.

                  В CPU большая часть площади чипа занята под буферы команд, аппаратное предсказание ветвления и огромные объемы кэш-памяти, а в GPU большая часть площади занята исполнительными блоками. Вышеописанное устройство схематично изображено ниже:

                  Разница в скорости вычислений

                  Если CPU — это своего рода «начальник», принимающий решения в соответствии с указаниями программы, то GPU — это «рабочий», который производит огромное количество однотипных вычислений. Выходит, что если подавать на GPU независимые простейшие математические задачи, то он справится значительно быстрее, чем центральный процессор. Данным отличием успешно пользуются майнеры биткоинов.

                  Майнинг Bitcoin

                  Суть майнинга заключается в том, что компьютеры, находящиеся в разных точках Земли, решают математические задачи, в результате которых создаются биткоины. Все биткоин-переводы по цепочке передаются майнерам, чья работа состоит в том, чтобы подобрать из миллионов комбинаций один-единственный хэш, подходящий ко всем новым транзакциям и секретному ключу, который и обеспечит майнеру получение награды в 25 биткоинов за раз. Так как скорость вычисления напрямую зависит от количества исполнительных блоков, получается, что GPU значительно лучше подходят для выполнения данного типа задачи, нежели CPU. Чем больше количество произведенных вычислений, тем выше шанс получить биткоины. Дело даже дошло до сооружения целых ферм из видеокарт:

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

                  Тип видеопамяти

                  Тип памяти – это стандарт, которому соответствуют чипы памяти, установленные на видеокарте. На сегодняшний день существует пять таких стандартов, но актуальными являются только три последних их поколения: DDR2, GDDR3 и GDDR5. Последний из них отличается наилучшей оптимизацией и скоростью работы.

                  Объем видеопамяти

                  Чем больше объем видеопамяти, тем больше данных в нем поместится, а значит, тем меньшее количество раз видеокарта будет вынуждена выгружать графические данные в память, что в итоге означает улучшение производительности.

                  Разрядность шины видеопамяти

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

                  Гибридные процессоры

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

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

                  Процессор AMD A series BLACK EDITION

                  Графический процессор, GPU

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

                  Видеоконтроллер

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

                  Видеопамять

                  Служит кадровым буфером, в который помещаются изображения, генерируемые графическим процессором перед последующим выводом на экран монитора, а также для хранения промежуточных данных связанных с 3D-вычислениями. Видеокарты комплектуются памятью типа GDDR3, GDDR4 и GDDR5. Следует также иметь в виду, что помимо видеопамяти, находящейся на видеокарте, современные графические процессоры могут использовать в своей работе часть общей системной памяти компьютера.

                  Цифро-аналоговый преобразователь, RAMDAC

                  RAMDAC необходим для преобразования изображения, формируемого видеоконтроллером, в уровни интенсивности цвета, подаваемые на аналоговый монитор. Большинство цифро-аналоговых преобразователей имеют разрядность 8 бит на канал, что даёт 256 уровней яркости на каждый основной цвет — 16,7 млн. цветов.

                  Видео-BIOS

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

                  Система охлаждения

                  Предназначена для сохранения температурного режима видеопроцессора и видеопамяти в допустимых пределах.

                  Какой процессор выбрать в 2020 году с заделом на будущее

                  Сборка игрового компьютера – дело не самое простое. Недостаточно одной супермощной комплектующей, которая будет тянуть всю производительность на себе, будь то материнская плата, видеокарта, процессор и т.д. Главное – найти баланс, чтобы материнская плата могла раскрыть возможности процессора и оперативной памяти, а они, в свою очередь, при помощи видеокарты выдавали максимальную производительность сборки. Так, многие допускают ошибки на данном этапе, поэтому сегодня рассмотрим различные виды процессоров.

                  Сразу оговорюсь, что будет несколько категорий, но по большей мере будут современные и популярные сокеты из магазинов, а также с вторичного рынка и Aliexpress: 1151v2, 1200, AM4, 2011 (v1-3), 2066.

                  «Процессоры-затычки»

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

                  Среди Intel и сокета 1151v2 берут «пеньки» — Pentium G5400 (2 ядра 4 потока, что слабо для игр в 2020 году, но пересидеть хватит). Новый в магазине стоит 4300 рублей, но за такую цену брать не стоит, поскольку на Авито можно найти за 3000 рублей, что уже приятнее в нынешней ситуации с курсом и самоизоляцией. Такого процессора хватит пересидеть, пока не будет денег на i5, i7 или i9 на сокете 1151v2.

                  Среди «красных» на AM4 популярностью пользуются AMD Ryzen 3 1200 (4 ядра 4 потока, что уже лучше, чем у Intel за те же деньги). 3000 рублей на Авито и 3800 новый в магазинах, и вот уже можно играть в современные проекты гораздо увереннее. Также есть вариант со встроенной графикой на AMD Athlon 200GE, но это если не хватает денег на Ryzen и использование будет предназначено для сёрфинга в Интернете. Ценник на вторичном рынке будет от 2000 до 2500 рублей, а в магазинах в районе 3000 рублей с гарантией.

                  Так, это лишь первоначальный уровень или же просто промежуточное звено перед новым мощным железом.

                  Выбор на 2020 год

                  Одна из самых спорных категорий, на мой взгляд, в свете недавнего выхода сокета 1200 у Intel.

                  Во-первых, раньше были бесспорные лидеры индустрии среди AMD Ryzen 5 1600, 2600, 3600 (соответственно 6 ядер 12 потоков – самые универсальные процессоры для игр и любых других задач, вплоть до рендеринга). Цена была на них от 7000 рублей за Ryzen 5 1600 (на Авито и Aliexpress) до 14000 рублей за Ryzen 5 3600 (в магазинах с гарантией).

                  Со стороны Intel это был i5 9400f (6 ядер 6 потоков, что давало просадку в мультимедийных задачах, но в играх производительность на ядро лучше). Цена за данный процессор доходит до 12000 рублей в магазинах с гарантией.

                  Есть, конечно, у Intel i3 9100f (4 ядра 4 потока) для достаточно бюджетной игровой сборки, но при цене в 6000 рублей он не представляет особого интереса, поскольку с доплатой всего 1000 рублей есть возможность получить уже более универсальный и поддающийся разгону Ryzen 5 1600, а если и повезет, то обновленную версию Ryzen 5 1600 AF.

                  Во-вторых, на сегодняшний день вышли достаточно интересные процессоры: у AMD – Ryzen 5 3300x (4 ядра 8 потоков, с повышенной производительностью на ядро), у Intel – в целом сокет 1200 с моделями i3 10100 (4 ядра 8 потоков) и i5 10400f (6 ядер 12 потоков, что позволяет сравняться с Ryzen 5 3600 в универсальности). Процессоры нового сокета 1200 только пополняют рынок, и чтобы сполна их раскрыть, нужно приобрести материнскую плату на чипсете Z490, что достаточно сильно бьет по карману (от 12000 рублей, что для популярных бюджетных сборок дороговато). В то же время, для Ryzen 5 3300x нужно всего перепрошить BIOS на своей материнской плате и можно наслаждаться производительностью за 10000-12000 рублей.

                  В-третьих, конечно, пройдет несколько месяцев, цены спадут и тогда Intel 10-го поколения, скорее всего, будет постепенно вытеснять 9-е поколение на сокете 1151v2.

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

                  Предтоп и топ

                  Речь пойдет о следующих процессорах:

                  Среди Intel — i5 9600k (6 ядер 6 потоков) – до 19000 рублей в магазинах с гарантией, i7 9700k (8 ядер 8 потоков), i7 9700kf (8 ядер 8 потоков, дешевле на 2000-3000 из-за отсутствия встроенного графического ядра) – до 33000 рублей в розничных магазинах, i9 9900k (8 ядер 16 потоков), i7 9900kf (8 ядер 16 потоков, также дешевле на 2000-3000 из-за отсутствия встроенного графического ядра) – до 41000 рублей.

                  Среди AMD – Ryzen 5 3600 (уже говорили о нем, 6 ядер 12 потоков) – до 14000 рублей, Ryzen 7 2700x (8 ядер 16 потоков, с возможностью разгона) – до 19000 рублей, Ryzen 9 3900x (12 ядер 24 потока) – до 37000 рублей.

                  Существенно дешевле процессоры от «красных», но они имеют свои преимущества и недостатки. Например, мультипоточность, она дает преимущество в многозадачности, если открыт браузер, идет стрим и еще запущена игра, то потоки решают. Тем не менее, топовый процессор у Intel (i9 9900k, kf) не обделен потоками, но его цена в 40000 рублей отталкивает покупателей с маленьким бюджетом для сборки. С другой стороны, в большинстве современных компьютерных игр важна производительность на ядро, что в процессорах Intel реализовано гораздо лучше, чем у «красных» конкурентов.

                  Также в категории «предтоп и топ» отсутствуют процессоры нового сокета 1200. Они все имеют технологию Hyper Threading (1 ядро+2 потока), что без сомнения ставит их наравне с AMD во многих задачах, но так как это новинки, то и ценники высокие, поэтому здесь 10-е поколение не учитывается. Все же стоит отметить, что некоторые пользователи готовы здесь и сейчас брать новые процессоры и материнские платы, и, думаю, разочарованы не будут.

                  Не для всех

                  Для энтузиастов всегда найдутся варианты даже в период пандемии и падения курса рубля. Актуальными оставались и остаются сборки с Aliexpress на сокете 2011. Некоторое время назад цены были адекватными, а производительность за те деньги была чуть ли не космическая. Однако не все так идеально: под 2011 нужны материнские платы, можно найти китайские на Aliexpress в 2 раза дешевле фирменных, но качество все же хуже, работоспособность соответственно остается под вопросом. Фирменные же материнские платы стоят достаточно дорого и их тяжело найти в хорошем состоянии, но вот с процессорами ситуация проще. Самые популярные варианты Xeon E5: 1650, 1650v2, 1650v3 2620, 2620v2, 2620v3, 2689, 2690, 2640v3, 2678v3 и т.д.

                  Цены на данные процессоры не превышают 10000 рублей, да они будут б/у, но их производительности будет достаточно для современных игр за адекватные деньги. Многие считают XEONы народными процессорами, хотя в свое время не каждый мог их себе позволить приобрести.

                  Работают профессионалы

                  Напоследок, сокет 2066, достаточно редкий, но не менее интересный. В связи с развитием технологий и постоянным выпуском новых процессоров обновляется и платформа, но 2066 одна из редких, которая не менялась достаточно давно. Обновления процессоров выходят и выходят, но сокет один и тот же. Возможно, некоторые и готовы изначально переплатить за такую долгосрочную перспективу, ведь сами процессоры могут стоить вплоть до 200000 рублей. Их основная задача в основном не игры, а работа, например, видео или графика. Также у процессоров данного сокета есть один существенный минус, они очень горячие – расчетное тепловыделение до 165w, в отличие от среднебюджетных и топовых версий с 65 и 95w соответственно.

                  Подведем итоги

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

                  Высокопроизводительные вычисления: проблемы и решения

                  Компьютеры, даже персональные, становятся все сложнее. Не так уж давно в гудящем на столе ящике все было просто — чем больше частота, тем больше производительность. Теперь же системы стали многоядерными, многопроцессорными, в них появились специализированные ускорители, компьютеры все чаще объединяются в кластеры.
                  Зачем? Как во всем этом многообразии разобраться?
                  Что значит SIMD, SMP, GPGPU и другие страшные слова, которые встречаются все чаще?
                  Каковы границы применимости существующих технологий повышения производительности?

                  Введение

                  Откуда такие сложности?
                  Формула производительности

                  Возьмем самую общую формулу производительности:

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

                  Первая часть полученного произведения — количество инструкций, выполняемых за один такт (IPC, Instruction Per Clock), вторая — количество тактов процессора в единицу времени, тактовая частота.
                  Таким образом, для увеличения производительности нужно или поднимать тактовую частоту или увеличивать количество инструкций, выполняемых за один такт.
                  Т.к. рост частоты остановился, придется увеличивать количество исполняемых «за раз» инструкций.

                  Включаем параллельность

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

                  Параллелизм на уровне инструкций

                  Возьмем простенькую программу:
                  a = 1
                  b = 2
                  c = a + b

                  Первые две инструкции вполне можно выполнять параллельно, только третья от них зависит. А значит — всю программу можно выполнить за два шага, а не за три.
                  Процессор, который умеет сам определять независимые и непротиворечащие друг другу инструкции и параллельно их выполнять, называется суперскалярным.
                  Очень многие современные процессоры, включая и последние x86 — суперскалярные процессоры, но есть и другой путь: упростить процессор и возложить поиск параллельности на компилятор. Процессор при этом выполняет команды «пачками», которые заготовил для него компилятор программы, в каждой такой «пачке» — набор инструкций, которые не зависят друг от друга и могут исполняться параллельно. Такая архитектура называется VLIW (very long instruction word — «очень длинная машинная команда»), её дальнейшее развитие получило имя EPIC (explicitly parallel instruction computing) — микропроцессорная архитектура с явным параллелизмом команд)
                  Самые известные процессоры с такой архитектурой — Intel Itanium.
                  Есть и третий вариант увеличения количества инструкций, выполняемых за один такт, это технология Hyper Threading В этой технологии суперскалярный процессор самостоятельно распараллеливает не команды одного потока, а команды нескольких (в современных процессорах — двух) параллельно запущенных потоков.
                  Т.е. физически процессорное ядро одно, но простаивающие при выполнении одной задачи мощности процессора могут быть использованы для выполнения другой. Операционная система видит один процессор (или одно ядро процессора) с технологией Hyper Threading как два независимых процессора. Но на самом деле, конечно, Hyper Threading работает хуже, чем реальные два независимых процессора т.к. задачи на нем будут конкурировать за вычислительные мощности между собой.

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

                  Параллелизм на уровне данных

                  Векторные процессоры

                  Мы уже упоминали скалярность, но кроме скаляра есть и вектор, и кроме суперскалярных процессоров есть векторные.
                  Векторные процессоры выполняют какую-то операцию над целыми массивами данных, векторами. В «чистом» виде векторные процессоры применялись в суперкомьютерах для научных вычислений в 80-е годы.
                  По классификации Флинна, векторные процессоры относятся к SIMD — (single instruction, multiple data — одиночный поток команд, множественный поток данных).
                  В настоящее время в процессорах x86 реализовано множество векторных расширений — это MMX, 3DNow!, SSE, SSE2 и др.
                  Вот как, например, выглядит умножение четырех пар чисел одной командой с применением SSE:

                  float a[4] = < 300.0, 4.0, 4.0, 12.0 >;
                  float b[4] = < 1.5, 2.5, 3.5, 4.5 >;
                  __asm <
                  movups xmm0, a ; // поместить 4 переменные с плавающей точкой из a в регистр xmm0
                  movups xmm1, b ; // поместить 4 переменные с плавающей точкой из b в регистр xmm1
                  mulps xmm1, xmm0 ; // перемножить пакеты плавающих точек: xmm1=xmm1*xmm0
                  movups a, xmm1 ; // выгрузить результаты из регистра xmm1 по адресам a
                  >;

                  Таким образом, вместо четырех последовательных скалярных умножений мы сделали только одно — векторное.
                  Векторные процессоры могут значительно ускорить вычисления над большими объемами данных, но сфера их применимости ограничена, далеко не везде применимы типовые операции над фиксированными массивами.
                  Впрочем, гонка векторизации вычислений далеко не закончена — так в последних процессорах Intel появилось новое векторное расширение AVX (Advanced Vector Extension)
                  Но гораздо интереснее сейчас выглядят

                  Графические процессоры

                  Теоретическая вычислительная мощность процессоров в современных видеокартах растет гораздо быстрее, чем в обычных процессорах (посмотрим знаменитую картинку от NVIDIA)

                  Не так давно эта мощность была приспособлена для универсальных высокопроизводительных вычислений с помощью CUDA/OpenCL.
                  Архитектура графических процессоров (GPGPU, General Purpose computation on GPU – универсальные расчеты средствами видеокарты), близка к уже рассмотренной SIMD.
                  Она называется SIMT — (single instruction, multiple threads, одна инструкция — множество потоков). Так же как в SIMD операции производятся с массивами данных, но степеней свободы гораздо больше — для каждой ячейки обрабатываемых данных работает отдельная нить команд.
                  В результате
                  1) Параллельно могут выполняться сотни операций над сотнями ячеек данных.
                  2) В каждом потоке выполняется произвольная последовательность команд, она может обращаться к разным ячейкам.
                  3) Возможны ветвления. При этом, правда, параллельно могут выполняться только нити с одной и той же последовательностью операций.

                  GPGPU позволяют достичь на некоторых задачах впечатляющих результатов. но существуют и принципиальные ограничения, не позволяющие этой технологии стать универсальной палочкой-выручалочкой, а именно
                  1) Ускорить на GPU можно только хорошо параллелящийся по данным код.
                  2) GPU использует собственную память. Трансфер данных между памятью GPU и памятью компьютера довольно затратен.
                  3) Алгоритмы с большим количеством ветвлений работают на GPU неэффективно

                  Мультиархитектуры-

                  Итак, мы дошли до полностью параллельных архитектур — независимо параллельных и по командам, и по данным.
                  В классификации Флинна это MIMD (Multiple Instruction stream, Multiple Data stream — Множественный поток Команд, Множественный поток Данных).
                  Для использования всей мощности таких систем нужны многопоточные программы, их выполнение можно «разбросать» на несколько микропроцессоров и этим достичь увеличения производительности без роста частоты. Различные технологии многопоточности давно применялись в суперкомпьютерах, сейчас они «спустились с небес» к простым пользователям и многоядерный процессор уже скорее правило, чем исключение. Но многоядерность далеко не панацея.

                  Суров закон, но это закон

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

                  Ускорение кода зависит от числа процессоров и параллельности кода согласно формуле

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

                  Например, если выполнение последовательного кода занимает всего 25% от времени выполнения всей программы, то ускорить эту программу более чем в 4 раза не получится никак.
                  Давайте построим график зависимости ускорения нашей программы от количества параллельно работающих вычислителей-процессоров. Подставив в формулу 1/4 последовательного кода и 3/4 параллельного, получим

                  Грустно? Еще как.
                  Самый быстрый в мире суперкомпьютер с тысячами процессоров и терабайтами памяти на нашей, вроде бы даже неплохо (75%!) параллелящейся задаче, меньше чем вдвое быстрее обычного настольного четырехядерника.
                  Причем всё еще хуже, чем в этом идеальном случае. В реальном мире затраты обеспечение параллельности никогда не равны нулю и потому при добавлении все новых и новых процессоров производительность, начиная с некоторого момента, начнет падать.
                  Но как же тогда используется мощь современных очень-очень многоядерных суперкомпьютеров?
                  Во многих алгоритмах время исполнения параллельного кода сильно зависит от количества обрабатываемых данных, а время исполнения последовательного кода — нет. Чем больше данных требуется обработать, тем больше выигрыш от параллельности их обработки. Потому «загоняя» на суперкомп большие объемы данных получаем хорошее ускорение.
                  Например перемножая матрицы 3*3 на суперкомпьютере мы вряд ли заметим разницу с обычным однопроцессорным вариантом, а вот умножение матриц, размером 1000*1000 уже будет вполне оправдано на многоядерной машине.
                  Есть такой простой пример: 9 женщин за 1 месяц не могут родить одного ребенка. Параллельность здесь не работает. Но вот та же 81 женщина за 9 месяцев могут родить (берем максимальную эффективность!) 81 ребенка, т.е.получим максимальную теоретическую производительность от увеличения параллельности, 9 ребенков в месяц или, в среднем, тот же один ребенок в месяц на 9 женщин.
                  Большим компьютерам — большие задачи!

                  Мультипроцессор

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

                  Системы с общей памятью

                  В таких системах множество процессоров (и процессорных кэшей) имеет доступ к одной и той же физической оперативной памяти. Такая модель часто называется симметричной мультипроцессорностью (SMP). Доступ к памяти при таком построении системы называется UMA (uniform memory access, равномерный доступ) т.к. любой процессор может обратиться к любой ячейке памяти и скорость этого обращения не зависит от адреса памяти. Однако каждый микропроцессор может использовать свой собственный кэш.

                  Несколько подсистем кэш-памяти процессоров, как правило, подключены к общей памяти через шину

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

                  Когерентность кэша

                  Допустим, у нас есть многопроцессорный компьютер. Каждый процессор имеет свой кэш, ну, как на рисунке вверху. Пусть некоторую ячейку памяти читали несколько процессоров — и она попала к ним в кэши. Ничего страшного, пока это ячейка неизменна — из быстрых кэшей она читается и как-то используется в вычислениях.
                  Если же в результате работы программы один из процессоров изменит эту ячейку памяти, чтоб не было рассогласования, чтоб все остальные процессоры «видели» это обновление придется изменять содержимое кэша всех процессоров и как-то тормозить их на время этого обновления.
                  Хорошо если число ядер/процессоров 2, как в настольном компьютере, а если 8 или 16? И если все они обмениваются данными через одну шину?
                  Потери в производительности могут быть очень значительные.

                  Многоядерные процессоры

                  Как бы снизить нагрузку на шину?
                  Прежде всего можно перестать её использовать для обеспечения когерентности. Что для этого проще всего сделать?
                  Да-да, использовать общий кэш. Так устроены большинство современных многоядерных процессоров.

                  Посмотрим на картинку, найдем два отличия от предыдущей.
                  Да, кэш теперь один на всех, соответственно, проблема когерентности не стоит. А еще круги превратились в прямоугольники, это символизирует тот факт, что все ядра и кэши находятся на одном кристалле. В реальной действительности картинка несколько сложнее, кэши бывают многоуровневыми, часть общие, часть нет, для связи между ними может использоваться специальная шина, но все настоящие многоядерные процессоры не используют внешнюю шину для обеспечения когерентности кэша, а значит — снижают нагрузку на нее.
                  Многоядерные процессоры — один из основных способов повышения производительности современных компьютеров.
                  Уже выпускаются 6 ядерные процессоры, в дальшейшем ядер будет еще больше… где пределы?
                  Прежде всего «ядерность» процессоров ограничивается тепловыделением, чем больше транзисторов одновременно работают в одном кристалле, тем больше этот кристалл греется, тем сложнее его охлаждать.
                  А второе большое ограничение — опять же пропускная способность внешней шины. Много ядер требуют много данных, чтоб их перемалывать, скорости шины перестает хватать, приходится отказываться от SMP в пользу

                  NUMA (Non-Uniform Memory Access — «неравномерный доступ к памяти» или Non-Uniform Memory Architecture — «Архитектура с неравномерной памятью») — архитектура, в которой, при общем адресном пространстве, скорость доступа к памяти зависит от ее расположения Обычно у процессора есть ” своя” память, обращение к которой быстрее и «чужая», доступ к которой медленнее.
                  В современных системах это выглядит примерно так

                  Процессоры соединены с памятью и друг с другом с помощью быстрой шины, в случае AMD это Hyper Transport, в случае последних процессоров Intel это QuickPath Interconnect
                  Т.к. нет общей для всех шины то, при работе со «своей» памятью, она перестает быть узким местом системы.
                  NUMA архитектура позволяет создавать достаточно производительные многопроцессорные системы, а учитывая многоядерность современных процессоров получим уже очень серьезную вычислительную мощность «в одном корпусе», ограниченную в основном сложностью обеспечения кэш-когерентности этой путаницы процессоров и памяти.
                  Но если нам нужна еще большая мощность, придется объединять несколько мультипроцессоров в

                  Мультикомпьютер

                  Мультикомпьютер — вычислительная система без общей памяти, состоящая из большого числа взаимосвязанных компьютеров (узлов), у каждого из которых имеется собственная память. При работе над общей задаче узлы мультикомпьютера взаимодействуют через отправку друг другу сообщений.
                  Современные мультикомпьютеры, построенные из множества типовых деталей, называют вычислительными кластерами.
                  Большинство современных суперкомпьютеров построены по кластерной архитектуре, они объединяют множество вычислительных узлов с помощью быстрой сети (Gigabit Ethernet или InfiniBand) и позволяют достичь максимально возможной при современном развитии науки вычислительной мощности.
                  Проблемы, ограничивающие их мощность, тоже немаленькие
                  Это:
                  1) Программирование системы с параллельно работающими тысячами вычислительных процессоров
                  2) Гигантское энергопотребление
                  3) Сложность, приводящая к принципиальной ненадежности

                  Сводим все воедино

                  Ну вот, вкратце пробежались почти по всем технологиям и принципам построения мощных вычислительных систем.
                  Теперь есть возможность представить себе строение современного суперкомпьютера.
                  Это мультикомпьютер-кластер, каждый узел которого — NUMA или SMP система с несколькими процессорами, каждый из процессоров с несколькими ядрами, каждое ядро с возможностью суперскалярного внутреннего параллелизма и векторными расширениями. Вдобавок ко всему этому во многих суперкомпьютерах установлены GPGPU — ускорители.
                  У всех этих технологий есть плюсы и ограничения, есть тонкости в применении.
                  А теперь попробуйте эффективно загрузить-запрограммировать всё это великолепие!
                  Задача нетривиальная… но очень интересная.
                  Что-то будет дальше?

                  Заключение

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

                  Единственно, что можно вычленить из всего этого тестирования – покупайте процессоры холодные, производительные и современные, особое внимание уделяйте микроархитектуре процессора, не гонитесь за парой лишних ядер при низкой частоте, но и не акцентируйте внимание на высоких частотах. Совсем скоро пред многими предстанет выбор бюджетного процессора для игр и мультимедиа – Ryzen 5 1600AF и Ryzen 3 3100. Какой процессор выбрать по моему мнению – никакой, а чуть переплатить и забрать Ryzen 5 3500X. А все потому что процессоры из одного ценового сегмента примерно равны по производительности, либо же созданы под определенные задачи, на которые и вам стоит ориентироваться.

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

                  Следовательно, если вы играете в игры, то оптимальным вариантом будет приобретение процессора с шестью производительными ядрами , если вас интересуют онлайн игры, то хорошим бюджетным решением будет четырехъядерный процессор с высокой производительностью на ядро, желательно с технологией многопоточности. А если вам нужен процессор для работы , тогда стоит обратить внимание на многоядерные процессоры с наименьшей ценой за ядро при большом количестве ядер. Отличный пример – Ryzen 9 3900 PRO.

                  Если же вы собираете универсальный компьютер с прицелом на будущее, то отличным решением для вас будет покупка современного процессора с восемью ядрами: Ryzen 7 1700 / 1700X / 2700 / 2700X – бюджетные универсальные процессоры для тех, кто не гонится за максимальным FPS в играх; Ryzen 7 3700X / I7 9700KF – максимальный FPS за разумные деньги с прицелом на будущее; I9 9900KF – лучший выбор энтузиаста-максималиста, если в ближайшие 5-7 лет планируется апгрейд только видеокарты.

                  А что вы считаете по этому поводу и по какому принципу выбираете процессор для себя ?

Ссылка на основную публикацию
Adblock
detector