-
Notifications
You must be signed in to change notification settings - Fork 30
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
automatically translate pure python models to C #58
Closed
Conversation
This file contains 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
…n; support ternery if; fix semicolon in expression
Updated to use the beta_approx branch |
As agreed on the call it will be moved to discussions |
Closing this PR and archiving in discussion #559 |
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.
As an exploratory project we created a translator that converts pure python models directly to C, allowing them to run on the GPU. See for example
_cylpy
, the cylinder model in python.TODO: update example to define F(q) rather than I(q)
For now this is only enabled if
py2c = True
is in the model file. The impact on the rest of the code is minimal, so including this shouldn't break anything.Long term it would be nice to have only C models so that we do not need separate code paths for python models and C models. The python model infrastructure has already fallen behind, and doesn't support the changes for jitter or magnetism. Future changes will become increasingly difficult.
On the other hand, updating the translation code to production quality and maintaining it will also require work. It is not extensively tested, and it only supports a small subset of python. It is good enough for fortran-style code, but idiomatic python and numpy code will quickly trip it up.
I will leave it to others to decide if it will be easier to teach the SAS community to write models in C than it will be to teach the community to write models in restricted python AND maintain the restricted python to C converter.
Note that there are several projects that do a better job of translating python to C (nuitka, pypy, cython and numba for example), but I don't know if we can get any of them to produce code that we can run in OpenCL.
apply after beta approx branch