← Back to team overview

dolfin team mailing list archive

Re: Extending DOLFIN CMake scripts for CUDA interoperability

 

Hi

Just my 2-cents worth. A couple of years ago I was involved in k-3D (
http://www.k-3d.org/) that also used cmake as a build system. I was busy
with a summer of code project that involved using CUDA, and had incorporated
it into the build system.

Unfortunately I'm a little swamped at the moment, and can't take a look at
it myself for at least another month, but maybe there are some clues there?
If it isn't sorted out once I have some more time on my hands (if that ever
happens :) ), then I will gladly take another look.

Regards
--
Evan Lezar

Computational Electromagnetics Group
Department of Electrical and Electronic Engineering
University of Stellenbosch
Stellenbosch
South Africa

www.evanlezar.com

GoogleTalk: evanlezar
Skype: evanlezar


On Mon, Jan 17, 2011 at 7:41 PM, Johan Hake <johan.hake@xxxxxxxxx> 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
>

References