DirectX 12/Mantle/Vulkan и HSA
С появлением графических API более низкого уровня, таких как DirectX 12, Mantle и Vulkan, мне интересно, как они взаимодействуют (если вообще) с гетерогенной архитектурой системы (HSA)?
Насколько я понимаю, поддержка HSA потребовала некоторого участия разработчика, но мне любопытно, справится ли сейчас какой-либо из низкоуровневых графических API-интерфейсов с этим самостоятельно, или если бремя остается для разработчика, чтобы полностью воспользоваться этим?
HSA особенно интересен для таких функций, как упрощенный обмен данными между системной памятью и видеопамятью, особенно когда они совместно используют одну и ту же физическую RAM.
Так как этот вопрос, вероятно, относится к текущему состоянию дел, я в порядке с таким обзором (хотя информация о будущих дорожных картах была бы хорошей), и я приму ответ, который охватывает только один графический API (так как я сомневаюсь многие, если таковые имеются, люди знакомы со всеми тремя плюс HSA). Также, если я совершенно не понял, как это работает, то не стесняйтесь указывать на это; Я не очень знаком с любой технологией, но хотел бы знать, как они в настоящее время взаимодействуют одинаково.
1 ответ
Глядя на диаграммы на вики-странице, API-интерфейсы низкого уровня ближе к тому, что они называют не-HSA системой.
Каждая операция (копирование памяти, запуск задания,...) должна быть явно отправлена приложением. Хотя приложение может сгруппировать последовательные операции в буфере команд и отправить весь буфер за один раз и продолжить что-то еще, пока команды выполняются асинхронно.
Традиционный openGL/DirectX9, с другой стороны, ближе к HSA, скрывая всю диспетчеризацию и копирование. Однако это приводит к накладным расходам при проверке и попытке предсказать, что приложение будет делать дальше, чтобы минимизировать задержку. Не говоря уже о том, что есть очень мало возможностей проверить, завершены ли операции, если API имеет синхронные корни. Это означает, что если вам случится вызвать метод, которому нужен результат операции, драйвер (HSA) будет блокироваться до тех пор, пока эта операция не будет выполнена.
То, что новые низкоуровневые API-интерфейсы дают больше контроля программисту приложений и перестают скрывать все эти мелочи, на самом деле является главным преимуществом.