← Back to team overview

dolfin team mailing list archive

Re: Extending DOLFIN CMake scripts for CUDA interoperability

 

Florian!

Out of curiosity, are you planing to implement GPU assembly too? To me it 
looked like your code "only" exploited solve on the GPU.

I guess GPU assemble is even more parallelizable than the solving process. At 
least if you settle with gathering the elemement matrices in parallel and then 
fanning them out in some sort of serial operation. In this way you miss the 
possibility to solve on the GPU, which I guess you are exploiting.

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