Четверг, 03.07.2025, 20:46
Главная Регистрация RSS
Приветствую Вас, Гость
Меню сайта
Категории раздела
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Information Technologies (IT) » HardWare

Производительность

Ниже на диаграммах приведена производительность в gigaflops при перемножении матриц размером 5000×5000, с использованием вещественных чисел одинарной и двойной точности, а так же комплексных чисел одинарной и двойной точности.

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

Более того, проведенные автором тесты показали, что производительность при увеличении размера матрицы почти не падает. Она скорее может уменьшаться при малом размере матрицы, так как тогда накладные расходы на передачу данных в GPU и обратно начинают доминировать, и к тому же возрастают расходы на запуск программы на GPU. Помимо этого, очень малые размеры матрицы не позволят создать достаточное количество нитей, которое, как мы знаем, необходимо для эффективной работы GPU (подробнее — в статье «Особенности архитектуры AMD/ATI Radeon»).

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

Однако ACML автоматически определяет, при каком размере матриц эффективнее использовать CPU, и сама переключается при необходимости на CPU-реализацию. Конкретные размеры матрицы, при которых становится невыгодно использовать имеющийся GPU, зависят от параметров работы шины PCI Express (1.0 или 2.0, x8 или x16), производительности установленного CPU, а также размера используемого типа данных (он влияет на объем данных, передаваемых по шине).

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

Тестирование библиотеки проводилось на Radeon 5830, для сравнения приведены результаты CPU-варианта на процессоре AMD Phenom II X4 920 (2800 МГц, 4 ядра, 4 МБ L3). Также приведена пиковая теоретическая производительность этого процессора и Intel Core i7-990X и виртуальные результаты Radeon 5850 и Radeon 5870. (Так как GPU-приложения в целом масштабируются по количеству SIMD Engine и частоте шейдеров, оценка производительности более мощных карточек будет недалека от истины.) Экстремальный процессор Intel взят для оценки максимальной производительности настольной платформы (без учета Sandy Bridge) в CPU-варианте: у него 6 ядер, работающих в режиме Turbo Boost на частоте 3,6 ГГц.

Максимальная теоретическая производительность AMD K10 и Intel Nehalem в вычислениях с вещественными числами считается как произведение частоты процессора, количества [физических] ядер и количества операций за один такт. А нынешние процессоры обеих компаний в идеале могут исполнять SSE-операции с темпом 2. То есть получается две 4-компонентные SIMD-операции в случае использования чисел одинарной точности или две 2-компонентные SIMD-операции в случае чисел двойной точности.

Пиковая производительность новых процессоров Intel семейства Sandy Bridge считается иначе из-за появления набора инструкций AVX, работающего с более широкими регистрами, чем SSE. Но пока особенности реализации ещё мало исследованы, и мы их в данной статье учитывать не будем.

Что ж, даже младшая видеокарточка из серии Radeon 58xx демонстрирует производительность примерно в 5 раз большую, чем пиковая мощность современных настольных CPU (и в 2,5 раза большую, чем пиковая мощность топовых настольных CPU). Надо отметить, что ACML CPU очень хорошо оптимизирована и выдает очень близкие к теоретически возможному пику результаты. А вот ACML GPU ещё далека от теоретического максимума GPU, который составляет примерно полтора терафлопса в случае Radeon HD 5830. Собственно, версия для Radeon Evergreen вышла всего несколько месяцев назад, ее производительность ещё возрастет, тем более что сейчас она тормозится несовершенным драйвером Windows. А вот производительности CPU уже расти некуда: на этой (на самом деле, выгодной для демонстрации вычислительных возможностей процессоров) задаче и так удалось выжать практически всю доступную скорость. Можно ещё раз отметить, что в данном случае учитывается также время копирования данных в память видеокарты и результата обратно, то есть это реальная конечная производительность GPU.

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

При вычислениях с double картина, в целом, аналогична ситуации с числами одинарной точности — прирост (в случае использования видеокарты) чуть меньше, но все равно составляет разы. Таким образом, дешевая потребительская видеокарточка радикально опережает в математических расчетах самые быстрые CPU…

Падение скорости по сравнению с вычислениями с single составляет примерно два раза, аналогично CPU.

Тем, кто слышал о стократном превосходстве GPU в скорости, прирост всего в пять раз может показаться каким-то незначительным, но в этой задаче и 5% прироста очень важны, 50% — невероятно важны и являются значительным преимуществом, а 500% — уже нечто выдающееся. Тем более, что задача оптимизирована для CPU максимально возможным образом.

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

CPU же, который использует 4-компонентные инструкции SSE, наоборот испытывает некоторые затруднения, так как умножение и сложение комплексных чисел хуже векторизуется. Для перемножения матриц необходимо покомпонентно умножить строки одной матрицы на столбцы другой и сложить N произведений. Тут проявляется преимущество видеокарточек в грубой вычислительной мощности: код становится более «арифметически интенсивным», то есть с меньшим процентом операций доступа к памяти, и такой код очень удобен для GPU, он позволяет достичь максимума.

Тут ситуация почти полностью аналогична соотношению в single. 2-компонентные регистры SSE2 все же более удобны для операций с комплексными числами, чем 4-компонентные регистры обычного SSE.

А в случае GPU относительный прирост в скорости меньше, чем соотношение single/complex — вероятно, из-за того, что скорость вычислений с double примерно в 4 раза меньше, чем с числами одинарной точности. Напомню, Radeon может перемножить 2 числа типа double или 4 пары чисел single за одно и то же время, один такт. И, таким образом, за время свободных тактов в ожидании данных из памяти можно выполнить меньше инструкций. Все логично.

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

Категория: HardWare | Добавил: Lena (28.02.2011) E
Просмотров: 1504 | Теги: производительность | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]