The original Vulkan synchronization APIs relied on two separate coarse-grained primitives: VkSemaphore and VkFence. Both of these were reusable binary-state objects with slightly different purposes and behavior. VkSemaphore allowed applications to synchronize operations across device queues. VkFence facilitated device to host synchronization. Together, they enabled applications to observe and control the execution of command buffers and other queue commands, but they inherited various limitations of the underlying OS and device mechanisms at the time which made them somewhat difficult to use.
Vulkan is an extremely powerful new-generation graphics and compute API that affords developers considerable flexibility—but many developers are realizing that what works best for desktops may not deliver optimal results on mobile. That’s why Arm Technology has put together the best practices for Vulkan developers on mobile.
Recently I asked the community for beginner-friendly resources on Vulkan, and I compiled a list of them that you can find below. For the beginners reading this, Vulkan is a new graphics API-- in other words, a way to communicate with your GPU and make it do things. It's managed by the Khronos Group, which means it's under multi-company governance - being managed by the industry for the industry. Anyone who wants to do work on GPUs (not restricted to graphics programmers!) should at least have a high level knowledge of what it is.