Nvidia-smi and nvmlDeviceGetUtilizationRates do not match

i try to get gpu usage and memory usage in A30

naidia-smi

i use nvmlDeviceGetUtilizationRates in my program, it print
0 GPU Usage:65 Memory Usage:99
1 GPU Usage:78 Memory Usage:100
2 GPU Usage:77 Memory Usage:100
3 GPU Usage:65 Memory Usage:99
4 GPU Usage:100 Memory Usage:100
5 GPU Usage:82 Memory Usage:100
6 GPU Usage:85 Memory Usage:100
7 GPU Usage:100 Memory Usage:100

this is my code
#include
#include <string.h>
#include “nvml.h”

using namespace std;

int main(int argc, char* argv)
{
nvmlReturn_t result0;
unsigned int device_count;
result0 = nvmlInit();

result0 = nvmlDeviceGetCount(&device_count);
if (NVML_SUCCESS != result0)
{
    cout << "Failed to query device count: " << nvmlErrorString(result0);
    return -1;
}

for (int i=0; i<device_count; i++)
{
    nvmlDevice_t device;
    nvmlPciInfo_t pci;
    result0 = nvmlDeviceGetHandleByIndex(i, &device);
    if (NVML_SUCCESS != result0)
    {
        cout << "Failed to get device count: " << nvmlErrorString(result0);
        return -1;
    }

    nvmlUtilization_t utilization;
    result0 = nvmlDeviceGetUtilizationRates(device, &utilization);
    if (NVML_SUCCESS != result0)
    {
        cout << "Failed to get utilization rates: " << nvmlErrorString(result0);
        return -1;
    }

    cout << i << " GPU Usage:" << utilization.gpu << " Memory Usage:" << utilization.memory << endl;
}

return 0;

}

it works in Quadro M4000
Why is there such a situation?