I’ve been trying to use the mersenne twister parallel random number generator in CUDA Fortran, by interfacing to the CUDA C implementation as instructed from PGI insider: Account Login | PGI.
I downloaded the source code, loaded the pgi 10.8 module in linux, and tried to build the code by typing ‘make’ in the terminal. It did fine for a bit, then came up with this error:
/home/theory/phrkaj/Projects/pgi_mc_example/./src/mcCUF_5.F90:146: undefined reference to `randomgpu__entry'
make: *** [mcCUF_5.out] Error 2
It’s probably got something to do with the ISO_C_BINDING, since nvcc adds ‘__entry’ to the end of the function name. Any thoughts on how to fix this?
Thanks in advance
Hi Tom,
It’s probably got something to do with the ISO_C_BINDING, since nvcc adds ‘__entry’ to the end of the function name. Any thoughts on how to fix this?
Most likely. NVIDIA has a tendency to change their symbol names from release to release. Use the ‘nm’ utility on the Mersenne Twister object file (‘nm obj/MersenneTwister_kernel.o’) to see what they’ve called the entry function. Next, change the C binding name to match.
Hope this helps,
Mat
Use the ‘nm’ utility on the Mersenne Twister object file (‘nm obj/MersenneTwister_kernel.o’) to see what they’ve called the entry function. Next, change the C binding name to match.
Thanks a bunch! In the article, it was assumed that ‘__entry’ would be appended to the end of a function name in CUDA. I guess that’s not the case anymore. All I had to do was replace ‘randomgpu__entry’ with ‘randomgpu’ in the mcCUF_5.f90 source code.
Cheers