Autodesk / Autodesk/XLB

Asynchronous semantic for operators and backend

Open
#87 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Python
Stars
507
Forks
85
PR merge metrics
No merged PRs in 30d

Description

This proposal introduces a fully asynchronous semantic for the backend and its operators.

For the Warp and Neon backends, the execution of an operator is asynchronous (the calling function returns before the kernel completes). However, this asynchronous behavior is not fully abstracted by the XLB backend. Currently, synchronization calls are added directly to the code using Warp or Neon mechanisms where needed.

This proposal aims to discuss how to implement a comprehensive synchronization semantic; whether it will be visible to the XLB user depends on the chosen approach.

So far, two cases have been considered:

- **Case A**: Directly abstracting synchronization into the backend or operator API. In this approach, the synchronization abstraction should manage:
- A default stream
- A synchronization method

- **Case B**: Enforcing synchronous behavior directly in any CPU operation that accesses XLB fields. This solution would require:
- A default stream management
- Injecting synchronization into any operation that allows the user to access field data

The proposal aims to address situations where CPU computation may access data still in use by the GPU. For instance, in [this example](https://github.com/Autodesk/XLB/blob/8eb702491fcec4a47c7134c65e92c78a2817db1b/xlb/helper/initializers.py#L5), a buffer could be deleted before the kernel has completed.

In Case A, we would require an explicit XLB sync call, like `xlb.sync()`, at line 23. In Case B, the synchronization would be included directly in the field destructor.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.