Author Topic: Vulkan Memory Model  (Read 1317 times)

0 Members and 1 Guest are viewing this topic.


  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2257
Vulkan Memory Model
« on: September 14, 2018, 05:57:23 PM »
Some détails about the new memory model introduced with Vulkan 1.1.84.

This week, Vulkan® has become the world’s first graphics API to include a formal memory model for its associated GLSL™ and SPIR-V™ programming languages. This significant announcement has a number of components that come together to significantly boost the robustness of the Vulkan standard for programming correctness and sophisticated compiler optimizations.

Firstly, Khronos® has released a provisional Vulkan Memory Model Specification that includes extensions for Vulkan, SPIR-V, and GLSL that gives Vulkan developers additional control over how their shaders synchronize access to memory in a parallel execution environment. In tandem with the extension specification, Khronos has released memory model extension conformance tests to help shader compilers ensure that they implement the specified memory model synchronization functionality correctly.

The Vulkan memory model is based on the C++ memory model, but adds valuable functionality including scopes, storage classes, and memory availability and visibility operations. Scopes allow synchronization to be limited to threads in close proximity to each other. Storage classes allow synchronization to be limited to specific types of memory. Availability and visibility operations give control over when and how cache maintenance operations are performed in systems with noncoherent cache hierarchies. Each of these capabilities enable an additional level of control compared to the baseline C++ model, which can be exploited to reduce the cost of synchronization and thus increase performance.

- VK_KHR_vulkan_memory_model

- Vulkan has just become the world’s first graphics API with a formal memory model.  So, what is a memory model and why should I care?

- What is the purpose of Vulkan's new extension VK_KHR_vulkan_memory_model?