Вопрос Почему мы по-прежнему используем процессоры вместо графических процессоров?


Мне кажется, что в наши дни на графическом процессоре сделано много расчетов. Очевидно, графика выполняется там, но с использованием CUDA и т. П. AI, алгоритмы хеширования (думаю, биткойны), а другие также выполняются на графическом процессоре. Почему мы не можем просто избавиться от процессора и использовать GPU самостоятельно? Что делает GPU намного быстрее, чем процессор?


352
2017-07-10 13:31


происхождения


как узнать, какие ответы содержат правильную информацию? Должен ли я ждать, пока другие пользователи не вернут ответы? Я думаю, что я поспешил принять ответ: O - ell
В настоящее время есть несколько недавних ответов, которые не содержат «дезинформации». Они постепенно поднимаются на вершину с голосами из-за эффективного рыночного механизма чудесно разработанного StackExchange ;-) Я предлагаю подождать немного дольше, прежде чем принимать ответ. Похоже, вы очень осторожно делаете именно это. Кстати, это хороший вопрос. Может показаться очевидным, но это совсем не так. Спасибо, что спросили! - Ellie Kesselman
Вроде как спрашивать «Если Boeing 747 быстрее и экономичнее, почему мы все еще ведем автомобили»? - vartec
Нет, потому что это не RISC и CISC. Это одна из других основ информатики, слегка замаскированная. Это «Почему мы выгружаем работу с центрального процессора на процессоры ввода-вывода?», - JdeBP
@vartec: Я думаю, что несколько лучшая аналогия может быть между автобусами и такси. Если сорок человек, которые все хотят идти с одного места на одно и то же место, автобус будет намного эффективнее. Если сорок человек, чье искомое происхождение и место назначения широко разбросаны, даже один такси может быть таким же хорошим, как автобус, а за стоимость автобуса можно было бы иметь несколько такси. - supercat


ответы:


TL; DR ответ: У графических процессоров гораздо больше процессорных ядер, чем у процессоров, но поскольку каждый ядро ​​графического процессора работает значительно медленнее ядра процессора и не имеет функций, необходимых для современных операционных систем, они не подходят для выполнения большей части обработки в повседневных вычислениях. Они наиболее подходят для интенсивных вычислений, таких как обработка видео и физическое моделирование.


GPGPU по-прежнему является относительно новой концепцией. Сначала графические процессоры использовались только для рендеринга графики; по мере развития технологии большое количество ядер в графических процессорах относительно процессоров использовалось при разработке вычислительных возможностей для графических процессоров, чтобы они могли обрабатывать множество параллельных потоков данных одновременно, независимо от того, какие данные могут быть. Хотя графические процессоры могут иметь сотни или даже тысячи потоковых процессоров, каждый из них работает медленнее ядра процессора и имеет меньше возможностей (даже если они Тьюринг завершен и может быть запрограммирован на запуск любой программы, которую может запускать ЦП). Возможности, отсутствующие на GPU, включают прерывания и виртуальную память, которые необходимы для внедрения современной операционной системы.

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

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

Современные графические процессоры способны выполнять векторные операции и арифметику с плавающей запятой, с последними картами, способными манипулировать числами с плавающей запятой с двойной точностью. Такие платформы, как CUDA и OpenCL, могут быть написаны для графических процессоров, а характер графических процессоров делает их наиболее подходящими для высокопараллелируемых операций, например, в научных вычислениях, где серия специализированных вычислительных карт GPU может стать жизнеспособной заменой для небольших вычислить кластер, как в Персональные суперкомпьютеры NVIDIA Tesla, Потребители с современными графическими процессорами, которые имеют опыт работы с Folding @ home, могут использовать их для Клиенты GPU, который может выполнять симуляции сгибания белков с очень высокой скоростью и вносить дополнительный вклад в проект (обязательно прочитайте Вопросы и ответы во-первых, особенно те, которые связаны с графическими процессорами). Графические процессоры также позволяют улучшить физическое моделирование в видеоиграх с использованием PhysX, ускорить кодирование и декодирование видео и выполнять другие интенсивные задачи. Именно эти типы задач наиболее подходят GPU.

AMD является новаторским дизайном процессора под названием Ускоренный процессор (APU) который сочетает в себе обычные процессорные ядра x86 с графическими процессорами. Такой подход обеспечивает графическую производительность, значительно превосходящую графические решения, совместимые с материнской платой (хотя они не подходят для более дорогих дискретных графических процессоров), и позволяет использовать компактную недорогую систему с хорошей мультимедийной производительностью без необходимости использования отдельного графического процессора. Последние процессоры Intel также предлагают встроенную графику на чипе, хотя в настоящее время конкурентоспособная интегрированная производительность графического процессора ограничена несколькими чипами с Intel Iris Pro Graphics. По мере того, как технология продолжает развиваться, мы увидим возрастающую степень сближения этих раздельных частей. AMD предполагает будущее, когда процессор и графический процессор являются одними из них, которые могут легко работать вместе по одной и той же задаче,

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


373
2017-07-10 14:00



Как и этот ответ, я думаю, что основная причина заключается в том, что у нас нет хороших языков программирования основного потока для работы с такими параллельными архитектурами. Мы много десятилетий боролись за продвижение многопоточного программирования, и люди все еще звонят, многопоточное «зло». Несмотря на то, что многоядерные процессоры и графические процессоры являются реальностью, и нам придется придумать новые парадигмы программирования, чтобы справиться с этим. - Soren
Стоит отметить, что Intel работает над Larrabee архитектура (слишком длинная), которая по сути является чипом с массивным количеством ядер x86 на нем. - Chris S
Отличный ответ для обсуждения аппаратных причин и обсуждения APU и того, как они изменят это. Тем не менее, @Soren дает очень хорошую оценку со стороны программного обеспечения. На самом деле, это сочетание проблем с оборудованием, проблем с программным обеспечением и того факта, что процессоры работают и когда что-то известно, что работать, трудно заставить людей заменить его. - Nich Del
«у нас нет хороших языков программирования основного потока для работы с такими параллельными архитектурами». - Haskell, OCaml, Scheme, F #, Erlang, и почти любое другое функциональное программирование langauge справляется с многопоточным очень хорошо. Все те, что я упомянул, являются основными. - BlueRaja - Danny Pflughoeft
@BlueRaja - мы знаем об этих языках, ваше определение основного потока должно отличаться от моего :-) - Soren


Что делает GPU намного быстрее, чем процессор?

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

GPU - это специальный процессор, разработанный так, что одна команда работает над большим блоком данных (SIMD / Single Instruction Multiple Data), причем все они используют одну и ту же операцию. Работа в блоках данных, безусловно, более эффективна, чем работа с одной ячейкой за раз, поскольку при декодировании инструкций значительно сокращается накладные расходы, однако работа в больших блоках означает, что имеется больше параллельных рабочих блоков, поэтому он использует гораздо больше транзисторов для реализации одной инструкции GPU (вызывающей ограничение физического размера, использование большего количества энергии и увеличение тепла).

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

Причина, по которой мы все еще используем CPU, - это не потому что x86 является королем архитектуры процессора, а Windows написана для x86, причина, по которой мы все еще используем CPU, - это то, что задачи, которые должна выполнять ОС, то есть принятие решений, более эффективно выполняются в архитектуре процессора. ОС должна смотреть на 100 различных типов данных и принимать различные решения, которые зависят друг от друга; такая работа не легко распараллеливается, по крайней мере, не в архитектуре SIMD.

В будущем мы увидим конвергенцию между архитектурой CPU и GPU, поскольку процессор получает возможность работать над блоками данных, например. SSE. Кроме того, по мере совершенствования технологии изготовления и сокращения чипов, GPU может позволить себе выполнять более сложные инструкции.


245
2017-07-10 20:22



Вероятно, это лучший ответ. Важно понять фундаментальные различия между двумя парадигмами. Для GPU, чтобы обогнать процессоры, учитывая сегодняшние рабочие нагрузки, по существу означает, что GPU должен превратиться в CPU. И, таким образом, вопрос - это ответ. - surfasb
+1, потому что это лучший ответ. И это, и принятый ответ верны, но это объясняет это гораздо яснее.
Я удивлен, что никто в этом потоке не упомянул накладные расходы на передачу данных на GPU - ограниченная пропускная способность по шинам PCI-Express делает некоторые параллельные операции на графическом процессоре намного медленнее, чем они выполнялись на процессоре. Один простой случай можно увидеть, когда изменение размера БПФ существенно повлияло на производительность на графическом процессоре и процессоре из-за накладных расходов на отправку данных, настройку контекста и вывод результатов: stackoverflow.com/a/8687732/303612 Меньшие операции могут выполняться в кэше на процессорах, а пропускная способность памяти значительно превосходит текущую архитектуру PCI-E - Dr. Andrew Burnett-Thompson
@ Dr.AndrewBurnett-Thompson: это потому, что это не имеет отношения к вопросу. В настоящее время GPU считается вспомогательным процессором, поэтому перемещение данных с / на GPU является необходимым и дорогостоящим. Если мы будем рассматривать GPU как блок обработки первого класса, нет необходимости в маршалировании данных между основной памятью и памятью GPU. - Lie Ryan
Не оптимистично, это не нулевая пропускная способность. Если процессор с архитектурой GPU запускает весь показ, ничего не нужно перемещать, память GPU является основная память. В первую очередь нет никаких накладных расходов на передачу, потому что нет переводов. Это не гипотетично, кстати, APU AMD использует HSA (гетерогенную системную архитектуру) с единой основной памятью, которая обеспечивает нулевое копирование между CPU и GPU. - Lie Ryan


Отсутствуют графические процессоры:

  1. Виртуальная память (!!!)
  2. Средства адресации устройств, отличных от памяти (например, клавиатуры, принтеры, вторичное хранилище и т. Д.)
  3. Прерывания

Вам нужно, чтобы они могли реализовать что-то вроде современной операционной системы.

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

РЕДАКТИРОВАТЬ: Обратите внимание, что этот ответ был написан в 2011 году - технология GPU постоянно меняется. Все может сильно отличаться в зависимости от того, когда вы читаете это: P

* Некоторые графические процессоры не слишком медленны при арифметике с двойной точностью, например, линии Quadro или Tesla от NVidia (генерация Fermi или новее) или AMD FirePro (генерация GCN или новее). Но это не в большинстве потребительских машин.


75
2017-07-10 21:17



@Cicada: У вас есть ссылка на это? В любом случае, даже если это так, даже недавнее оборудование не будет хорошо работать в этом случае. (например, не будет иметь слишком большое преимущество перед процессором - и недостаток энергопотребления) - Billy ONeal
Да, устройства Fermi, как вы сказали (с CUDA 4.0 и sm_20), поддерживают косвенные прыжки (и, следовательно, виртуальные методы C ++, наследование и т. Д.). - Angry Lettuce
544 GigaFLOPS от 300-летнего GPU на 2 года медленный? - Ben Voigt
@Ben: Вы получаете такую ​​производительность только в приложениях с параллельным доступом. Общие последовательные операции - это совершенно другая игра. (Это происходит только со всеми 1600 ядрами на этом чипе, работающими параллельно, и в то же время повторяется одна и та же команда снова и снова ... и даже это теоретический, а не фактический perf) - Billy ONeal
@Billy: Но это медлительность по определенному классу алгоритмов, а не медлительность по арифметике с двойной точностью (это то, что вы утверждали). (И CPU, как правило, также не достигают контрольных пропускных способностей) - Ben Voigt


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

Который бы вы предпочли, как ваш коллега-разработчик, один супер быстрый парень или 100 быстрых клонов, которые на самом деле не такие быстрые, но все они должны выполнять одни и те же действия одновременно?

Для некоторых действий клоны довольно хороши, например. подметать пол - они могут каждый размахнуть часть его.

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


37
2017-07-11 15:39



Могу ли я даже ... и то и другое? - Kevin Panko
@Kevin: Да, но вам нужен компьютер с и то и другое процессор а также графический процессор! Если бы только было такое! - Joachim Sauer
Отличная аналогия. Вспомни это. - Mayo


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

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

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

Однако второстепенное примечание, если можно было отказаться от процессора и иметь только графический процессор, разве вы не думаете, что мы его переименовали? :)


23
2017-07-10 17:51



Я думаю, что большинство современных процессоров рассчитаны на 2, 4 или 8 штук одновременно. - danielcg
@ danielcg25: И самые современные графические процессоры предназначены для одновременного выполнения 256, 512 и 1024 штук (у GTX 680 есть 1536 CUDA). Концептуально каждое отдельное ядро ​​ЦП представляет собой отдельный объект, но это не относится к графическому процессору. - Phoshi
@ danielcg25: Я знаю, но комментарий с фундаментальным (хотя и преднамеренным) непониманием ответа может быть вредным, если кто-то его читает, не зная эту тему. «Быть ​​ослом» в этом смысле на самом деле не очень ценится на SE, поскольку он снижает отношение сигнал / шум. - Phoshi
Я просто предоставлял некоторую информацию. Большинство компьютеров в настоящее время на самом деле способны обрабатывать сразу 2-8 вещей. Некоторые процессоры могут делать даже больше. Он по-прежнему не близок к графическим процессорам, которые делают сразу несколько вещей. - danielcg
@ danielcg25: Это другой вид обработки, хотя это и есть вопрос. Каждое ядро ​​ЦП эффективно разделено, работая со своими собственными фрагментами данных и своими собственными процессами. Каждое ядро ​​ЦП выполняет другую отдельную задачу для каждого другого, и они не масштабируются вверх линейно - окто-сердечник не в два раза полезен, так как четырехъядерный ядро ​​не в два раза полезнее двухъядерного ядра. С другой стороны, ядра GPU выполняют одну и ту же задачу для разных частей данных и линейно масштабируются. Очевидно, что многоядерные процессоры существуют, но это не одно и то же, - Phoshi


Вы действительно спрашиваете почему мы не используем графические процессоры в процессорах?

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

На самом деле мы используем разные (более GPU-ish) архитектуры процессора. Например. Niagara процессоры довольно многозадачны. SPARC T3 будет работать 512 одновременных потоков.


14
2017-07-10 17:57



Зачем? - jkj
я думаю, последняя строка, поскольку это просто ложь. На самом деле, я могу думать только об одной основной ОС x86; и даже тот, который был перенесен на альфа-и ARM-процессоры, просто не коммерчески предлагаемые на данный момент. - Javier
ОК. Удален последний раздел, который был моим мнением о поддержке основной операционной системы, препятствующей изменениям в новых архитектурах. Не может быть в пределах ответа. - jkj


Я мог бы ужасно ошибаться здесь, и я говорю от небольшой или никакой власти по этому вопросу, но здесь говорится:

  • Я считаю, что каждый блок выполнения GPU («ядро») имеет очень ограниченное адресное пространство по сравнению с процессором.

  • Блоки управления графическим процессором не могут эффективно обрабатывать ветвление.

  • Блоки выполнения GPU не поддерживают аппаратные прерывания точно так же, как это делают CPU.

Я всегда думал о том, как должны быть задействованы единицы исполнения GPU, что-то вроде «SPEs» для Playstation 3, они хотят получить блок данных, выполнить несколько последовательных операций над ним, а затем выплюнуть еще один блок данные, промыть, повторить. У них не так много адресной памяти, как основная «CPE», но идея состоит в том, чтобы посвятить каждому «SPE» конкретной, последовательной задаче. Выход одного устройства может подавать вход другого устройства.

Блоки выполнения не работают хорошо, если они пытаются «проанализировать» данные и сделать кучу решений на основе того, что это за данные.

Эти «блоки данных» могут быть частью потока, например списка вершин из таблицы состояний игры, данных MPEG с диска и т. Д.

Если что-то не соответствует этой «потоковой» модели, тогда у вас есть задача, которая не может быть эффективно паралелизована, и графический процессор не обязательно является лучшим решением для него. Хорошим примером является обработка «внешних событий», таких как клавиатура, джойстик или сетевой ввод. Существует не так много вещей, которые не подходят для этой модели, но их всегда будет много.


11
2017-07-10 15:55



Хороший вопрос об оптимизации прогнозирования отрасли - я бы никогда не подумал об этом, но вы правы. - Jimmy Breck-McKye


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

Был очень старый аргумент о том, лучше ли иметь много немых ядер или небольшую группу очень умных ядер. Это легко возвращается в 80-е.

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

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

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

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

Современные микропроцессоры - руководство 90 минут

http://www.lighterra.com/papers/modernmicroprocessors/


6
2017-07-12 04:36



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