Skip to content

Implementing USM memory management in dpCtrl #27

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
diptorupd opened this issue Sep 10, 2020 · 3 comments · Fixed by #34
Closed

Implementing USM memory management in dpCtrl #27

diptorupd opened this issue Sep 10, 2020 · 3 comments · Fixed by #34
Assignees

Comments

@diptorupd
Copy link
Contributor

PyDPPL should expose sycl USM allocators to Python.

What needs to be done?

  1. Add a C-API wrapper into pydppl/backends for the functions that we need from cl::sycl::usm. The C-API will be similar to what we currently have for cl::sycl::queue (ref. https://github.com/IntelPython/pydppl/blob/master/backends/include/dppl_sycl_queue_interface.h).

  2. We need this so that Sycl headers do not have to be directly included in the Cython extension module and we can use MSVC/GCC to build the extension and link to our helper (libDPPLSyclInteface).

  3. Cython extension:

  • We need three classes: MemoryUSMShared, MemoryUSMHost, MemoryUSMDevice. Each class corresponds to the three USM memory allocator.
  • MemoryUSMDevice should not expose __getbuffer__ as Python objects cannot directly use device memory.
  • The __cinit__ of the Memory classes perhaps should provide a way to specify the context in which memory is to be allocated. The other option will be to use dppl.get_current_queue(). Using the current queue always can lead to programmer errors where he/she tries to use a memory allocated on a given context on a device that is not in that context.
  • MemoryUSMxxx should provide a factory function to copy data between incompatible device.
@diptorupd
Copy link
Contributor Author

diptorupd commented Sep 15, 2020

@PokhodenkoSA Look at #30. It introduces changes in how a Sycl queue is stored in dppl. I have added a new class SyclQueue that replaces the previous Py_Capsule. The changes were suggested by @oleksandr-pavlyk to make it easier for us to get the sycl::context from the queue. You can now use SyclQueue::get_sycl_context().get_context_ptr() to get an opaque reference to the context pointer of the queue.

Please use the new SyclQueue class in your memory module. We most probably need a sycl_core.pxd to provide you with the Cython header exposing SyclQueue and SyclContext. I will absolutely not mind if you create that pxd file before I get to it 😉.

@diptorupd
Copy link
Contributor Author

Can we expose the USM fine-grained control functions mem_advise and prefetch in the C API? We might want to use them in Numba.

@PokhodenkoSA
Copy link
Contributor

PokhodenkoSA commented Sep 18, 2020

This methods will belong to SyclQueue and will get MemoryUSM classes. Is it correct?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants