Расчёты на 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 устройств. Это даёт право называть технологию массовой. За последние 20 лет интерес к параллельному программированию утих – мощные кластеры стали собираться из компонентов для обычных 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-программированию. Это пока что первый опыт компании, но уже нескольких других вузов дали согласие на внедрение этого курса, и есть надежда, что в дальнейшем это направление будет активно развиваться. 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 – это спорткар. На плохой дороге он просто никуда не поедет, но дайте хорошее покрытие и он покажет всю свою скорость, которая внедорожнику и не снилась."
Источник: http://computerra.ru |