После того, как мы познакомили вас с тем, что такое акселераторы и почему они так важны в современном мире, пришло время провести небольшое сравнение. Сегодня мы хотим развеять любые сомнения, которые могут возникнуть у вас после знакомства с термином ускоритель и сопроцессор. Эти системы кажутся очень похожими, но на практике их работа существенно отличается. Так в чем же разница между сопроцессором и ускорителем, хотя оба блока являются «специализированными вспомогательными схемами»?
Логические схемы теперь выходят на совершенно новый уровень сложности, поскольку ускорители и сопроцессоры, которые когда-то упускались из виду в маркетинговых объявлениях, теперь являются тем, чем компании хвастаются при каждом удобном случае. Впрочем, в этом нет ничего странного, ведь зачастую они отвечают, например, за воспроизведение звука или видео с использованием новейшего кодека, занимаются вычислениями с участием искусственного интеллекта или улучшают качество отрендеренной графики. Так они становятся чем-то не только важным, но и частью маркетингового «козыря в рукаве», поэтому стоит знать, что именно они из себя представляют.
Благодаря этой статье вы узнаете, среди прочего почему тензорные ядра в видеокартах GeForce RTX не такие, как специальный NVIDIA Deep Learning Accelerator, присутствующий, например, в графическом процессоре Volta. Мы уже упоминали об этом в предыдущем посте об ускорителях, и это сам по себе отличный пример, который подчеркивает причину, по которой создаются ускорители и сопроцессоры.
NVIDIA разработала эти специальные блоки для умножения матриц. вкл. чтобы видеокарты GeForce RTX могли использовать искусственный интеллект в суперсэмплинге, то есть масштабировании разрешения в реальном времени (технология DLSS) для повышения плавности игры. Так что они возникают из потребности и принуждения , но сопроцессоры и ускорители также могут возникать из желания снизить потребление энергии или повысить общую эффективность .
Эти три столпа работают чаще всего, когда компания хочет внедрить уникальную функцию в продукт любой ценой. Также может случиться так, что он заметит значительное энергопотребление при определенных нагрузках или найдет их слишком требовательными и достаточно повторяющимися, чтобы их можно было назначить специальному чипу в ЦП, графическом процессоре или SoC следующего поколения. Это окажет прямое положительное влияние на эффективность, потребление энергии и, следовательно, на вырабатываемое тепло, и эта специальная система является сопроцессором или ускорителем.
Их назначение, продвижение, физическое место в ядре и структура определяются именно на уровне проектирования нового центрального, графического или SoC (System-on-Chip) процессора. Однако я не буду вдаваться в эти подробности, потому что вы найдете их в предыдущем посте. Самое главное — знать, что и сопроцессор, и ускоритель несут ответственность за снятие с плеч основного процессора некоторой ответственности в соответствии с поставленными перед ним задачами. Однако они несут ответственность за выполнение не произвольных расчетов, а конкретных и заранее определенных, поскольку их физическая структура и инструкции были разработаны именно для них.
В чем разница между сопроцессором и ускорителем?
Пока что в тексте часто используется порядок «сопроцессор и/или ускоритель», что может подсказывать, что между ними можно поставить знак равенства. Вот и пришло время перейти к тому, что именно они из себя представляют и какие различия и сходства между ними можно выделить, хотя уже само название первых наверняка уже подсказало вам ответ.
Проще всего это объяснить тем, что сопроцессор вступает во взаимодействие с главным процессором. Он не может работать без него и самостоятельно, потому что он пристрастился к нему и работает синхронно с ним. Не имеет среди прочего возможность извлечения данных из памяти, поэтому перед началом работы над заданной задачей он должен получить как инструкции, так и данные для обработки от своего «руководителя» (CPU, GPU, SoC). Поэтому его задача состоит в том, чтобы как можно быстрее решить заданную вычислительную задачу и вернуть результат «руководителю». Это позволяет основному процессору сосредоточиться на своей собственной, обычно более важной работе, но когда придет время получать результаты от сопроцессоров, скорее всего, ему придется их дождаться.
Именно поэтому FPU был отделен от процессора, т.е. блоков с плавающей запятой, которые со временем получили «свой дом» в виде полностью независимых графических процессоров, являющихся центральными ускорителями для этих центральных. Точно… ускорители.
Кратко и упрощенно? Акселераторы — это сопроцессоры. Не волнуйтесь, пока мы вам не лгали. Ставить между ними знак равенства можно только тогда, когда кому-то очень-очень не хочется вникать, а вникать есть во что. Ускоритель (о нем подробнее здесь) отличается от сопроцессора в первую очередь гораздо большей степенью самостоятельности и большей ответственностью за процессы, т. к. на них перенаправляются не их части, а все целиком (см. — видеокарта и видеосигнал). Так что они только получают «запрос» от переопределяющего процессора, но работают с ним асинхронно, потому что он остается в стороне от их работы, требуя только подтверждения задачи или конечного результата.
Он также обычно имеет доступ к собственной колоде внутренней памяти и инструкций, что делает его гораздо более эффективным по отношению к сопроцессорам. Это также решает проблему обеспечения результатов «вовремя», потому что в сопроцессорах может случиться так, что система ждет результата одного из них, чтобы продвинуть вычисления дальше.
Так что ускорители намного, но гораздо лучше сопроцессоров в своих заранее выбранных, конкретных вычислениях. Проблема в том, что они более дороги и сложны, а кроме того требуют серьезных изменений в структуре и работе основного процессора для работы на практике. Так что они не лучшие во всех сценариях и условиях — поэтому сопроцессоры до сих пор существуют и, кроме того, они даже хорошо работают, потому что не каждое приложение требует более продвинутых ускорителей.
Практический пример? Тензорные ядра присутствуют в графических процессорах NVIDIA и блоках NVDLA, которые можно считать двойными вычислительными блоками, поскольку они служат одной цели — дополняются теневыми блоками. Проблема в том, что ядра Tensor являются в них лишь сопроцессорами, разделяя с ними регистры и блок управления, а NVDLA выполняет свои обязанности совершенно самостоятельно. Отсюда и присутствие обоих в графическом процессоре Volta, где NVIDIA, вероятно, проверяла до эпохи GeForce RTX, что работает лучше