How does <<<>>> code translated to cudaLaunchKernel?


I wondering how does CUDA kernel code something like <<<>>> translates to the cudaLaunchKernel.
Is there any specific cuda runtime API? or translated during compiling?


It is translated during compiling by nvcc

Thanks, @Robert_Crovella
I have one more follow-up question.

When I pass the device pointer to the kernel with shape <<<>>> as a function argument, the pointer address seems to change when it comes to cudaLaunchKernel.

For instance, I run the kernel with 3 arguments and the third one is the device pointer.
Before the kernel execution, the address where the pointer points is something like 0x3~~~
but inside of cudaLauncKernel, when i print the address of void**args (ex ags[2]) it shows 0x7~~~
It shows different addresses.

++ follow up information
When I access to the non-pointer arguments, I got the right values.

Can you tell me what happened here?

No I’m not able to understand your description. When launching the kernel using cudaLaunchKernel, your arguments are passed using pointer-to-pointer. Its unlikely you also witnessed the pointer-to-pointer version inside device code. Probably a short, complete example that printed out the two values would clear things up.