Я на самом деле не трехмерный человек, и я лишь немного использовал шейдеры в некоторых примерах Three.js, и до сих пор у меня сложилось впечатление, что они используются только для графической части уравнения.
Хотя (довольно загадочная) статья в Википедии и некоторые другие источники наводят меня на мысль, что их можно использовать не только для графических эффектов, то есть для программирования GPU ( Википедия ).
Итак, графический процессор все еще процессор, верно? С большим и другим набором команд для более легкой и быстрой работы с векторами, но все же процессором. Могу ли я использовать шейдеры для создания обычных программ (при условии, что у меня есть доступ к видеопамяти, что вероятно)?
Редактировать: обычные программы == «Приложения», то есть создавать программы для окон / консолей или, по крайней мере, иметь какой-либо способ рисования объектов на экране, возможно, даже принимая пользовательский ввод.
Ответы:
Изначально специализированное оборудование для обработки графики имело фиксированный, встроенный набор функций. Он потребует входную геометрию, сделает что-то особенное для ее преобразования и растеризации, а затем отобразит результаты на экране. Со временем эта функциональность стала параметризованной и в конечном итоге программируемой. «Шейдеры» стали термином, используемым для программ, работающих на GPU, поскольку они контролировали преобразование и затенение геометрии.
По мере развития аппаратного обеспечения графического процессора все больше и больше стало программироваться, поэтому теперь большинство типов шейдеров, которые можно писать, только косвенно влияют на фактическое затенение чего-либо на экране (я имею в виду такие вещи, как геометрия и шейдеры корпуса). ). Вместе с этим пришло обобщение графического процессора как устройства для выполнения крупномасштабной высококонкурентной обработки на основе потоков, так что, хотя цель графического процессора и шейдеров, как правило, заключается в реализации какого-то необычного графического эффекта, они также могут быть используется для выполнения определенных видов вычислений общего назначения (особенно тех, которые подходят для параллельных вычислений). Это часто называют программированием GPU общего назначения или «GPGPU».
Тем не менее, GPU по-прежнему высокоспециализирован и не может делать многое из того, что может делать CPU. Он также имеет ограниченные возможности подключения к остальному аппаратному обеспечению в системе, поэтому вы не можете писать «обычные» программы (с консольным выводом или с помощью мыши и т. Д.) Полностью на GPU. Вы можете выполнять вычисления на GPU, которые не предназначены для интерпретации как рендеринга, но это не отдельный процессор сам по себе.
источник
GPU не может сказать CPU, что делать. Он может просто предоставлять результаты в своей памяти, которая будет читать ЦП.
Шейдеры / GPGPU нельзя использовать для :
Шейдеры / ГПГПУ могут быть использованы для :
Видеть OpenCL . Он может использовать шейдеры для неграфических вычислений.
Редактировать на основе комментариев:
Шейдеры используются только для рендеринга графики. Выполнение неграфических вычислений в GPU называется GPGPU .
источник
Просто. Графический процессор в конечном итоге получил шейдеры, которые причудливые эффекты штанов для затенения. Это стало программируемым, поэтому эффекты становились все более и более причудливыми. В конечном итоге весь графический процессор стал 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.
источник