[petsc-dev] Current status: GPUs for PETSc

Lawrence Mitchell lawrence.mitchell at ed.ac.uk
Mon Nov 5 08:17:40 CST 2012

On 05/11/2012 14:10, Matthew Knepley wrote:
>     Type safety is a bit nasty. CUDA allows to deal with plain 'void *',
>     while OpenCL expects cl_mem. This suggests to use something like
>       MatCreateSeqAIJWithCUDAArrays(__),
>       MatCreateSeqAIJWithOpenCLArray__s(),
>     but as I said above, I haven't come to a decision on that yet.
> Let me be more specific. I would not support this. I think it is wrong.
> You should create the Mat in the normal way and then pull out the backend
> storage. This way we have one simple interface for creation and preallocation,
> and eventually we make a nicer FEM interface to cover up the device pointer
> extraction.

So something like:

MatCreate(&m, ...);
MatSetType(m, PETSC_GPU_TYPE);
MatSetPreallocation(m, ...);

// now the device data is allocated

MatSetColumnIndices(m, ...);

// now the sparsity pattern is set up

MatGetHandle(m, &handle);

handle->device_data; // pointer we can pass to external assembly routine




The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.

More information about the petsc-dev mailing list