104

Насколько я понимаю, люди начали использовать графические процессоры для общих вычислений, потому что они являются дополнительным источником вычислительной мощности. И хотя они не являются быстрыми как ЦП для каждой операции, они имеют много ядер, поэтому их можно лучше адаптировать для параллельной обработки, чем ЦП. Это имеет смысл, если у вас уже есть компьютер, на котором установлена графическая карта для обработки графики, но вам не нужна графика, и вам нужны дополнительные вычислительные мощности. Но я также понимаю, что люди покупают графические процессоры специально для увеличения вычислительной мощности, не имея намерения использовать их для обработки графики. Мне кажется, это похоже на следующую аналогию:

Мне нужно подстричь траву, но моя газонокосилка слабовата. Поэтому я снимаю клетку с вентилятора, который держу в спальне, и заточаю лезвия. Я приклеиваю его к косилке и обнаруживаю, что он работает достаточно хорошо. Спустя годы я являюсь офицером по закупкам для крупного бизнеса по уходу за газонами. У меня значительный бюджет, чтобы тратить на травосборники. Вместо того, чтобы покупать газонокосилки, я покупаю кучу фанатов. Опять же, они работают нормально, но я должен заплатить за дополнительные детали (например, клетку), которые я не буду использовать. (для целей этой аналогии мы должны предположить, что газонокосилки и коробчатые вентиляторы стоят примерно одинаково)

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

  • Такая альтернатива была бы слишком дорогой для разработки, когда графический процессор уже является хорошим вариантом (газонокосилки не существуют, почему бы не использовать этот совершенно хороший коробочный вентилятор?).
  • Тот факт, что «G» обозначает графику, означает только предполагаемое использование, и на самом деле не означает, что какие-либо усилия направлены на то, чтобы сделать чип более приспособленным к обработке графики, чем любой другой вид работы (газонокосилки и коробчатые вентиляторы - это то же самое, когда Вы получаете право на это, никакие модификации не нужны, чтобы заставить один функционировать как другой).
  • Современные графические процессоры носят то же имя, что и их древние предшественники, но в наши дни высокопроизводительные графические процессоры не предназначены специально для обработки графики (современные коробочные вентиляторы предназначены для работы в основном в качестве газонокосилок, даже если старые не были).
  • Легко перевести практически любую проблему на язык обработки графики (траву можно подстригать, очень быстро продувая воздух).

РЕДАКТИРОВАТЬ:

На мой вопрос ответили, но, основываясь на некоторых комментариях и ответах, я чувствую, что должен уточнить свой вопрос. Я не спрашиваю, почему все не покупают свои собственные вычисления. Понятно, что большую часть времени это будет слишком дорого.

Я просто заметил, что, похоже, существует спрос на устройства, которые могут быстро выполнять параллельные вычисления. Мне было интересно, почему кажется, что оптимальным таким устройством является графический процессор, а не устройство, разработанное для этой цели.

10 ответов10

109

Это действительно комбинация всех ваших объяснений. Дешевле и проще, уже существует, а дизайн отошел от чистой графики.


Современный графический процессор можно рассматривать в основном как потоковые процессоры с некоторым дополнительным графическим оборудованием (и некоторыми ускорителями с фиксированной функцией, например, для кодирования и декодирования видео). В настоящее время в программировании GPGPU используются API, специально разработанные для этой цели (OpenCL, Nvidia CUDA, AMD APP).

За последние десять или два десятилетия графические процессоры превратились из конвейера с фиксированными функциями (в значительной степени только для графики) в программируемый конвейер (шейдеры позволяют писать пользовательские инструкции) в более современные API, такие как OpenCL, которые обеспечивают прямой доступ к ядрам шейдеров без сопровождающий графический конвейер.

Остальные графические биты являются второстепенными. Они настолько малы в стоимости карты, что их не так много, и вы несете расходы на дополнительный дизайн. Так что обычно этого не делается - нет вычислительно-ориентированного эквивалента большинства графических процессоров - за исключением самых высоких уровней, и они довольно дорогие.

Обычные "игровые" графические процессоры очень часто используются, потому что экономия от масштаба и относительная простота делают их дешевыми и легкими для начала. Это довольно простой путь от графического программирования до ускорения других программ с GPGPU. Кроме того, в отличие от других опций, аппаратное обеспечение легко обновлять, поскольку доступны новые и более быстрые продукты.


В основном, выбор сводится к:

  • Универсальный процессор, отлично подходит для ветвления и последовательного кода
  • Обычный "игровой" GPU
  • Ориентированные на вычисления графические процессоры, например, Nvidia Tesla и Radeon Instinct Они часто вообще не поддерживают вывод графики, поэтому графический процессор немного ошибочен. Однако они используют ядра GPU, аналогичные обычным GPU, и код OpenCL/CUDA/APP более или менее напрямую переносим.
  • ПЛИС, которые используют совершенно другую модель программирования и имеют тенденцию быть очень дорогостоящими. Это где существенный барьер для входа существует. Они также не обязательно быстрее, чем GPU, в зависимости от рабочей нагрузки.
  • ASIC, специально разработанные схемы (аппаратные средства). Это очень очень дорого и стоит только в крайнем масштабе (мы говорим о тысячах единиц, по крайней мере), и там, где вы уверены, что программа никогда не должна будет меняться. Они редко осуществимы в реальном мире. Вам также придется перепроектировать и тестировать все это каждый раз, когда совершенствуются технологии - вы не можете просто заменить новый процессор, как вы можете с процессорами и графическими процессорами.
32

Моя любимая аналогия:

  • Процессор: гений Полимата. Может делать одну или две вещи одновременно, но эти вещи могут быть очень сложными.
  • GPU: тонна низкоквалифицированных рабочих. Каждый из них не может сделать очень большие проблемы, но в целом вы можете многое сделать. На ваш вопрос, да, есть некоторые графические издержки, но я считаю, что они незначительные.
  • ASIC/FPGA: компания. Вы можете нанять тонну низкоквалифицированных рабочих или пару гениев, или комбинацию низкоквалифицированных рабочих и гениев.

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

Непосредственно на ваш вопрос: почему GPU над ASIC/FPGA? Вообще стоимость. Даже при сегодняшних завышенных ценах на GPU все еще (как правило) дешевле использовать GPU, чем разрабатывать ASIC для удовлетворения ваших потребностей. Как указывает @ user912264, существуют определенные задачи, которые могут быть полезны для ASIC/FPGA. Если у вас есть уникальное задание, и вы получите выгоду от масштабирования, тогда стоит разработать ASIC/FPGA. Фактически, вы можете разрабатывать / покупать / лицензировать проекты ПЛИС специально для этой цели. Это делается для питания пикселей, например, в телевизорах высокой четкости.

10

Ваша аналогия плохая. По аналогии, когда вы покупаете оборудование для крупного бизнеса по уходу за газоном, вы предполагаете, что есть хорошие газонокосилки. Это не так в вычислительном мире - графические процессоры являются лучшим доступным инструментом.

Затраты на НИОКР и возможное повышение производительности специализированного чипа, вероятно, слишком высоки, чтобы оправдать его создание.

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

9

Конечно, вы можете использовать специализированные микросхемы, либо для повышения энергоэффективности, либо для расчета скорости. Позвольте мне рассказать вам историю майнинга биткойнов:

  • Биткойн новый, гики мои со своими процессорами.
  • Биткойн - это что-то новое, умные гики со своими графическими процессорами.
  • Биткойн теперь (своего рода) известен, люди покупают FPGA.
  • Биткойн теперь известен (2013 г.), даже новички покупают ASIC ("Интегральные схемы для конкретных приложений") для эффективного майнинга.
  • Вознаграждение за блокировку падает (периодически), даже старые ASIC больше не приносят прибыли.

Так что нет, нет причин использовать графический процессор вместо специализированного "гигантского калькулятора". Чем больше экономические стимулы, тем больше специализируется оборудование. Однако их довольно сложно спроектировать и невозможно изготовить, если вы не производите тысячи одновременно. Если разработка чипов невозможна, вы можете купить один из них в ближайшем Walmart.

TL; DR Конечно, вы можете использовать более специализированные чипы.

8

То, что вы описываете в своей аналогии, именно то, что произошло. Как только вы взяли вентилятор и заточили лезвия, чтобы попытаться использовать его в качестве газонокосилки, группа исследователей поняла: «Эй, у нас здесь есть довольно симпатичный многоядерный процессор, давайте попробуем использовать его для вычислений общего назначения!».

Результат был хорош, и мяч начал катиться. Графический процессор перешел от графического устройства для поддержки вычислений общего назначения, чтобы помочь в самых сложных ситуациях.

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

Итак, в заключение, первое объяснение, которое вы предлагаете, является наиболее точным:

  • Такая альтернатива была бы слишком дорогой для разработки, когда графический процессор уже является хорошим вариантом.

Графические процессоры там, где они уже есть, они доступны каждому и работают.

5

В частности, графические процессоры не являются "ядрами" в смысле "параллелизма задач". По большей части это происходит в форме "параллелизма данных". SIMD - это «одна инструкция, несколько данных». Это означает, что вы не будете делать это:

for parallel i in range(0,1024): c[i] = a[i] * b[i]

Это будет означать, что у вас есть 1024 указателя инструкций, каждый из которых выполняет отдельные задачи с разной скоростью. SIMD, или "векторное вычисление", будет выполнять инструкции для целых массивов одновременно, более похоже на это:

c = a * b

"Циклы" находятся в инструкциях «*» и «=», а не вне инструкций. Вышеприведенное сделало бы это для всех 1024 элементов одновременно с указателем SAME для всех них. Это как три огромных регистра для a, b и c. Код SIMD чрезвычайно ограничен и хорошо работает только для задач, которые не являются чрезмерно "ветвистыми".

В реальных случаях эти значения SIMD не так велики, как 1024 элемента. Представьте себе переменную, которая является бандой int32, связанной вместе. Вы можете думать о умножении и назначать в качестве реальной машинной инструкции.

int32_x64 c; int32_x64 b; int32_x64 a; c = b * a;

Настоящие графические процессоры сложнее, чем SIMD, но в этом их суть. Вот почему вы не можете просто сгенерировать случайный алгоритм процессора на GPU и ожидать ускорения. Чем больше ветвлений команд делает алгоритм, тем менее он подходит для графического процессора.

5

Другие ответы здесь довольно хороши. Я добавлю и мои 2 цента.

Одна из причин, по которой процессоры стали настолько распространенными, заключается в их гибкости. Вы можете перепрограммировать их для бесконечного множества задач. В наши дни для компаний, которые производят продукты, дешевле и быстрее вставлять небольшой ЦП или микроконтроллер во что-то и программировать его функциональность, чем разрабатывать собственные схемы для выполнения той же задачи.

Используя то же устройство, что и другие, вы можете воспользоваться преимуществами известных решений проблем, использующих то же самое устройство (или подобное). По мере развития платформы ваши решения развиваются, становятся очень зрелыми и оптимизированными. Люди, кодирующие эти устройства, также приобретают опыт и становятся очень хорошими в своем деле.

Если бы вам пришлось создавать новый тип устройства с нуля, альтернативу графическому процессору, потребовались бы годы даже для самых первых пользователей, которые действительно научились бы его использовать. Если вы подключите ASIC к вашему ЦП, как вы оптимизируете выгрузку вычислений на это устройство?

Сообщество компьютерных архитекторов гудит от этой идеи в течение нескольких лет (очевидно, оно было популярно и раньше, но недавно пережило ренессанс). Эти «ускорители» (их термин) имеют различную степень перепрограммируемости. Проблема в том, насколько узко вы определяете масштаб проблемы, которую может решить ваш ускоритель? Я даже разговаривал с некоторыми людьми, которые работали над созданием ускорителя, используя аналоговые схемы с операционными усилителями для вычисления дифференциальных уравнений. Отличная идея, но чрезвычайно узкая сфера.

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

GPU на самом деле ужасны для определенных типов проблем, поэтому многие люди / компании работают над другими типами устройств. Но GPU уже настолько укоренились, станут ли их устройства когда-нибудь экономически жизнеспособными? Я думаю, мы увидим.

Изменить: немного расширив мой ответ, теперь, когда я схожу с автобуса.

Пояснительным примером является проект Intel Larrabee. Это началось как параллельное устройство обработки, которое могло сделать графику в программном обеспечении; у него не было специализированного графического оборудования. Я говорил с кем-то, кто работал над проектом, и главная причина, по которой они сказали, что он провалился и был отменен (помимо ужасной внутренней политики), заключалась в том, что они просто не могли заставить компилятор создать хороший код для него. Конечно, он создал рабочий код, но если весь смысл вашего продукта - максимальная производительность, вам лучше иметь компилятор, который производит довольно оптимальный код. Это напоминает мой предыдущий комментарий о том, что нехватка глубоких знаний в области аппаратного и программного обеспечения для вашего нового устройства является большой проблемой.

Некоторые элементы дизайна Larrabee превратили его в Xeon Phi/Intel MIC. Этот продукт действительно сделал это на рынок. Он был полностью сосредоточен на распараллеливании научных и других вычислений типа HPC. Похоже, это коммерческий провал сейчас. Другой человек, с которым я говорил в Intel, подразумевал, что они просто не были конкурентоспособны по цене с GPU.

Люди пытались интегрировать логический синтез для ПЛИС в компиляторы, чтобы вы могли автоматически генерировать код для ваших ускорителей ПЛИС. Они не работают так хорошо.

Одно из мест, которое кажется действительно плодородной почвой для ускорителей или других альтернатив графическим процессорам, - это облако. Экономия масштаба, существующая в таких крупных компаниях, как Google, Amazon и Microsoft, оправдывает инвестиции в альтернативные схемы вычислений. Кто-то уже упоминал о тензорных процессорах Google. Microsoft имеет FPGA и другие компоненты в своей инфраструктуре Bing и Azure. Та же история с Амазонкой. Абсолютно логично, если шкала может компенсировать ваши затраты времени, денег и слез инженера.

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

Извините, отредактируйте еще раз: я думаю, что ваша первоначальная предпосылка неверна. Я полагаю, что это был не случай поиска дополнительных источников вычислительной мощности, а скорее случай, когда люди признали возможность. Графическое программирование является очень линейной алгеброй, и графический процессор был разработан для эффективного выполнения общих операций, таких как умножение матриц, векторные операции и т.д. Операции, которые также очень распространены в научных вычислениях.

Интерес к графическим процессорам начался как раз тогда, когда люди осознали, что обещания, данные проектом Intel/HP EPIC, были сильно завышены (конец 90-х - начало 2000-х). Не было общего решения для распараллеливания компилятора. Поэтому вместо того, чтобы говорить «где мы можем найти больше вычислительной мощности, о, мы могли бы попробовать GPU», я думаю, что это было больше «у нас есть что-то, что хорошо в параллельных вычислениях, можем ли мы сделать это более программируемым в целом». Многие из вовлеченных людей были в сообществе научных вычислительных машин, у которых уже был параллельный код на Фортране, который они могли запускать на машинах Cray или Tera (у Tera MTA было 128 аппаратных потоков). Возможно, было движение с обеих сторон, но я только слышал упоминания о происхождении GPGPU с этого направления.

4

ASIC (изготовленный на заказ кремний) очень быстрый, но очень дорогой в разработке и производстве. Раньше ASIC были специфичными для конкретной цели, а CPU был одним из подходов, который позволял "программировать" компьютеры, чтобы вычислительные задачи могли выполняться программным обеспечением. Ранние процессоры давали людям возможность воспользоваться преимуществами ASIC без огромных затрат, программируя чип на месте. Этот подход стал настолько успешным, что он привел к (очень) быстрому компьютеру, который вы используете прямо сейчас.

Так почему же графические процессоры?

В середине 90-х годов 3DFX поняла, что задачи 3D-рендеринга были настолько специфическими, что пользовательская ASIC будет работать НАМНОГО лучше, чем ЦП. Они создали компьютерный сопроцессор, который выгружал задачи трехмерного рендеринга из CPU в этот сопроцессор, который они назвали "GPU". Конкуренция и рыночный спрос привели инновации в этом пространстве до такой степени, что графические процессоры выполняли вычисления НАМНОГО быстрее, чем ЦП, поэтому возник вопрос: «Почему я не могу использовать графический процессор для вычисления своих чисел вместо ЦП?«Производители графических процессоров увидели спрос и способ заработать больше денег, поэтому они начали изменять свои платформы, чтобы позволить разработчикам использовать их оборудование. Но аппаратное оборудование было настолько специфичным для конкретной цели, что были и остаются ограничения в том, что вы можете попросить сделать графический процессор. Я не буду вдаваться в подробности, почему здесь.

Так почему же не было более специализированного кремния? Почему просто графика?

Две причины: 1) Цена. У GPU был хороший рынок, и он мог это оправдать, но даже тогда это был огромный риск. Никто на самом деле не знал, сможет ли 3DFX получить прибыль (оказывается, они на самом деле не могли и перестали существовать). Даже сейчас, с размером рынка графических процессоров, на самом деле есть только 3 конкурента. 2) ЦП фактически удовлетворяли потребность в "кастомном кремнии" с расширениями инструкций. Вспомните MMX - на самом деле это была попытка Intel ускорить графику в процессоре, так как 3DFX набирал скорость. С тех пор набор команд x86 стал довольно массовым со всеми этими пользовательскими расширениями. Многие из этих расширений имели смысл в то время (например, MMX), но в настоящее время они в значительной степени просто утомляют процессор. Вы не можете удалить их, потому что тогда это разрушит существующее программное обеспечение. Это на самом деле один из преимуществ ARM - ARM - это упрощенный набор инструкций. Существует не так много расширений инструкций, но это делает кремний меньше и дешевле в производстве.

Мне кажется, что вы могли бы заработать много денег, если бы вы могли снизить стоимость обычного кремния. Никто не работает над этим?

Существует технология, называемая FPGA - программируемая полевая вентильная матрица, которая существует с первых дней вычислений. По сути, это микрочип, который вы можете создать "на месте" с помощью программного обеспечения. Это очень крутая технология, но вся структура, необходимая для того, чтобы сделать чип программируемым, требует много кремния и заставляет чипы работать на гораздо более низких тактовых частотах. ПЛИС МОЖЕТ быть быстрее, чем ЦП, если у вас достаточно кремния на кристалле И можно эффективно распараллелить задачу. Но они ограничены в том, сколько логики вы можете на них надеть. Все, кроме самых дорогих FPGA, были медленнее, чем GPU, для раннего майнинга биткойнов, но их аналоги ASIC фактически положили конец прибыльности майнинга GPU. Другие криптовалюты использовали специальные алгоритмы, которые нельзя распараллелить, поэтому FPGA и ASIC не лучше, чем CPU и GPU, чтобы оправдать стоимость.

Основным ограничителем в FPGA является размер кремния - сколько логики вы можете разместить на чипе? Второй - это тактовая частота, потому что в FPGA сложно оптимизировать такие вещи, как горячие точки, утечки и перекрестные помехи. Новые методы изготовления свели к минимуму эти проблемы, и Intel объединилась с Altera, чтобы предоставить FPGA, которая может использоваться инженерами для использования преимуществ "пользовательского кремния" в качестве сопроцессора на сервере. Так что, в некотором смысле, это происходит.

Будут ли когда-нибудь ПЛИС заменять ЦП и ГП?

Вероятно, не в ближайшее время. Новейшие процессоры и графические процессоры MASSIVE и кремний, настроенные на тепловые и электрические характеристики. Вы не можете оптимизировать FPGA так же, как пользовательскую ASIC. Если не использовать некоторые передовые технологии, процессор, скорее всего, останется ядром вашего компьютера с сопроцессорами FPGA и GPU.

3

Действительно, существуют специализированные платы для высокоскоростных вычислений, например, у Xilinx есть список из 178 плат PCI-e, использующих свои ПЛИС, и около трети этих плат являются "числовыми преобразователями" с одним или несколькими мощными чипами ПЛИС и множеством встроенных плат. плата памяти DDR. Существуют также высокопроизводительные платы DSP (пример), предназначенные для высокопроизводительных вычислительных задач.

Я предполагаю, что популярность графических плат связана с их стремлением к более широкой группе клиентов. Вам не нужно вкладывать деньги в специальное оборудование, чтобы играть с Nvidia CUDA, поэтому к тому времени, когда у вас появится задача, требующая специального оборудования, графические процессоры Nvidia будут иметь конкурентное преимущество в том, что вы уже знаете, как их программировать.

2

Я думаю, что ответ на ваш вопрос зависит от того, как определить высокопроизводительные вычисления.

В общем случае высокопроизводительные вычисления связаны со временем вычислений. В таком случае мне нравится делиться ссылкой высокопроизводительного вычислительного кластера.

В ссылке указана причина использования графического процессора; Использование графических карт (или, точнее, их графических процессоров) для выполнения вычислений для грид-вычислений значительно экономичнее, чем использование процессоров, хотя и менее точно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .