Pentium4 производства AMD

Введение

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

Это правда, странная ирония: в своей процессорной ипостаси AMD долго конкурировала с представителями архитектуры Netburst, а как производитель GPU представила продукт, противоположный собственным CPU, если виртуально спроецировать мир центральных процессоров на мир процессоров графических (с точки зрения их неграфического применения).

Надо сразу сказать, что микроархитектуры GPU AMD и NVIDIA были весьма схожи до недавнего времени, как сходна принципиальная схема работы всех x86 процессоров. Они отличаются вариациями, например у одного процессора может быть L1 кэш размером 16 Кб и L2 кэш размером 1024 Кб, у второго L1 — 64 Кб и L2 — 256 Кб; у одного процессора один модуль умножения и два модуля сложения, у второго процессора только два функциональных модуля, но универсальных. Но в целом, всё в рамках одной общей идеи.

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

Что, всё-таки, обусловило некоторые различия во внутреннем устройстве изделий различных производителей? В отличие от x86 CPU, которые все предназначены для выполнения одного и того же кода, состоящего из одних и тех же команд, а также должны выполнять программы двадцатилетней давности и быть совместимыми со всем на свете, графические процессоры выполняют программы, которые перекомпилируются для каждой новой модели отдельно. И требований по совместимости, на уровне не только машинных инструкций, но даже и программ, нет.

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

Архитектура Evergreen «с высоты птичьего полёта»

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

И мы сразу обращаем внимание, что рисунок похож на чертежи GPU от NVIDIA. Суть архитектуры одинакова у обоих производителей. Это набор минипроцессоров, которые обладают каждый локальной памятью объемом 16, 32, 48 Кб (GT200, Evergreen, Fermi соответственно), данные в которую загружаются специальными командами из программы, это не автоматический кэш данных первого уровня. И минипроцессоры обладают группой вычислительных модулей, которые реализуют концепцию Single Instruction — Multiple Thread, то есть, все модули выполняют одну инструкцию, но с разными данными, специфичными соответствующей нити. Это может быть так же инструкция ветвления. Одновременно исполняется множество программных нитей, но все нити реализуют одинаковую функцию. Подробно, эта технология описана в статье об NVIDIA CUDA. А в этой статье, чтобы не повторяться, мы сконцентрируемся на отличиях в архитектурах GPU AMD и NVIDIA. Надо сказать, что если бы вместо GT200 NVIDIA выпускала бы Evergreen, то в прошлой статье изменения были бы не очень большие.

Если у GT 200, в стандартной комплектации, 30 мини-процессоров и у каждого по 8 исполнительных устройств для выполнения математических действий сложения и умножения, GT300 обладает 16-ю более «жирными» минипроцессорами с 32 исполнительными устройствами каждый, то Evergreen имеет 20 минипроцессоров с 16 исполнительными устройствами. Собственно, бюджетная ревизия HD 5670 имеет 10 минипроцессоров, тоже с 16 исполнительными устройствами.

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

 /