About GPU selection and logical devices

Hello,
I am working on MS Windows 11
For me, I have three GPUs. One is Intel integrated type. Two are NVidia discrete types

MS Windows knows on which GPU it will create a window, when I call CreateWindowEx API
Actually, MS Windows can use any of three GPUs for displaying (I can drag and move the window from one GPU’s area to other GPU’s area)

So Vulkan should pick that GPU which MS Windows picks, I think

I have tested as below

For me, one of NVidia is the main display (gpu index = 0)
Intel one is the second display (gpu index = 1)
and the other NVidia is not connected to a monitor (but gpu index = 2)

If I pick gpu index = 2 (the one not connected), the Vulkan program generates an access violation error where vkCreateSwapchainKHR is called
but anyway the Vulkan app runs all right after all
I guess, Vulkan has ability to handle this issue and to swap the gpu index to 0 by itself

If I set the gpu index = 0 or 1, everything is just OK

So I think, selecting one of the GPUs by programmer does not have meaning

But Vulkan requires me to choose one gpu (physical device) to create a logical device

I guess, this is not quite right

Shouldn’t a logical device be created for all GPUs attached to system ?

Selecting a gpu by myself does not matter

But two tutorials have different approaches about this

Sascha’s tutorial

Khronos tutorial

Sascha’s one simply picks the first GPU

Khronos tutorial creates a surface using GLFW, first and then using that VkSurfaceKHR object, it picks the first GPU which satisfies that surface format by searching GPU’s queue family properties
(But in case it cannot pick anyone, then it chooses the first GPU)

My questions are:

Shouldn’t the logical device be created for all GPUs without picking one GPU ?

Also, shouldn’t Vulkan have function to pick the GPU, where the windows will be created ?

Conclusively, I want a recommendable algorithm to handle this issue

Thank you