DirectX 12/Мантия/Вулкан и HSA

С появлением низкоуровневых графических API, таких как DirectX 12, Mantle и Vulkan, мне интересно, как они взаимодействуют (если вообще) с гетерогенной системной архитектурой (HSA)?

Насколько я понимаю, поддержка HSA требует некоторого участия разработчика, но мне любопытно, справляются ли теперь какие-либо низкоуровневые графические API с этим самостоятельно, или бремя полного использования этого преимущества остается на разработчике?

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

Поскольку этот вопрос, вероятно, относится к текущему положению дел, я согласен с таким обзором (хотя информация о будущих дорожных картах была бы неплохой), и я приму ответ, который охватывает только один графический API (поскольку я сомневаюсь многие, если таковые имеются, знакомы со всеми тремя плюс HSA). Кроме того, если я совершенно неправильно понял, как это работает, не стесняйтесь указывать и на это; Я не очень хорошо знаком ни с одной из технологий, но хотел бы знать, как они в настоящее время взаимодействуют.


person Haravikk    schedule 03.11.2015    source источник


Ответы (1)


Глядя на диаграммы на вики-странице, низкоуровневые API ближе к тому, что они называют не- система ХСА.

введите описание изображения здесь

Каждая операция (копирование памяти, запуск задания и т. д.) должна явно выполняться приложением. Хотя приложение может сгруппировать последовательные операции в буфере команд и отправить весь буфер за один раз и продолжить что-то еще, в то время как команды выполняются асинхронно.

Традиционный openGL/DirectX9, с другой стороны, ближе к HSA, скрывая всю диспетчеризацию и копирование. Однако это приводит к накладным расходам при проверке и попытке предсказать, что приложение будет делать дальше, чтобы свести к минимуму задержку. Не говоря уже о том, что очень мало возможностей проверить, завершены ли операции с API, имеющим синхронные корни. Это означает, что если вы вызовете метод, которому нужен результат операции, драйвер (HSA) заблокируется до тех пор, пока эта операция не будет выполнена.

введите описание изображения здесь

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

person ratchet freak    schedule 03.11.2015
comment
Отличный ответ, но как вы думаете, как это относится к другим функциям HSA, например к возможности совместного использования одной и той же памяти между ЦП и iGPU? Могут ли DirectX 12 и т. д. делать то же самое без необходимости копировать такие вещи, как текстуры, которые уже загружены в основную память (на стороне процессора)? - person Haravikk; 07.11.2015
comment
@Haravikk, это зависит от того, как устроено оборудование, встроенные графические процессоры часто не имеют выделенной памяти, поэтому они будут использовать физическую оперативную память. И это может быть доступно как есть процессором. Хотя кэширование означает, что доступы должны быть синхронизированы и защищены. - person ratchet freak; 07.11.2015