Дополнение. Параллелизм и новая архитектура NVIDIA Fermi

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

Пример устройства CPU и отличие GPU. Как видно из иллюстрации в GPU используется намного больше ALU чем в CPU.

За счет увеличения количества вычислительных ядер (ALU) достигается производительность системы в расчетах.

На GTC 2009 была презентована новая архитектура — NVIDIA Fermi. О ней я и хочу поговорить в этом дополнении. Начнем с того, что теперь в новых чипах более 3х миллиардов транзисторов это конечно стало возможным благодаря переходу на 40 нм техпроцесс. Так же на долю вычислений предоставлено 512 так называемых CUDA ядер. На заметку в предыдущем чипе (G200) было 240 ядер, а в G80 их всего 128.

Архитектура Fermi. Теперь, как вы видите, используется достаточно емкий кэш 2-го уровня.

Теперь чип состоит из 16-ти потоковых мультипроцессоров, которые содержат по 32 шейдерных ядра. Что в совокупности и дает нам 512 CUDA ядер. Блоки расположены вокруг общей кэш-памяти второго уровня. Каждый из блоков состоит из планировщика и организатора, исполнительных модулей и файлов регистров и кэш-памяти первого уровня.

Детальная архитектура мультипроцессора.

Другое достаточно заманчивое решение, которое реализовано в Fermi – поддержка коррекции ошибок памяти (ЕСС). Что конечно скажется на производительности в лучшую сторону. А если учитывать то, что данная архитектура больше направлена и сориентирована на вычисления, то это позволит использовать продукты следующего поколения Tesla или Quadro в еще более сложных задачах и требующих продолжительных вычислений с большими объемами данных.

Одно из ядер мультипроцессора.

Так же следует отметить поддержку максимального объема памяти — 6 Гб, чип оснащается шестью 64-разрядными контроллерами памяти GDDR5, что дает 384-битную шину памяти. Для ускорения математических вычислений и выполнения других функций предназначена технология NVIDIA Parallel DataCache. В завершении скажу, что также Fermi поддерживает аппаратно такие средства программирования как C, C++, FORTRAN, и многие другие функции — такие как Open CL и Direct Compute.

Dimson3d | В демонстрационных материалах вы часто показываете, диаграмму производительности GPU по сравнению с CPU. Есть ли предел на данный момент производительности GPU? Центральные процессоры все равно упираются в определенный потолок.

Предел? (улыбаясь, переспросил Юрий) Хороший вопрос. Наверное, предел есть, просто мы живем в физическом мире. Вопрос можно поставить так: «Где этот предел находится?» - насколько этот потолок большой. Сейчас на самом деле пределом как я представляю, является так называемый power wall. Мы подходим к тому моменту, когда высокопроизводительным кластерам невозможно дальше наращивать производительность из-за того, что количество энергии, которое нужно для подпитывания машин слишком велико. В этом смысле как раз GPU, и вообще параллельные машины предлагают более эффективное решение. Один параметр, которым мы обычно хвастаемся — Performance per Watt. Это процент производительности на Ватт затраченной энергии или сколько GFlop потребляет энергии. Почему это так? Если вернемся к архитектуре возникает такая ситуация благодаря тому, что мы используем площадь кристалла на сами вычислители. Мы стараемся очень эффективно использовать доступную площадь и доступный бюджет при потребляемой энергии. Вместо того, чтобы кэшировать данные, наш механизм исполнения базируется на совсем других предположениях. Традиционные процессоры вынуждены строить большие массивные кэши и если программа использует набор данных, который не помещается в кэш, производительность процессоров сильно падает. Соответственно, чем выше мы хотим получить финальную производительность тем, больше нам нужно строить кэш, а кэш — структура достаточно не эффективная в плане потребляемой мощности и кэш сам по себе это не вычислительный модуль. Те транзисторы, которые вы тратите на кэш это просто занятая площадь, не выполняющая вычислений.

График производительности GPU по сравнению с CPU.

Dark | Как обстоят дела с коммуникационными расходами?

Совершенно верно, коммуникационные расходы — здесь ключевым моментом является то, что мы не строим большие массивные кэши, а используем площадь кристалла и энергетические ресурсы для добавления новых параллельных модулей — позволяет нам находиться на кривой роста производительности. Наращивать параллелизм, наращивать количество «маленьких вычислителей» значительно проще, чем увеличивать тактовую частоту. Центральные процессоры не могут позволить себе такой рост именно из-за того, что не могут наращивать параллелизм такими же темпами. Поскольку они вынуждены хорошо исполнять традиционные приложения — OS, прикладные программы (Word, Excel к примеру) и они просто не могут себе позволить уменьшить вычислительное ядро. Они не могут деградировать производительность всех этих приложений.

Dark | А есть ли какой то предел количеству процессоров, после которого производительность просто падает?

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

Dimson3d | В линейке вашей продукции для вычислений с помощью CUDA, представлены решения GPU GeForce, Quadro FX и Tesla. Все эти графические процессоры и системы могут использоваться для параллельных расчетов. Расскажите, пожалуйста, о NVIDIA Tesla — её основных отличиях, что позволяет её выделить среди других.

В первую очередь я скажу, что GeForce, Quadro и Tesla — просто названия продуктов. Это продукты, которые ориентированы на тот или иной рынок, все они используют одну и туже базовую архитектуру. Базовая архитектура, заложенная, в эти продукты поддерживает NVIDIA CUDA и в принципе используют одну и туже технологию. Скажем, различия начинаются на более высоком уровне, в плане того, что мы пытаемся ориентировать продукт на конкретный рынок. GeForce – продукты для Consumer направления — геймеров, использования в стандартных компьютерах. Quadro имеет ориентацию на более профессиональный рынок — визуализация, CAD, рабочие станции (workstations). Tesla – продукт, который ориентирован на вычисления в кластерах, если вы хотите построить кластер на основе GPU, то вы будете использовать Tesla. Если говорить о различиях между этими продуктами, то Tesla в частности отличается тем, что чипы проходят наиболее жесткое тестирование. Качество памяти, которая устанавливается на плату значительно выше, чем у GeForce. Поскольку мы сами выпускаем Tesla, мы даем гарантию, что она будет работать у вас 24 часа в сутки 7 дней в неделю. Это зависит от способа применения данного конкретного продукта. GeForce - скорей всего вы включите компьютер, сделаете все необходимое, поиграете и выключите его, и сможет ли он проработать целую неделю с постоянной нагрузкой 24/7? Если у вас сервер, вы проводите, какие то сложные научные расчеты, то вам важно, что бы он был доступен постоянно. Это продукты, которые ориентированы на разные способы применения.