I have read the article Exploring the New Features of CUDA 11.3.
And I am very interested in this new feature : cuGetProcAddress, this is the description of the API :
CUDA 11.3 also introduces a new driver and runtime API to query memory addresses for driver API functions. Previously, there was no direct way to obtain function pointers to the CUDA driver symbols. To do so, you had to call into
GetProcAddress. This feature implements a new driver API,
cuGetProcAddress, and the corresponding new runtime API
After read this description, I have some questions.
First, before the introduce of cuGetProcAddress, we can only find CUDA driver symbols using dlopen, dlysm, or GetProcAddress, so it it means libcuda.so is dynamically linked to the executable?
I found out that, when the running the executable compiled with CUDA 11.3(or 11.4), the program will call cuGetProcAddress. Why the program call cuGetProcAddress? What is the reason of this behavior? And why did I know the program would call cuGetProcAddress since I use LD_DEBUG=symbols to trace the symbol lookup, and it shows :
1652407: symbol=cuGetProcAddress; lookup in file=/usr/lib/libcuda.so.1 
Here are my questions.