繁体   English   中英

如何精确测量 GPU(OpenACC+托管内存)的 memory 使用情况

[英]How to measure precisely the memory usage of the GPU (OpenACC+Managed Memory)

哪个是测量使用 OpenACC 和托管 Memory 的应用程序的 GPU 的 memory 使用的最精确方法? 我使用了两种方法来做到这一点:一种是

nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.85.02    Driver Version: 510.85.02    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla v100     ...  Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   51C    P5    11W /  N/A | 10322MiB /  16160MiB |     65%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      2670      G   ./myapp                           398MiB |
+-----------------------------------------------------------------------------+

关于这里打印的内容,上面的 Memory 用法(10322MiB / 16160MiB)和下面的用法(./myapp 398MiB)有什么区别?

我使用的另一种方法是:

void measure_acc_mem_usage() {
    auto dev_ty = acc_get_device_type();
    auto dev_mem = acc_get_property(0, dev_ty, acc_property_memory);
    auto dev_free_mem = acc_get_property(0, dev_ty, acc_property_free_memory);
    auto mem = dev_mem - dev_free_mem;
    if (mem > max_mem_usage) 
        max_mem_usage = mem;
}

A function 我在程序执行过程中多次调用。

这两种方法似乎都没有报告设备的确切行为(此声明基于似乎发生饱和的时间:当应用程序开始运行非常缓慢时会增加问题大小)并报告非常不同的值(例如,第二种方法表示 2GB 的 memory 使用量,nvidia-smi 说 16GB)

不确定在使用 CUDA 统一 Memory(又名托管)时,您能否获得 memory 使用的精确值。 nvidia-smi 实用程序将仅显示 cudaMalloc 分配的 memory 和 OpenACC 属性 function 将使用 cudaGetMemInfo 这对于 UM 不准确。

Bob 很好地解释了为什么在这里: CUDA 统一 memory 页面在 CPU 中访问但未从 GPU

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM