Hi,

>> > Why would we want this? The packages themselves (CUDA/ViennaCL) only
expose
memory using these specific types. What use is it to wrap these up in
a void * if you
just have to caste back down to use them. Isn't it better to maintain
type-specific, and
type safe, interfaces for this stuff?

The biggest problem I faced was that there was no way to access device
memory using petsc4py - since there is no equivalent for
VecCUSPGetArray. So returning a raw pointer may not be very helpful
for C++/CUSP users (they already have a nice way to access device
memory) but it would definitely make things a lot easier for Python users.

To me it sounds like something that should be dealt with in the library
that does the python bindings, not in PETSc itself. (...)

Unfortunately, this is not so easy: If the Python wrapper has to take care of such a conversion, then it needs to use the *exactly same build environment* as PETSc. The reason is that the CUSP and ViennaCL types are C++ beasts, not having a defined ABI, so one can run into all sorts of hard-to-debug problems when finally linking libpetsc.so with the Python wrapper. If, however, PETSc provides these low-level memory buffers, the Python wrapper can attach to a well-defined ABI.

Best regards,
Karli

Reply via email to