Что такое gpu usage

Что такое gpu usage

This started to happen with some beta drivers that launched around October or something, since than its still not fixed.

If i install some older drivers it works just fine.

If i untick "enable unified. " it does show % usage but its very inaccurate, with it enabled it just shows 0% usage in all games

ps: If i untick that option the gpu usage does work but its very innacurate. If i enable it shows 0% usage in all games

О статье

Этот пост — небольшая заметка, предназначенная для программистов, которым хочется больше узнать о том, как GPU обрабатывает ветвление. Можно считать её введением в эту тему. Рекомендую для начала просмотреть [1], [2] и [8], чтобы получить представление о том, как в общем виде выглядит модель выполнения GPU, потому что мы будем рассматривать только одну отдельную деталь. Для любопытных читателей в конце поста есть все ссылки. Если найдёте ошибки, то свяжитесь со мной.

Содержание

Словарь

  • GPU — Graphics processing unit, графический процессор
  • Классификация Флинна
  • SIMD — Single instruction multiple data, одиночный поток команд, множественный поток данных
  • SIMT — Single instruction multiple threads, одиночный поток команд, множественные потоки
  • Волна (wave) SIMD — поток, выполняемый в режиме SIMD
  • Линия (lane) — отдельный поток данных в модели SIMD
  • SMT — Simultaneous multi-threading, одновременная многопоточность (Intel Hyper-threading)[2]
    • Множественные потоки пользуются общими вычислительными ресурсами ядра
    • IMT — Interleaved multi-threading, чередующаяся многопоточность[2]
      • Множественные потоки пользуются общими вычислительными ресурсами ядра, но за такт выполняется только один
      • BB — Basic Block, базовый блок — линейная последовательность инструкций с единственным переходом в конце
      • ILP — Instruction Level Parallelism, параллелизм на уровне инструкций[3]
      • ISA — Instruction Set Architecture, архитектура набора команд/инструкций
      • В своём посте я буду придерживаться этой придуманной классификации. Она приблизительно напоминает то, как организован современный GPU.

        Оборудование:
        GPU -+
        |- ядро 0 -+
        | |- волна 0 +
        | | |- линия 0
        | | |- линия 1
        | | |- .
        | | +- линия Q-1
        | |
        | |- .
        | +- волна M-1
        |
        |- .
        +- ядро N-1

        Программное обеспечение:
        группа +
        |- поток 0
        |- .
        +- поток N-1

        • Ядро может называться CU, SM, EU
        • Волна может называться фронтом волны (wavefront), аппаратным потоком (HW thread), warp, контекстом (context)
        • Линия может называться программным потоком (SW thread)

        Чем ядро GPU отличается от ядра ЦП?

        Любое текущее поколение ядер GPU менее мощно, чем центральные процессоры: простые ILP/multi-issue[6] и предвыборка[5], никакого прогнозирования или предсказания переходов/возвратов. Всё это наряду с крошечным кэшами освобождает довольно большую площадь на кристалле, которая заполняется множеством ядер. Механизмы загрузки/хранения памяти способны справляться с шириной канала на порядок величин больше (это не относится к интегрированным/мобильным GPU), чем обычные ЦП, но за это приходится расплачиваться высокими задержками. Для сокрытия задержек GPU использует SMT[2] — пока одна волна простаивает, другие пользуются свободными вычислительными ресурсами ядра. Обычно количество обрабатываемых одним ядром волн зависит от используемых регистров и определяется динамически, выделением фиксированного файла регистров[8]. Планирование выполнения инструкций гибридное — динамически-статическое[6] [11 4.4]. SMT-ядра, выполняемые в режиме SIMD, достигают высоких значений FLOPS (FLoating-point Operations Per Second, флопс, количество операций с плавающей запятой в секунду).

        Легенда диаграммы. Чёрный — неактивно, белый — активно, серый — отключено, синий — простаивает, красный — в ожидании

        Рисунок 1. История выполнения 4:2

        На изображении показана история маски выполнения, где на оси x отложено время, идущее слева направо, а на оси y — идентификатор линии, идущий сверху вниз. Если вам это пока вам непонятно, то вернитесь к рисунку после прочтения следующих разделов.

        Это иллюстрация того, как история выполнения ядра GPU может выглядеть в вымышленной конфигурации: четыре волны совместно используют один сэмплер и два АЛУ. Планировщик волн в каждом цикле выпускает по две инструкции от двух волн. Когда волна простаивает при выполнении доступа к памяти или долгой операции АЛУ, планировщик переключается на другую пару волн, благодаря чему АЛУ постоянно заняты почти на 100%.

        Рисунок 2. История выполнения 4:1

        Пример с такой же нагрузкой, но на этот раз в каждом цикле инструкции выпускает только одна волна. Заметьте, что второе АЛУ «голодает».

        Читайте также:  Посторонний шум 3 буквы

        Рисунок 3. История выполнения 4:4

        На этот раз в каждом цикле выпускаются по четыре инструкции. Заметьте, что к АЛУ теперь слишком много запросов, поэтому две волны почти постоянно ожидают (на самом деле это ошибка алгоритма планирования).

        Обновление Подробнее о трудностях планирования выполнения инструкций можно прочитать в [12].

        В реальном мире GPU имеют разные конфигурации ядра: у некоторых может быть до 40 волн на ядро и 4 АЛУ, у других фиксированные 7 волн и 2 АЛУ. Всё это зависит от множества факторов и определяется благодаря кропотливому процессу симуляции архитектуры.

        Кроме того, у реальных АЛУ SIMD может быть более узкая ширина, чем у обслуживаемых ими волн, и тогда для обработки одной выпущенной инструкции требуется несколько циклов; множитель называется длиной «chime»[3].

        Что такое согласованность/расхождение?

        Давайте взглянем на следующий фрагмент кода:

        Пример 1

        Здесь мы видим поток инструкций, в котором путь выполнения зависит от идентификатора выполняемой линии. Очевидно, что разные линии имеют разные значения. Что же должно произойти? Существуют разные подходы к решению этой проблемы [4], но в конечном итоге все они делают примерно одно и то же. Один из таких подходов — это маска выполнения, которую я и рассмотрю. Этот подход применялся в GPU Nvidia до Volta и в GPU AMD GCN. Основной смысл маски выполнения заключается в том, что мы храним по биту для каждой линии в волне. Если соответствущий бит выполнения линии имеет значение 0, то для следующей выпущенной инструкции не будут затрагиваться никакие регистры. По сути, линия не должна ощущать влияния всей выполненной инструкции, потому что её бит выполнения равен 0. Это работает следующим образом: волна проходит по графу потока управления в порядке поиска в глубину, сохраняя историю выбранных переходов, пока биты не заданы. Думаю, это лучше показать на примере.

        Допустим, у нас есть волны шириной 8. Вот как выглядит маска выполнения для фрагмента кода:

        Пример 1. История маски выполнения

        Теперь рассмотрим более сложные примеры:

        Пример 2
        Пример 3

        Можно заметить, что история необходима. При использовании подхода с маской выполнения оборудование обычно применяет какой-нибудь вид стека. Наивный подход заключается в хранении стека кортежей (exec_mask, address) и добавлении инструкций схождения, которые извлекают маску из стека и изменяют указатель инструкции для волны. В этом случае волна будет иметь достаточно информации для обхода всей CFG для каждой линии.

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

        Обновление. Благодаря @craigkolb я прочитал статью [13], в которой замечается, что инструкции fork/join AMD GCN сначала выбирают путь из меньшего количества потоков [114.6], что гарантирует достаточность глубины стека масок, равной log2.

        Обновление. Очевидно, что почти всегда можно встроить всё в шейдер/структурировать CFG в шейдере, а потому хранить всю историю масок выполнения в регистрах и планировать обход/схождение CFG статически[15]. Просмотрев LLVM-бэкенд для AMDGPU, я не нашёл никаких свидетельств обработки стеков, постоянно выпускаемых компилятором.

        Аппаратная поддержка маски выполнения

        Теперь взгляните на эти графы потоков управления из Википедии:

        Рисунок 4. Некоторые из видов графов потоков управления

        Какое же минимальное множество инструкций управления масками нам необходимо для обработки всех случаев? Вот как это выглядит в моей искусственной ISA с неявным распараллеливанием, явным управлением масками и полностью динамической синхронизацией конфликтов данных:

        Давайте взглянем, как может выглядеть случай d).

        Я не специалист в анализе потоков управления или проектировании ISA, поэтому я уверен, что существует случай, с которым моя искусственная ISA справиться не сможет, но это не важно, потому что структурированной CFG должно быть достаточно для всех.

        Обновление. Подробнее прочитать о поддержке GCN инструкций потоков управления можно здесь: [11] ch.4, а о реализации LLVM — здесь: [15].

        • Расхождение — возникающее различие в путях выполнения, выбранных разными линиями одной волны
        • Согласованность — отсутствие расхождения.
        Читайте также:  Почему не открывается сайт mail ru

        Примеры обработки маски выполнения

        Вымышленная ISA

        Я скомпилировал предыдущие фрагменты кода в своей искусственной ISA и запустил их на симуляторе в SIMD32. Посмотрите, как он обрабатывает маску выполнения.

        Обновление. Заметьте, что искусственный симулятор всегда выбирает путь true, а это не самый лучший способ.

        Пример 1

        Рисунок 5. История выполнения примера 1

        Вы заметили чёрную область? Это время, потраченное впустую. Некоторые линии ждут, пока другие завершать итерацию.

        Пример 2

        Рисунок 6. История выполнения примера 2

        Пример 3

        Рисунок 7. История выполнения примера 3

        AMD GCN ISA

        Обновление. GCN тоже использует явную обработку масок, подробнее об этом можно прочитать здесь: [11 4.x]. Я решил стоит показать несколько примеров с их ISA, благодаря shader-playground это сделать легко. Возможно, когда-нибудь я найду симулятор и удастся получить диаграммы.

        Учтите, что компилятор умный, поэтому вы можете получить другие результаты. Я попытался обмануть компилятор, чтобы он не оптимизировал мои ветвления, поместив туда циклы следования за указателями, а затем подчистив ассемблерный код; я не специалист по GCN, поэтому несколько важных nop может быть пропущено.

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

        Обновление. Посмотрите этот доклад @SiNGUL4RiTY о реализации векторизованного потока управления в LLVM-бэкенде, используемом AMD.

        Пример 1
        Пример 2
        Пример 3

        AVX512

        Обновление. @tom_forsyth указал мне, что расширение AVX512 тоже имеет явную обработку масок, поэтому вот несколько примеров. Подробнее об этом можно прочитать в [14], 15.x и 15.6.1. Это не совсем GPU, но у него всё равно есть настоящий SIMD16 с 32 битами. Фрагменты кода созданы с помощью ISPC(–target=avx512knl-i32x16) godbolt и сильно переработаны, поэтому могут быть верными не на 100%.

        Пример 1
        Пример 2
        Пример 3

        Как бороться с расхождением?

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

        Представьте простой фрагмент кода:

        Давайте создадим 256 потоков и измерим их длительность выполнения:

        Рисунок 8. Время выполнения расходящихся потоков

        Ось x — это идентификатор программного потока, ось y — тактовые циклы; разные столбцы показывают, сколько времени тратится впустую при группировке потоков с разной шириной волн по сравнению с однопоточным выполнением.

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

        Рисунок 9. Время выполнения согласованных потоков

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

        Для этого примера выполнение потенциально ускоряется примерно вдвое.

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

        Например, если вы пишете трассировщик лучей, вам может дать преимущество группировка лучей с одинаковым направлением и позицией, потому что они скорее всего будут проходить по одинаковым узлам в BVH. Подробнее см. в [10] и других статьях по теме.

        Стоит также упомянуть, что существуют техники борьбы с расхождением и на аппаратном уровне, например Dynamic Warp Formation[7] и прогнозируемое выполнение для небольших ветвлений.

        Простой компьютерный блог для души)

        Привет ребята. Сегодня мы будем говорить про GPU Speed — я расскажу простыми словами что это. Ну для начала разберем само название, GPU это графический процессор или по-простому видеокарта ваша, кстати расшифровывается как Graphics Processing Unit. Второе слово это Speed и оно означает скорость. Какой вывод? GPU Speed означает скорость видеокарты.

        Но что означает скорость видеокарты? Вот и я подумал.. скорость, как бы такого понятия нет. Есть частота видюхи, то есть графического процессора. И чем выше эта частота, тем соответственно быстрее работает видюха.

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

        Читайте также:  Преимущества mac os перед windows

        На картинке фирменная прога от Asus, это GPU Tweak II. И я так понимаю что прога позволяет переключать режимы видюхи. И вот смотрите, на картинке написано 122%, верно? Что это означает? А означает то, что видюха работает на 22% производительнее чем обычно. То есть некий такой разгончик себе. И справа сразу мы видим температуру, чтобы смотреть как там дела, ведь при разгоне температура повышается все таки.

        То есть первый реальный случай где может быть GPU Speed — это фирменная прога по настройке видюхи, обычно в ней идут всякие режимы, там игровой, офисный, тихий режим, и может еще какие-то. И вроде даже можно создать собственный режим.

        Вот я нашел еще одну картинку, тут все таже прога, но уже 137% стоит:

        И вверху видите выбран режим Gaming Mode, то есть игровой режим.

        GPU Speed 100 — это нормально?

        Значит ребята, в интернете видел сообщения некоторых, они спрашивают GPU Speed 100 это нормально или нет? Ну тут вопрос не совсем ясный мне, да и должен признаться я не особо разбираюсь в видеокартах.. Но есть серьезная причина, по которой я решил написать.

        Значит смотрите, при простое видеокарта также может скидывать частоту как это умеет делать процессор? Я посмотрел в интернете — вроде умеет. Но что это значит, когда видеокарта в простое загружена на все 100 процентов? А тут ребята не все так просто. Я могу ошибаться, но не так много есть программ, которые нагружают именно видеокарту, а не как обычно процессор. То есть если проге нужна мощь, то обычно она берет себе процессор, верно? Но не видеокарту, я конечно не имею ввиду игры.. если игра грузит видюху, то я думаю это нормально как бэ. Но знаете к чему я клоню? Да вот к тому, что может быть это.. майнер. Есть такие вирусы, которые используют мощь видюхи в своих целях. Некоторые это делают нагло и поэтому это сразу заметно, а некоторые используют чучуть только производительности и делают так, чтобы это было незаметно..

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

        В общем если видеокарта загружена на 100 процентов в простое, то первым делом я бы проверил комп на вирусы. Для этого я советую вам использовать утилиту Dr.Web CureIt!, ее скачать можно вот тут (это офф сайт):

        Кстати вот я могу ошибаться.. но смотрите на картинку:

        Видите, там где GPU Speed, то там 100%, а вот там где VRAM Usage, то там 1%. Повторюсь, что я не особо понимаю в видеокартах, но мне кажется что это странная ситуация, когда графический процессор нагружен на все 100%, а вот видеопамять (это VRAM Usage) вообще не используется.. Вот это ситуация как мне кажется подозрительная.

        Fan Speed GPU это что?

        Fan Speed означает скорость вентилятора, это относится к охлаждению. И если в Fan Speed GPU показываются проценты, то это означает на сколько работает система охлаждения видеокарты. Просто могут быть не проценты а RPM — это количество оборотов вентилятора. Вот например прога от AMD Radeon Settings и тут есть такой вот показатель, правда просто Fan Speed, без GPU, в общем смотрите:

        А вот прога снова GPU Tweak II и тут есть Fan Speed и как я понимаю можно регулировать в процентах:

        Вот такие дела ребята, надеюсь что инфа была вам полезна, ну а если что не так, то извините! Удачи вам и пусть у вас все будет хорошо!

        Ссылка на основную публикацию
        Что делать после заправки картриджа canon
        Многие пользователи принтеров Canon после очередной дозаправки картриджей сталкиваются с различными неполадками в работе устройств, в том числе и с...
        Чем открывать jar файлы
        Файл формата JAR открывается специальными программами. Чтобы открыть данный формат, скачайте одну из предложенных программ. Чем открыть файл в формате...
        Чем открываются файлы dwg
        Please try the following: Make sure that the Web site address displayed in the address bar of your browser is...
        Что делать после скачивания драйвера для принтера
        Часто задаваемый вопрос пользователей принтеров – как установить драйвер на принтер или МФУ. Вставьте флешку с драйвером в компьютер, в...
        Adblock detector