How to get correct memory information?

I have a Windows PC with two Quadro RTX8000 and NVLink.

I am developing a program for processing and transcoding video image.

I used nvidia-smi.exe to see how many memory is free while running my cuda program.
It shows strange memory info.
Two RTX8000 has same free/used memory when SLI is enabled.
When SLI is not enabled, it shows different free/used memory…

I wrote my own code to see free memory with NVML ( nvmlDeviceGetMemoryInfo() ).
It shows same result as nvidia-smi…

I wrote a code to print free memory with cudaMemGetInfo().
It shows totally different result…

nvmlDeviceGetMemoryInfo() says two RTX8000 using exactly same memory about 10 GB.
cudaMemGetInfo() says: one RTX8000 using ~9GB, another RTX8000 using ~18GB.
and windows 10 task-manager says one GPU using ~1GB, another GPU using 10GB…

I am very confused…
I have to code more features and need to use more memory…

Which one is correct ??
How to determine correct free memory ??