Введение
THG. Спасибо за то, что нашёл время пообщаться. Начнём с самого простого. Почему бы тебе не рассказать нашим читателям чуть больше о себе и о том, что ты делаешь в nVidia?
Ян Бак. Я возглавляю в nVidia отдел разработки ПО для вычислений на GPU (Software Director for GPU Computing). Моя основная цель заключается в построении и развитии полноценной платформы вычислений на GPU, которая включает системное ПО, инструменты разработки, языки и компиляторы, библиотеки, а также целевые приложения и алгоритмы. С помощью нашей замечательной команды мы разрабатываем как приложения для конечных пользователей, так и задаём вектор развития вычислений на GPU в nVidia.
THG. Но давай начнём с самого начала? Я понимаю, что твой интерес к GPGPU не возник, когда тебе было 5 лет — что произошло в Принстоне или Стэнфорде, что пробудило твой интерес к GPGPU?
Ян Бак. Я начал заниматься вычислениями на GPU ещё в Принстоне, экспериментируя с тепловой конвекцией и симуляцией жидкости на графическом «железе», которым в то время было SGI O2. Тогда всё было очень сложным, и было очень непросто обойти ограничения.
Но серьёзно вычислениями на GPU я начал заниматься при работе над диссертацией в Стэнфорде. Там я, включая коллег в сообществе разработчиков, понял, что естественным прогрессом программируемой графики будет эволюция GPU в сторону более универсального процессора. Мы написали наш первый документ для SIGGRAPH, посвящённый трассировке лучей на GPU класса DX9, чтобы доказать данную точку зрения. Эта работа вдохновила нас энтузиазмом, поскольку данный потребительский процессор, который присутствует во всех компьютерах, следовал закону Мура по росту производительности в кубической прогрессии, то есть быстрее, чем CPU. Возник вопрос: что может сделать компьютер, если у него многократно возрастёт вычислительная мощность по сравнению с сегодняшним днём? Это может дать радикальные изменения в вычислительных науках, а также в компьютерном зрении, искусственном интеллекте, глубоком анализе данных и графике.

THG. Какова была твоя роль в Brook?
Ян Бак. После работы над возможностью трассировки лучей на GPU фокус моих исследований в Стэнфорде переключился на осмысление правильной модели программирования для вычислений на GPU. В то время многие другие исследователи показали, что GPU хорош для разнообразных приложений, но не существовало хорошей среды разработки или модели программирования, которая позволила бы представить GPU как вычислительное устройство. В то время необходимо было очень глубоко разбираться в компьютерной графике, чтобы можно было перенести приложение на GPU. Поэтому я начал проект Brook с целью определить язык программирования для создания и выполнения кода на GPU, который позволил бы абстрагировать графически-связанный характер GPU на более общие концепции программирования. Фундаментальной концепцией программирования Brook был «поток/stream”, то есть набор элементов данных, над которыми требовалось провести одну и ту же работу. Brook лёг в основу моей диссертации в Стэнфорде.
THG. Твоя работа начиналась с Merrimac, потокового суперкомпьютера в Стэнфорде. Чем он отличался, например, от Tesla?
Ян Бак. Принципы модели программирования Brook можно применить не только к GPU. В Стэнфорде мы работали над двумя разными реализациями модели программирования Brook: одна для GPU, другая для Merrimac — исследовательской архитектуры, разработанной в Стэнфорде. Многие идеи, возникшие во время работы с Merrimac, повлияли на то, как можно улучшить GPU для вычислений общего назначения. Также следует отметить, что Билл Дэлли (Bill Dally), отвечавший за проект Merrimac в Стэнфорде, теперь является руководителем исследовательского подразделения nVidia.
THG. Не растут ли корни CUDA от Gelato? Каковы были первые академические исследования GPGPU? Когда началось коммерческое использование технологии?
Ян Бак. Я начал работать с CUDA во время завершения своих исследований в Стэнфорде. nVidia уже оказала горячую поддержку моим исследованиям, компания явно видела потенциал в том, чтобы лучше реализовать вычисления на GPU с аппаратной стороны этого вопроса. Я присоединился к nVidia для старта проекта CUDA в 2005 году. В то время в команде был только я и ещё один инженер. Сегодня же над проектом работает целая команда, и он является центральным компонентом nVidia GPU.
Кстати, на сайте www.gpgpu.org дана хорошая история вычислений на GPU, которая начинается ещё с 2002 года.
THG. Сегодня AMD продвигает Brook в качестве рекомендуемого языка программирования для GPGPU, в то время как у Nvidia есть C с расширениями CUDA. Ты можешь выделить сильные и слабые стороны у обоих вариантов?
Ян Бак. В начале работы в nVidia у нас была возможность пересмотреть некоторые фундаментальные решения дизайна Brook, который, по большей части, был ориентирован на возможности «железа» класса DX9. Один из ключевых недостатков касался ограниченной модели памяти, которая заставляла программиста привязывать свой алгоритм к довольно сложному механизму доступа к памяти. С нашим языком C с расширениями CUDA эти ограничения были ослаблены. В принципе, программисту просто давался большой пул потоков, и доступ к памяти он мог организовать так, как ему хотелось. Это улучшение, а также и некоторые другие, позволили нам реализовать полную семантику языка C на GPU.
Эволюция вычислений на GPGPU
THG. Расскажи нам, чем CUDA, то есть «архитектура», отличается от компилятора «CUDA для C»?
Ян Бак. CUDA — это название аппаратной архитектуры параллельных вычислений nVidia. Компания предоставляет полную среду разработки для программирования под архитектуру CUDA, которая включает компилятор, отладчик, профайлер, библиотеки и другую информацию, которая требуется разработчикам для выпуска качественных и завершённых продуктов на архитектуре CUDA. Архитектура CUDA также поддерживает стандартные языки (C с расширениями CUDA и Fortran с расширениями CUDA), а также API для вычислений на GPU, такие как OpenCL и DirectX Compute.
Посмотрите на следующую диаграмму.
![]() |
Нажмите на картинку для увеличения.
THG. В OpenCL вы получаете преимущество кросс-платформенной поддержки, но теряете автоматические инструменты, такие как управление памятью, которые присутствуют в CUDA. Если вы являетесь, например, исследователем, то вы желаете уменьшить начальные затраты на разработку, но в то же время поддержка разных платформ весьма желательна. Как лучше всего обойти подобную проблему?
Ян Бак. Конечно, есть компромиссы, на которые придётся пойти для кросс-платформенного решения. nVidia с самого начала работала с Apple и рабочей группой OpenCL, чтобы гарантировать, что OpenCL даст лучший слой API на уровне драйверов для вычислений на GPU, особенно для чипов nVidia. Более того, мы планируем предоставить расширения, чтобы можно было использовать ещё больше возможностей GPU nVidia под OpenCL.
nVidia также продолжает улучшать компилятор C и среду разработки для GPU nVidia. У нас есть некоторые простые расширения для C, чтобы можно было использовать наши GPU. Если вам больше нравится Fortran, то доступен и компилятор для этого языка. Этой осенью Microsoft представляет Windows 7, и вместе с ней пользователи и разработчики получат доступ к API DirectCompute, в котором много общих принципов с нашими расширениями C. nVidia представила драйверы с поддержкой DirectCompute ключевым разработчикам в декабре прошлого года. Всё это — дополнительные преимущества выбора «железа» nVidia; мы поддерживаем все основные языки и API.
THG. Твоя работа с GPU началась в эпоху GeForce 5, и к сегодняшнему дню сменилось несколько поколений. Конечно, новые видеокарты быстрее, но какие новые возможности были представлены за этот период времени (например, соответствие IEEE-754)? Что мы можем делать сегодня, что нельзя было осуществить раньше?
Ян Бак. Ранние программируемые GPU были очень простыми программируемыми процессорами, работающими только с числами с плавающей запятой. Никаких целочисленных или битовых операций, никакого общего доступа к памяти GPU, никакого взаимодействия между соседними процессорами. Первое основное улучшение заключалось в аппаратной составляющей, которая была необходима для поддержки C, то есть полная поддержка указателей и «родных» типов данных.
Ещё одна ключевая инновация крылась в добавлении выделенной общей памяти на чипе, которая позволяла процессорам взаимодействовать между собой и делиться результатами, что значительно улучшило эффективность алгоритмов. Кроме того, программист мог расположить данные во временном хранилище, то есть обрабатывать их близко к процессору, а не обращаться в память вне пределов GPU. Общая память улучшила производительность нашей библиотеки обработки сигналов в 20x по сравнению со схожей реализацией OpenGL.
Наконец, добавление «железа» с поддержкой чисел с плавающей запятой с двойной точностью также знаменовало серьёзный шаг вперёд по превращению GPU в действительно высокопроизводительный вычислительный продукт, позволяя запускать на нём приложения, требовавшие вычислений повышенной точности. Также следует отметить улучшения скорости работы памяти и её объёма на плате (до 4 Гбайт на процессор или до 16 Гбайт в нашем сервере Tesla 1U), что увеличило масштаб задач, с которым могут справиться GPU nVidia.
THG. А как насчёт компилятора? Какие оптимизации и инновации добавлялись в него со временем?
Ян Бак. Довольно рано мы поняли, что нам нужно сделать решение компиляции мирового уровня. Программы вычислений на GPU становились намного крупнее, намного сложнее, и они выигрывали от более сложных оптимизаций. Наш конкурент (я имею в виду CPU) имел за своими плечами почти 40 лет, чтобы сделать всё правильно. Наш компилятор C построен на технологиях Edison Design Group, которая выпускает компиляторы C более 20 лет, а также на ядре компиляции Open64, изначально предназначавшемся для процессора Itanium. Наша технология компиляции вместе с командой разработчиков компиляторов мирового уровня, которую нам удалось собрать — всё это ключевые факторы успеха nVidia.
THG. Сегодня большинство GPU очень быстро справляются с вычислениями одинарной точности, но уже не так хорошо с двойной точностью. Будут ли GPU по-прежнему обеспечивать лучшее соотношение цена/производительность, чем GPU, если это не будет выгодно с точки зрения экономии масштаба? То есть, сможете ли вы представить особый GPU с улучшенной работой с математикой двойной точности, сохранив при этом затраты на низком уровне?
Ян Бак. По мере того, как рынок вычислений на GPU явно демонстрирует свой рост, я полагаю, что вы увидите больше областей, где готовы вкладывать в арифметику с двойной точностью. Наши продукты с двойной точностью, выпущенные в прошлом году — это только начало. И я полагаю, что мы увидим рост инвестиций в вычисления на GPU как со стороны индустрии, так и nVidia.
THG. Что ты думаешь о Intel Larrabee? AMD Stream Architecture? Cell? Zii?
Ян Бак. Я считаю, что Larrabee является прекрасным подтверждением того, чего смогли достигнуть GPU, а также признанием ограничений CPU. Если CPU пытались применить наследственную модель последовательного программирования и выжать из неё все возможности для параллелизма, то GPU создавались для 3D-рендеринга, сценария с очень высокой степенью параллелизма. Массивный параллелизм является частью модели программирования GPU.
В конечном же итоге от доступности и продуктивности модели программирования зависит то, сможет ли она перенести архитектуру из новинки в успешный проект. Всем нам придётся бороться с горами наследственного кода. Мы фокусируемся над тем, чтобы GPU nVidia очень легко позволяли дать существенный прирост производительности с привычной и простой моделью программирования.
Сферы применения GPGPU
THG. У Larrabee, в частности, интересна теоретическая возможность выполнения рекурсии на чипе (и других задач). Можно ли это сравнить с теоретическим подходом интеграции «лёгкого» процессора x86 на GPU для «работы по дому»?
Ян Бак. Я не думаю, что рекурсия является критичной для успеха вычислений на GPU, поскольку почти весь код, который работает GPU, состоит из внутренних циклов приложения, критичных к производительности. По причинам производительности всегда лучше сделать его линейным/поточным и избежать рекурсии. Мы, конечно, можем поддержать сегодня рекурсию, но предпочитаем, чтобы наш компилятор оптимизировал код без неё. Что касается «лёгкого» CPU, то в системе уже есть CPU, и мы хотели бы сохранить максимально тонкий стек в драйвере, чтобы всё работало максимально эффективно. Когда требуется диспетчеризация процессора, то выделенный аппаратный блок почти всегда эффективнее по энергопотреблению и занимаемому месту, чем перенос этих критических задач на полноценный процессор x86.
THG. Сегодня большая часть приложений GPGPU ограничиваются научными вычислениями и алгоритмами кодирования/перекодирования видео. Как ты думаешь, где обычные потребители смогут выиграть от технологии GPGPU помимо работы с видео?
Ян Бак. Следующая волна потребительских программ, использующих вычисления на GPU, будет ускорять монтаж видео, обработку изображений и физику в играх. Мы думаем, что ваши электронные таблицы сегодня уже работают достаточно быстро. Конечно, обработка видео — это вполне очевидная сфера для ускорения, но будут появляться новые приложения в области компьютерного зрения, распознавания речи и рукописного ввода для потребительского рынка, которые могут не меньше выиграть от потенциала GPU, уже присутствующих в каждом ПК, по производительности.
THG. Что ждёт GPGPU в будущем?
Ян Бак. Потребители уже выигрывают от вычислений на GPU. Компании, подобные OptiTex, используют CUDA для разработки одежды для потребительского рынка. Автомобильные компании создают дизайн машин следующего поколения с помощью трассировки лучей на GPU, используя CUDA. Движки физики в играх тоже мигрируют на GPU. Если посмотреть вперёд, то мы видим перспективы в работе с персональными мультимедийными данными, например, в сортировке и поиске фотографий на основе их содержимого, то есть лиц, местности и т.д. — эта операция требует невероятно серьёзных вычислений.
Некоторые работа, которой я больше всего горжусь, проводится в областях медицинского прогнозирования и лечения рака. Компания Techniscan использует наши GPU Tesla для улучшения возможностей врачей по прогнозированию и диагностике рака молочной железы на ранних стадиях, причём более точно, чем традиционные методы. Национальный институт по изучению раковых заболеваний (National Cancer Institute) сообщил о 12x ускорении при использовании CUDA для вычислений связывания протеинов, которые используются для разработки новых лекарств от таких болезней как рак или болезнь Альцгеймера. Просто замечательно видеть, как вычисления на GPU используются в фундаментальных исследованиях, которые будут спасать человеческие жизни.
