dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #20732
Re: Extending DOLFIN CMake scripts for CUDA interoperability
Florian!
I am no CMake expert nor have I ever compiled any CUDA code, but it looks like
something fishy happens when you add your flags to the CUDA code generation
step. Have you set it up correctly? I also get the erronious output from CMake
for the nvcc call.
What CMake command is used to set these flags? It almost seems like the
eronious flags are set automatic? At least I cannot see that you put
PACKAGE_VERSION to the NVCC flags anywhere. If they are automatically set,
maybe there is a way to set them using one of the commands from
FindCUDA.cmake?
Johan
On Friday January 14 2011 12:07:50 Florian Rathgeber wrote:
> Hi,
>
> I'm currently trying to get my DOLFIN GPU code in shape but haven't
> quite succeeded integrating it with DOLFIN's CMake build.
>
> Now the FindCUDA.cmake script tries to propagate host compiler flags and
> defines to the NVIDIA compiler nvcc but apparently messes up so I get a
> compiler invocation looking like this (only the relevant part):
> -DPACKAGE_VERSION= 0.9.9+\" -Ddolfin_gpu_EXPORTS\" -Xcompiler
> ,\"-fPIC\",\"-O2\",\"-g\"
>
> Note the odd quoting and also the space after -DPACKAGE_VERSION=
>
> This causes nvcc to assume this is a target and die:
> nvcc fatal : A single input file is required for a non-link phase when
> an outputfile is specified
>
> The code is at lp:~florian-rathgeber/dolfin/gpu-backend
>
> The relevant section from dolfin/CMakeLists.txt (after all the other
> packages)
> <<<
> # CUDA
> SET(DOLFIN_GPU_LIBRARY "")
> if (DOLFIN_ENABLE_CUDA AND CUDA_FOUND)
> list(APPEND DOLFIN_CXX_DEFINITIONS "-DHAS_CUDA")
> list(APPEND DOLFIN_INCLUDE_DIRECTORIES ${CUDA_INCLUDE_DIRS})
> # Add CUDA sources (*.cu) only if CUDA is enabled
> foreach(DIR ${DOLFIN_DIRS})
> file(GLOB _CU_SOURCES ${DIR}/*.cu)
> list(APPEND CU_SOURCES ${_CU_SOURCES})
> endforeach()
> CUDA_ADD_LIBRARY(dolfin_gpu ${CU_SOURCES} SHARED)
> SET(DOLFIN_GPU_LIBRARY dolfin_gpu)
> list(APPEND DOLFIN_TARGET_LINK_LIBRARIES ${CUDA_LIBRARIES}
> ${DOLFIN_GPU_LIBRARY})
> endif()
>
> # Cusp
> if (DOLFIN_ENABLE_CUSP AND CUSP_FOUND)
> list(APPEND DOLFIN_CXX_DEFINITIONS "-DHAS_CUSP")
> list(APPEND DOLFIN_INCLUDE_DIRECTORIES ${THRUST_INCLUDE_DIRS}
> ${CUSP_INCLUDE_DIRS})
> endif()
> <<<
>
> In CMakeLists.txt I check for the packages like this:
> <<<
> # Check for CUDA
> if (DOLFIN_ENABLE_CUDA)
> find_package(CUDA)
> endif()
>
> # Check for Cusp
> if (DOLFIN_ENABLE_CUSP)
> find_package(Cusp)
> endif()
> <<<
> FindCUDA is the stock script from CMake 2.8, FindCusp is a simple script
> I wrote which lives in cmake/modules
>
> I'd be happy about any hints and tips. Garth, afair you wanted to look
> into this at some point now that the new build system is in place?
>
> Florian
Follow ups
References