Vars in global memory vs. Parameters in kernels

  1. Yes
  2. Yes

However, I would not recommend using a device variable for a kernel parameter. As all threads are likely to read it simultaneously, the read will not be coalesced and the performance of your kernel will suffer a huge hit. Use a constant variable instead, they are efficient when all threads read the same memory location at once. You can initialize a constant variable from the host with cudaMemcpyToSymbol.