2011-07-10 13:31:41 +0000 2011-07-10 13:31:41 +0000
380
380

Почему мы все еще используем CPU вместо GPU?

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

答案 (15)

394
394
394
2011-07-10 14:00:49 +0000

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

  • * GPGPU - это все еще относительно новая концепция. Изначально GPU использовались только для рендеринга графики; по мере развития технологий, большое количество ядер в GPU по сравнению с CPU было использовано путем развития вычислительных возможностей GPU, чтобы они могли обрабатывать множество параллельных потоков данных одновременно, независимо от того, какими могут быть эти данные. Хотя GPU могут иметь сотни и даже тысячи потоковых процессоров, каждый из них работает медленнее, чем ядро CPU, и обладает меньшим количеством функций (даже если они Turing complete и могут быть запрограммированы на выполнение любой программы, которую может запустить CPU). Функции, отсутствующие в GPU, включают прерывания и виртуальную память, которые необходимы для реализации современной операционной системы.

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

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

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

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

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

257
257
257
2011-07-10 20:22:09 +0000

Что делает GPU намного быстрее CPU?

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

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

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

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

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

77
77
77
2011-07-10 21:17:30 +0000

Недостаток GPU:

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

Они нужны вам, чтобы быть в состоянии реализовать все, что похоже на современную операционную систему.

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

EDIT : Обратите внимание, что этот ответ был написан в 2011 году – технология GPU - это область, которая постоянно меняется. Все может сильно отличаться в зависимости от того, когда вы читаете это :P

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

39
39
39
2011-07-11 15:39:21 +0000

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

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

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

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

24
24
24
2011-07-10 17:51:46 +0000

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

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

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

Незначительная сторона вопроса, однако, если бы можно было отказаться от CPU и иметь только GPU, не думаете ли вы, что мы бы переименовали его? :).

15
15
15
2011-07-10 17:57:36 +0000

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

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

Мы на самом деле используем различные (более похожие на GPU) архитектуры CPU. Например, Ниагара процессоры достаточно многозадачны. SPARC T3 будет выполнять 512 параллельных потоков.

12
12
12
2011-07-10 15:55:56 +0000

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

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

  • блок исполнения GPU не может эффективно справляться с ветвлением.

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

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

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

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

Если что-то не подходит под эту “потоковую” модель, то у вас есть задача, которая не может быть эффективно парализована, и GPU не обязательно является лучшим решением для нее. Хорошим примером является обработка “внешних событий”, таких как ввод с клавиатуры, джойстика или сети. Не так много вещей, которые не подходят под эту модель, но их всегда будет несколько.

7
7
7
2011-07-12 04:36:14 +0000

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

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

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

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

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

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

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

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

6
6
6
2011-07-15 11:44:05 +0000

Я хотел бы затронуть одну синтаксическую тему: Термины CPU и GPU - это функциональные названия, а не архитектурные.

Если бы компьютер использовал GPU в качестве основного процессора, то он стал бы “центральным процессором” (CPU) независимо от архитектуры и дизайна.

5
5
5
2011-07-10 14:57:18 +0000

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

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

Большинство шикарных трюков, которые использовались для того, чтобы заставить GPU делать свое дело очень быстро, были впервые разработаны людьми, которые пытались сделать более быстрые и лучшие CPU. Оказалось, что Word и Excel, Netscape и многие другие вещи, для которых люди используют свои компьютеры, не только не используют в полной мере возможности специализированных графических чипов, но даже запускают slower на этих архитектурах, потому что ветки часто приводят к (очень дорогим и медленным) чистоте трубопроводов.

3
3
3
2015-06-07 11:53:13 +0000

Причина, по которой мы все еще используем CPU, заключается в том, что и CPU, и GPU имеют свои уникальные преимущества. См. мою следующую статью, принятую в ACM Computing Surveys 2015, в которой говорится о переходе от “дебатов о CPU и GPU” к “совместным вычислениям на CPU-GPU”. A Survey of CPU-GPU Heterogeneous Computing Techniques

3
3
3
2011-07-17 16:44:16 +0000

По простой причине: большинство приложений не являются многопоточными/векторизованными.

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

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

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

3
3
3
2011-07-10 21:35:07 +0000

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

2
2
2
2016-07-01 11:46:23 +0000

gpus хорошие потоковые процессоры. вы можете думать о потоковой обработке как о последовательном умножении длинного массива чисел. cpus также имеет возможности потоковой обработки (это называется расширениями SIMD), но вы не можете реализовать всю логику программирования как потоковую обработку, и компиляторы имеют возможность создавать btyecode, который использует инструкции simd, когда это возможно.

не все является массивом чисел. картинки и видео, может быть, тоже звук (есть opencl кодеры то здесь, то там). Поэтому gpus может обрабатывать, кодировать и декодировать картинки, видео и что-то подобное. один недостаток в том, что вы не можете выгрузить все для gpus в играх, потому что это создаст заикание, gpus занят графикой и должен быть узким местом в системе при игре. оптимальным решением было бы полное использование всех компонентов в компьютере. так, например, движок physx от nvidia, по умолчанию, делает вычисления на процессоре, когда gpu полностью используется.

2
2
2
2015-11-16 15:42:30 +0000

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

相关问题

19
9
6
8
6