This directory contains a test where several proof-of-prinicple tests are done: 1. An actual routine (VectAdd) is compiled for and run on the GPU. 2. JANA and Hall-D code are linked in a used in the same executable that has a routine that is run on the GPU. 3. Multiple source files are used. One compiled with nvcc and the other with generic g++ and the resulting objects linked in a single executable. 4. A routine in the g++ compiled program calls one in the nvcc compiled program that dispatches it to a GPU. This also shows that the name-mangling is performed by nvcc in a way consistent with g++ since nothing is declared extern "C". In addition, a potential convention is established where: - CUDA kernels (i.e. routines that are to run on the GPU) are named with a "kernel_" prepended to the name. - kernels are all contained in files ending in ".cu" and compiled with nvcc (necessarily). - The ".cu" files also contain a wrapper routine with the same basename as the kernel only "gpu_" is prepended. This convention would make it easy to see which routines are actual kernel routines and which are wrappers. The wrappers also make it easy to expose the GPU enabled routines to the g++ compiled parts so they don't have to use the nvcc compiler.