NVIDIA CUDA – доступный билет в мир больших вычислений
АрхивИнтерактивО NVIDIA CUDA знают очень многие, но знания эти обычно не слишком глубоки. Поэтому мы попросили Юрия Уральского - ведущего специалиста по технологиям NVIDIA рассказать о ней подробнее.
Сразу предупрежу, что это не интервью в классическом формате "вопрос-ответ", данный материал представляет собой скорее пересказ слов собеседника. Так всё-таки интереснее и воспринимать проще. А смысл мы не переврали, честное слово. Итак, на вопросы "Компьютерры-Онлайн" отвечал Юрий Уральский - ведущий специалист по технологиям NVIDIA. В ходе нашей с ним беседы было затронуто множество тем и самые интересные из них и изложены ниже.
Расчёты на GPU. Предыстория
Само по себе такое направление, как расчёты на GPU, не такое уж и молодое. Идея таких расчётов впервые появилась примерно в 2003 году. Выход NV30 обеспечил достаточно высокий уровень программируемости GPU – произвольный код стало возможно запускать в виде графических шейдеров. Тогда использовался исключительно графический интерфейс как для ввода начальных данных и кода, так и для считывания результата. Об удобстве не было и речи, но тем не менее какие-то реальные задачи уже можно было решать. Это был первый фактор.
Вообще же любой видеоускоритель в основе имеет массивно-параллельную архитектуру, когда великое множество относительно медленных элементов (ядер) работают одновременно. Это значит, что пиковая мощность типичного GPU намного выше, чем у CPU. Встаёт только вопрос об утилизации этой мощности. И это был второй фактор.
Именно эти два фактора стали предпосылками для развития GPGPU (концепция вычислений общего назначения на GPU) в целом.
Что такое CUDA?
Главная проблема заключалась в том, что не было никакого стандартного интерфейса для программирования GPU. Разработчики использовали OpenGL или Direct3D, но это было не очень удобно. По этой причине NVIDIA занялась разработкой некоего единого и удобного стандарта и к выходу G80 представила технологию CUDA.
NVIDIA CUDA – это "архитектура, т.е. совокупность программных и аппаратных средств, которые позволяют производить на GPU вычисления общего назначения". Официально аббревиатура CUDA расшифровывается так: Compute Unified Device Architecture. На данный момент есть готовый SDK, который пока что использует язык программирования C. Но в скором будущем появится поддержка Fortran (очень популярный язык в научной среде) и C++. Вообще никаких принципиальных ограничений на язык или модель программирования нет, лишь бы была возможность создавать параллельный код. Причём параллелизм несколько отличается от того, который подразумевается при работе с CPU. В случае разработки приложений для традиционных CPU речь идёт о параллелизме задач – один программный модуль исполняется на одном ядре, другой на втором и т.д. Когда мы говорим о CUDA, то мы говорим о параллелизме данных. Подразумевается, что данных у вас всегда много и больше, чем физических процессоров.
Ещё один ключевой момент архитектуры CUDA – лёгкая масштабируемость. Единожды написанный код будет запускаться на всех устройствах, поддерживающих CUDA. Для разработки и отладки кода для запуска на GPU можно использовать обычные видеокарты. А когда продукт готов – запускать его уже на мощных Tesla. Это очень удобно.
Проблемы традиционных CPU. Роль GPGPU в жизни NVIDIA
Направление GPU-компьютинга очень важно для NVIDIA. С момента запуска архитектуры G80 в 2006 году было выпущено более 100 млн. видеоускорителей, которые поддерживают CUDA. И каждую неделю продаётся ещё один миллион CUDA-capable устройств. Это даёт право называть технологию массовой.
Еще несколько лет назад казалось, что интерес к параллельному программированию утих – мощные кластеры стали собираться из компонентов для обычных PC. Но примерно с 2005 года скорость роста производительности обычных CPU сильно упала, а GPU – нет. NVIDIA же предлагает с каждым годом всё большую производительность и масштабируемость. Именно это привлекает потребителей и разработчиков. А если спрос на решения компании есть и будет в дальнейшем, то отказываться от этого направления смысла нет – его надо усиленно развивать.
Переход от традиционных решений к NVIDIA CUDA
Для начала надо отметить, что NVIDIA не предлагает полноценную замену традиционным CPU. Нельзя собрать кластер на базе ускорителей Tesla и запустить на нём произвольный код. Решения GPGPU являются подспорьем в сложных расчётах, а Tesla можно скорее назвать очень мощным сопроцессором. В любом коде есть участки, которые хорошо исполняются на CPU. Их нет смысла портировать. Но часто можно выделить небольшие по объёму, но критичные по времени исполнения участки кода. И за счёт них можно значительно увеличить конечную производительность. В качестве примера можно привести работу, которую провели в Национальном центре исследования погоды США. У них уже был код, который исполнялся на обычном кластере. Они переписали всего 1% кода для работы на GPU, а в итоге получили суммарный прирост скорости в 20%!
Однако основная проблема заключается в необходимости переосмысления задачи. Традиционные модели программирования не годятся для расчётов на GPU. Разработчику необходимо найти параллелизм в задаче и правильно его выразить. Для некоторых задач переход довольно прост и зачастую очевиден, для некоторых – с точностью до наоборот.
Ускорители Tesla
Основными продуктами NVIDIA для расчётов на GPU являются устройства из серии Tesla. Существуют 3 модификации этих продуктов:
- Tesla C – внешне не отличается от типичной видеокарты (нет только видеовыходов) и подключается по интерфейсу PCI-E. Он потребляет около 200 Вт и имеет пиковую производительность в 1 Тфлоп.
- Tesla D – так называемый "приставной суперкомпьютер", внутри которого находятся 2 ускорителя Tesla C. Достаточно мощное и компактное решение. Подключается к рабочей станции отдельным кабелем.
- Tesla S – это компактный сервер стандартного формфактора 1U, предназначенный для установки в стойку. Позиционируется как дополнение к уже существующему кластеру на обычных CPU.
Чем отличаются продукты серий GeForce и Tesla? Во-первых, у этих продуктов совершенно разный целевой рынок (Tesla – профессиональное решение, GeForce – консьюмерское), а значит и требования к качеству и прочим параметрам заметно отличаются. Все ускорители Tesla проходят дополнительный контроль качества и производитель гарантирует их бесперебойную работу в режиме 24x7. Во-вторых, жизненный цикл Tesla намного больше, чем у GeForce. Любого рода поддержка (техническая, программная etc) осуществляется в течение очень длительного срока.
NVDIA CUDA в российской научной среде
В научной среде наблюдается повышенный интерес к CUDA. На данный момент 41 вуз по всему миру вплотную работает с этой технологией и активно разрабатывает приложения на её основе. Большинство таких заведений не обладает нужными бюджетами для покупки дорогих кластеров, но зато они имеют много человеческих ресурсов и могут позволить себе переписать уже готовый код для переноса его на GPU. В России компания NVIDA сотрудничает с МГУ – там уже есть люди, которые непосредственно занимаются GPU-расчётами, а также имеется специальный курс для обучения студентов CUDA-программированию. Курс в МГУ рассчитан на один семестр. Это открытый курс, занятия могут посещать не только студенты и аспиранты МГУ, но и сторонние разработчики. Лекции и материалы курса доступны на сайте CUDA группы в Google. Это пока что первый опыт компании, но уже нескольких других вузов дали согласие на внедрение этого курса, и есть надежда, что в дальнейшем это направление будет активно развиваться.
Top500 и реальная производительность CUDA
Среди машин, входящих в знаменитый рейтинг Top500, уже есть те, в которых используются ускорители Tesla. В ноябре 2008 года одна из таких машин занимала 29-е место.
Отдельно стоит вопрос о производительности NVIDIA CUDA в реальной жизни. Дело в том, что заявленных пиковых значений можно достичь не на каждой задаче. И в этой области есть некоторое отставание от традиционных процессоров. Получить заявленную производительность на CPU несколько легче, чем на GPU.
Конкурентные технологии от ATI и Intel
Технологию ATI Stream в NVIDIA не считают очень сильным конкурентом. CUDA и Stream – это две разные технологии, которые стоят на различных уровнях развития. Программирование для продуктов ATI намного сложнее – их язык скорее напоминает ассемблер. CUDA C, в свою очередь, гораздо более высокоуровневый язык. Писать на нём удобнее и проще. Для крупных компаний-разработчиков это очень важно. Если говорить о производительности, то можно заметить, что её пиковое значение в продуктах ATI выше, чем в решениях NVIDIA. Но опять всё сводится к тому, как эту мощность получить.
Сравнивать же CUDA и Intel Larrabee нет никакого смысла. Larrabee ещё не выпущен и делать какие-то выводы слишком преждевременно.
Экономичность расчётов на GPU
В качестве наглядной демонстрации экономичности применения ускорителей Tesla взгляните на нижеследующий слайд. При одинаковой производительности использование платформы CUDA оказывается в 10 раз дешевле и в 21 раз энергоэкономичнее, чем традиционный кластер. С точки зрения производительности на ватт и производительности на доллар GPU значительно более привлекательны, особенно для выстраивания серверов.
Светлое будущее
В будущем NVIDIA CUDA будет обязательно развиваться. Планируется дальнейшее увеличение энергоэффективности и снижение тепловыделения. Обязательно появятся более производительные продукты. При этом все они будут обратно совместимы с уже существующими.
В программной модели CUDA глобальных изменений не будет. Будут мелкие постоянные улучшения для более гибкого использования GPU и расширения круга охватываемых задач. Также платформа станет более лояльно относиться к ошибкам в коде, которые могут сильно влиять на производительность.
Заключение
Напоследок хочу поблагодарить всех, кто помогал в организации и проведении этого интервью. Было очень интересно и познавательно. Для тех, кто заинтересовался этой темой, могу порекомендовать обратиться к ресурсу CUDA Zone. Для обладателей CUDA-совместимых видеокарт будут интересны демки, которые позволяют воочию убедиться в преимуществах GPU-компьютинга.
Ну а в самом конце не могу не привести замечательное сравнение GPU и CPU от господина Уральского: "CPU – это внедорожник. Он ездит всегда и везде, но не очень быстро. А GPU – это спорткар. На плохой дороге он просто никуда не поедет, но дайте хорошее покрытие и он покажет всю свою скорость, которая внедорожнику и не снилась."