A OpenMP and CUDA version

If no GPU available, the program can still be compiled and run.