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

8

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

Хотя (довольно загадочная) статья в Википедии и некоторые другие источники наводят меня на мысль, что их можно использовать не только для графических эффектов, то есть для программирования GPU ( Википедия ).

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

Редактировать: обычные программы == «Приложения», то есть создавать программы для окон / консолей или, по крайней мере, иметь какой-либо способ рисования объектов на экране, возможно, даже принимая пользовательский ввод.

jcora
источник
2
Что вы подразумеваете под «обычными программами»
кравемир
2
+1 За самый милый вопрос о разработке игр, который я когда-либо видел, мне также удалось переосмыслить мой взгляд на мир.
knight666
1
"==" - компаратор, а не оператор присваивания :)
Кравемир
2
Да, я знаю, это все еще актуально для использования. Я не хотел «назначать» объяснение определению, я хотел приравнять их.
Jcora
1
ru.wikipedia.org/wiki/Turing_completeness
Тревор Пауэлл,

Ответы:

13

Изначально специализированное оборудование для обработки графики имело фиксированный, встроенный набор функций. Он потребует входную геометрию, сделает что-то особенное для ее преобразования и растеризации, а затем отобразит результаты на экране. Со временем эта функциональность стала параметризованной и в конечном итоге программируемой. «Шейдеры» стали термином, используемым для программ, работающих на GPU, поскольку они контролировали преобразование и затенение геометрии.

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

Тем не менее, GPU по-прежнему высокоспециализирован и не может делать многое из того, что может делать CPU. Он также имеет ограниченные возможности подключения к остальному аппаратному обеспечению в системе, поэтому вы не можете писать «обычные» программы (с консольным выводом или с помощью мыши и т. Д.) Полностью на GPU. Вы можете выполнять вычисления на GPU, которые не предназначены для интерпретации как рендеринга, но это не отдельный процессор сам по себе.


источник
5

GPU не может сказать CPU, что делать. Он может просто предоставлять результаты в своей памяти, которая будет читать ЦП.

Шейдеры / GPGPU нельзя использовать для :

  • принимая пользователя ввод напрямую без процессора , потому что они реализованы как прерывания процессора
  • создание любого приложения , потому что приложения управляются ядром, а выполняются процессором
  • создание любого окна , потому что оконный менеджер / сервер выполняется в CPU

Шейдеры / ГПГПУ могут быть использованы для :

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

Видеть OpenCL . Он может использовать шейдеры для неграфических вычислений.

Редактировать на основе комментариев:

Шейдеры используются только для рендеринга графики. Выполнение неграфических вычислений в GPU называется GPGPU .

kravemir
источник
Последнее утверждение не совсем верно, вы не используете шейдеры для вычисления физики, вы используете API-интерфейс GPGPU, такой как OpenCL и CUDA.
Dreta
@dreta Да. Это так. Основываясь на его вопросе, я думаю, что он имел в виду шейдеры как аппаратные средства. Он сказал «но все еще процессор».
Кравемир
2
ну тогда исправьте его за то, что он не прав, почему вы признаете его заблуждение, он сказал, что он не гуру рендеринга, шейдеры не двусмысленны, у них определенная роль
dreta
-4

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

SIMD означает однонаправленные множественные данные. В настоящее время графические процессоры похожи на дерево. Он имеет X много ядер, каждое имеет Y много ядер, Z много ядер. Чем дальше вы спускаетесь по дереву, тем быстрее и меньше объем памяти, тем больше параллелей и проще вычислений.

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

Само собой разумеется, что мощь GPGPU заключается в необходимости выполнять несколько параллельных параллельных операций с большим количеством данных одновременно. Таким образом, nVidia работает над тем, чтобы превратить GPGPU в центральный процессор. Они верят, что могут выставить графический процессор как процессор ARM. Этот метод перевода также находится внутри процессоров x86, которые по своей сути являются RISC.

OpenCL, CUDA и DirectX подобны языку программирования с раздельными личностями. Например, OpenCL работает на процессоре, но выгружает «бомбы» («ядра»), которые получают выгоду от SIMD, в графический процессор.

Это не займет много времени, прежде чем все это стиль Fusion / Sandy Bridge CPU-GPU.

Винсент
источник
3
-1. Ваш выбор слов резко снижает качество этого ответа.
bummzack
Выбор слов сам по себе не имеет смысла: en.wikipedia.org/wiki/On_Denoting Поэтому он не снижает качество ответа, потому что качество не имеет ничего общего с вопросом, но логика. На самом деле это самый правильный ответ.
Винсент
2
Выбор слов очень важен. Если вы используете оскорбительные выражения, ваш ответ не будет считаться хорошим. Кто-то с достойным ответом потратит время, чтобы убедиться, что он красноречив и элегантен.
Джонатан Питр
Если у вас есть проблемы с языком, то отредактируйте ответ. Каждый может сделать сайт лучше.
Тетрад
Если запрос на логическое понимание исходит от двухпалатного философского зомби, он бы меня полностью удовлетворил, потому что знание равно силе. Я не люблю передавать знания двухпалатным людям, которые ценят эмоции больше, чем логику. Это только улучшает ответ.
Винсент