← Back to team overview

dolfin team mailing list archive

Re: Extending DOLFIN CMake scripts for CUDA interoperability

 

On Tue, Jan 18, 2011 at 09:26:06AM +0100, Johannes Ring wrote:
> On Mon, Jan 17, 2011 at 10:00 PM, Johan Hake <johan.hake@xxxxxxxxx> wrote:
> > It looks like changing:
> >
> >  add_definitions(-DPACKAGE_VERSION="${DOLFIN_VERSION}")
> >
> > to
> >
> >  add_definitions(-DPACKAGE_VERSION=${DOLFIN_VERSION})
> >
> > Fixed it. PACKAGE_VERSION got added to the defines in the call to nvcc and the
> > escaped quotes screwed things up.
> >
> > Johannes: Are the quotes needed for something special? It compiles alright
> > without the quotes.
>
> It does not work for me when I remove the quotes:
>
> [ 50%] Building CXX object dolfin/CMakeFiles/dolfin.dir/main/init.cpp.o
> /home/johannr/src/bzr/dolfin/dolfin/main/init.cpp:15:53: error: too
> many decimal points in number
> /home/johannr/src/bzr/dolfin/dolfin/main/init.cpp: In function ‘void
> dolfin::dolfin_init(int, char**)’:
> /home/johannr/src/bzr/dolfin/dolfin/main/init.cpp:15: error: expected
> primary-expression before ‘)’ token
> make[2]: *** [dolfin/CMakeFiles/dolfin.dir/main/init.cpp.o] Error 1
> make[1]: *** [dolfin/CMakeFiles/dolfin.dir/all] Error 2
> make: *** [all] Error 2
>
> However, I don't think the -DPACKAGE_VERSION flag is really needed. It
> only seems to be used in dolfin/common/constants.h for specifying the
> DOLFIN_VERSION. We can use CMake's configure_file command instead to
> set this value. How does that sound?

Good.

--
Anders


> Johannes
>
> > Johan
> >
> > On Monday January 17 2011 09:41:26 Johan Hake wrote:
> >> 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
> >>
> >> _______________________________________________
> >> Mailing list: https://launchpad.net/~dolfin
> >> Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
> >> Unsubscribe : https://launchpad.net/~dolfin
> >> More help   : https://help.launchpad.net/ListHelp
> >
> > _______________________________________________
> > Mailing list: https://launchpad.net/~dolfin
> > Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
> > Unsubscribe : https://launchpad.net/~dolfin
> > More help   : https://help.launchpad.net/ListHelp
> >
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dolfin
> Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dolfin
> More help   : https://help.launchpad.net/ListHelp



Follow ups

References