Discrepancy Between GPU Page Faults and HtoD Transfers caused by page fault in Nsight Systems

Hello NVIDIA Community,

I’m currently using Nsight Systems to profile a CUDA program that utilizes cudaMemPrefetchAsync for user-controlled prefetching of unified memory (UM). During analysis, I observed an strange behavior that I’d like to understand better.
In the profiling results, I noticed a short time interval where:

  1. The timeline shows a GPU page fault (Read type) occurring
  2. However, there is no corresponding HtoD memory transfer in the Unified Memory section during that same period

This raises a few questions:

  1. Why might a GPU page fault not result in a visible HtoD transfer in the unified memory timeline?
  2. What is the exact relationship between GPU Page Fault events and the memory transfers they trigger in unified memory?

I would appreciate any insights into this behavior or suggestions for what might be causing this apparent discrepancy in the profiling results.

Thank you in advance for your help!

@skottapalli to follow up.

Could you please share the report file where you see this discrepancy? It will help me determine if this is a bug or if it has a reasonable explanation. If you do not want to share the report file on the public forum, please DM it to me. Thanks!

Thank you! I have sent you the message and the nsys-rep file.

Circling back here. Spoke to Ellie over DM and pointed out that not every HtoD memory transfer will have the reason as “Page fault”. Because of the use of cudaMemPrefetchAsync API call, the HtoD transfers needed for a GPU page fault were handled with the reason as “User prefetch”.