Supported macro definitions What are official macros that we can use?

If you dig into header files that get included when you type
#include <cuda_runtime.h>
or if (I assume) you compile a .cu file, you will find one particular file:
host_defines.h

which defines the macros described in the Programming Guide, for example:

align(n)
noinline
restrict
forceinline

Although they are described in the Programming Guide mainly as a tool to change the behaviour of your device code, they will also accordingly influence your host code.

However, there are more macros defined, e.g.

no_return
thread

… that are never mentioned in the Programming Guide or any other CUDA-related pdf file included with the CUDA 3.1 installer.

My question is:

  • Can they somehow influence the GPU code generation?
  • Are we permitted to use them for host code without any fear that they will dissapear in some future version of nvcc?

If you dig into header files that get included when you type
#include <cuda_runtime.h>
or if (I assume) you compile a .cu file, you will find one particular file:
host_defines.h

which defines the macros described in the Programming Guide, for example:

align(n)
noinline
restrict
forceinline

Although they are described in the Programming Guide mainly as a tool to change the behaviour of your device code, they will also accordingly influence your host code.

However, there are more macros defined, e.g.

no_return
thread

… that are never mentioned in the Programming Guide or any other CUDA-related pdf file included with the CUDA 3.1 installer.

My question is:

  • Can they somehow influence the GPU code generation?
  • Are we permitted to use them for host code without any fear that they will dissapear in some future version of nvcc?