В чем цель нового расширения Vulkan VK_KHR_vulkan_memory_model?

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

https://www.khronos.org/blog/vulkan-has-just-become-the-worlds-first-graphics-api-with-a-formal-memory-model.-so-what-is-a-memory -модели-и-почему-должен-я-уход

https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#memory-model

Что именно эти новые расширения пытаются решить точно? Они пытаются решить проблемы синхронизации на уровне языка (например, удалить удаленные мьютексы в коде C++), или это новый и сложный набор функций, чтобы дать вам больше контроля над тем, как GPU имеет дело с синхронизацией внутри?

(Спекулятивный вопрос). Было бы хорошей идеей изучить и включить эту новую модель в общий случай или эта модель применима только к определенным многопоточным шаблонам и потенциально может нанести дополнительный ущерб?

Ответ 1

Большинство разработчиков не обязательно будут подробно знать о модели памяти или использовать расширения. Точно так же, как большинство разработчиков C++ не должны быть знакомы с моделью памяти C++ (и это происходит не только из-за x86, потому что большинству программ ничего не нужно, кроме использования стандартных мьютексов библиотеки соответственно).

Но модель памяти позволяет указать согласованность и синхронизацию памяти Vulkan с гораздо меньшей двусмысленностью, а в некоторых случаях и дополнительной ясностью и согласованностью. По большей части определения на самом деле не менялись: код, который был несовместим с данными, до тех пор, пока не будет недоступен для рассылки данных. Для нескольких разработчиков, выполняющих расширенную или мелкозернистую синхронизацию, дополнительная точность и четкость позволяют им точно знать, как сделать свои программы без гонорара без использования дорогостоящей сверхсильной синхронизации.

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

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

Ответ 2

Помимо всего прочего, это позволяет один и тот же вид мелкозернистых упорядочения памяти гарантий для атомарных операций, которые описаны в C++ здесь. Я бы рискнул сказать, что многие, возможно, даже большинство разработчиков ПК C++ действительно мало знают об этом, потому что архитектура x86 в основном делает излишним упорядочение памяти.

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

Это видео является хорошей презентацией по атомизации и упорядочению, как это применимо к C++.