[petsc-dev] Supporting OpenCL matrix assembly
Karl Rupp
rupp at mcs.anl.gov
Tue Sep 24 10:17:16 CDT 2013
Hi Dominic,
>> I think you were referring to the 'Mat' on the device, while I was
>> referring to the plain PETSc Mat. The difficulty for a 'Mat' on the
>> device is a limitation of OpenCL in defining opaque types: It is not
>> possible to have something like
>> typedef struct OpenCLMat {
>> __global int row_indices;
>> __global int col_indices;
>> __global float entries;
>> } PetscMat;
>> and pass this as a single kernel argument.
>> (cf. OpenCL standard or
>> http://stackoverflow.com/questions/17635898/passing-struct-with-pointer-members-to-opencl-kernel-using-pyopencl)
>>
> You could copy that struct to GPU global memory and then pass a pointer
> to that struct to the kernel.
Nope, this is forbidden for buffer handles. From the OpenCL 1.2
standard, section 6.9:
"Arguments to kernel functions that are declared to be a struct or union
do not allow OpenCL objects to be passed as elements of the struct or
union."
To my understanding this is required to enable the OpenCL SDK to
properly translate cl_mem handles (host) to actual device pointers.
Best regards,
Karli
More information about the petsc-dev
mailing list