Release the GIL within the ufuncs where possible#80
Closed
jorisvandenbossche wants to merge 1 commit intopygeos:masterfrom
Closed
Release the GIL within the ufuncs where possible#80jorisvandenbossche wants to merge 1 commit intopygeos:masterfrom
jorisvandenbossche wants to merge 1 commit intopygeos:masterfrom
Conversation
caspervdw
reviewed
Dec 7, 2019
|
|
||
| /* Check if the input is a GeometryObject or Py_None. Returns 0 on error, 1 on success. */ | ||
| char check_geom(GeometryObject *obj) { | ||
| if (!PyObject_IsInstance((PyObject *) obj, (PyObject *) &GeometryType)) { |
Member
There was a problem hiding this comment.
If we would simplify this check to an exact check
if (Py_TYPE(obj) != (PyTypeObject *) GeometryType)
We might be able to do this with the GIL released?
| get_geom_nogil(*(GeometryObject **)ip1, &in1); | ||
| get_geom_nogil(*(GeometryObject **)ip2, &in2); | ||
|
|
||
| if ((in1 == 0) | (in2 == 0)) { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
xref #7
@caspervdw I cleaned up my previous experiment with releasing the GIL (and added handling of None), and pushed it here. This is only doing it for the "YY_d" (eg distance) for testing the approach.
Tested with:
and it doesn't give a noticeable slowdown in a single thread. Testing it with dask with multi-threading, then it gives a speed-up of around 3x on my 4-core laptop:
Now, some things / questions about the approach:
A problem might be that in the meantime, those objects could have changes, if the array gets modified while the ufunc is running.
Since for both approaches, the fact that the array might get modified while the ufunc is running is problematic, I am wondering if we can do something about that? Like making the array non writeable when passing to the ufunc (but, how does that work with slices and views? How does that work if the same array is passed to multiple ufuncs? ..)