7
votes

I have a large program that uses all the registers I allocated per thread (64) and spills to local memory. I would like to be able to tell the compiler which variables should remain in registers at all cost, and which ones I don't really care about. Does the "register" C/C++ keyword work in nvcc? Is there a different mechanism perhaps?

Thanks!

1

1 Answers

10
votes

You can use register in CUDA C/C++ if you want to. In any context, it is only a hint to the compiler. It may be ignored. There is no stated guarantee that it does anything at all.

I think these statements are pretty much true for most language implementations of register.

I also think it's quite likely that the compiler can do a better job than you can of deciding what should be in registers, and appropriate priority.

The typical CUDA C/C++ mechanisms for controlling register usage work at a higher level, they are:

  1. the -maxrregcount compile switch
  2. the launch bounds directive.