Vulkan: Как очереди могут поддерживать разные функции? / Реализация VkQueue

В моем понимании VkPhysicalDevice представляет собой реализацию Vulkan, которую можно было бы представить в виде графического процессора и его драйверов. Мы должны записывать команды с помощью VkCommandBuffers и отправлять их через очереди, чтобы, возможно, выполнить многопоточную работу, которую мы отправляем на GPU. Вот почему я понимаю, что очередей может быть несколько. Я также понимаю, что QueueFamilies группирует очереди в зависимости от функций, которые они могут выполнять (доступные для них расширения, например презентация, а также графические вычисления, передача и т. д.).

Однако, если GPU может работать с графикой, почему очереди не могут этого сделать? Я слышал, что использование очередей с меньшим количеством функций может быть быстрее, но почему? Что такое очередь конкретно? Это связано только с реализацией vulkan? Или это связано с конкретными аппаратными вещами?

Я просто не понимаю, почему существуют очереди с разными функциями, и даже после поиска в документации Vulkan, StackOverflow, vulkan-tutorial и vkguide единственное, что я нашел, это «Очереди в Vulkan — это «порт выполнения» для графических процессоров». , который я не очень понимаю и по которому ничего не могу найти в гугле.

Заранее спасибо за вашу помощь!

"VkPhysicalDevice представляет собой реализацию Vulkan." Нет, это физическое устройство, реальная аппаратная часть. VkDevice представляет собой реализацию Vulkan, связанную с одним (или несколькими) физическими устройствами.

Nicol Bolas 03.04.2022 23:00
khronos.org/registry/vulkan/specs/1.3-extensions/man/html/… В документации сказано: «Физическое устройство обычно представляет собой единую полную реализацию Vulkan», я что-то упустил? Какую аппаратную часть он будет представлять, если нет? Графический процессор? Есть идеи по поводу очередей?
Progz 03.04.2022 23:36

Это не совсем хорошее объяснение физических устройств, поскольку вы можете создать одно логическое устройство из физических устройств несколько (для SLI и т.п.).

Nicol Bolas 03.04.2022 23:40

Я только что изучил это, вот почему здесь «обычно», спасибо! Похоже, вы много знаете о графическом программировании, есть идеи о том, почему существуют очереди с разными функциями?

Progz 03.04.2022 23:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Очередь — это вещь, которая потребляет и выполняет команды, так что каждая очередь (теоретически) выполняется отдельно от любой другой очереди. Вы можете представить себе очередь как рот, а команды — как пищу.

Очереди в семействе очередей обычно выполняют команды, используя для их обработки одно и то же базовое оборудование. Это было бы похоже на существо с несколькими ртами, но все они соединены с одним и тем же пищеварительным трактом. Сколько еды они могут съесть, не зависит от того, сколько еды они могут съесть переваривать. Пищу, съеденную одним ртом, возможно, придется ждать, пока пища, ранее съеденная другим, пройдет через пищеварительный тракт.

Очереди из разных семейств могут иметь (а могут и не иметь) различное базовое аппаратное обеспечение для выполнения. Это было бы похоже на существо с несколькими ртами и несколькими пищеварительными трактами. Если рот ест, этой пище не нужно ждать, пока пища из другого рта переварится.

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

Обратите внимание, что это общие правила. Иногда очереди внутри семейства выполняются на различном оборудовании, а иногда очереди между семействами используют в основном одно и то же оборудование. API и реализации не всегда делают это очевидным, поэтому вам, возможно, придется сравнивать различные обстоятельства.

Спасибо за быстрый ответ! Объяснение об очередях приятное, а насчет специализированного оборудования DMA звучит как ответ на мой вопрос :) Однако в случае с очередью, поддерживающей графические операции, а не вычисления, или наоборот, с чем это связано? Опять специализированное оборудование прямого доступа к памяти? Или это только теоретически и не служит никакой практической цели?

Progz 04.04.2022 00:37

@Progz: "в случае очереди, поддерживающей графические операции и не вычисляющей" Ну, это не разрешено. Если очередь поддерживает графику, вы также можете отправлять в нее вычислительные операции. Что касается того, есть ли какая-либо конкретная цель для очередей только для вычислений, это зависит от конкретного оборудования. Vulkan просто предоставляет способ показать то, что хочет показать реализация. Вы должны выбрать очередь, наиболее специализированную для текущей задачи, если только вы не хотите упростить синхронизацию между различными операциями.

Nicol Bolas 04.04.2022 01:29

Другие вопросы по теме