-
Notifications
You must be signed in to change notification settings - Fork 3
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
Add interfaces compatible with EKO v0.11.x #186
Conversation
It seems you're changing the arguments of the function and thus the API. If this is the case we can't merge it into master without breaking semver compatibility. |
If you wish, I can preserve the arguments, but that is not the only issue with compatibility. In general, now we have a new memory structure, and maybe it is not 100% stable, because we just introduced and we need to do a few things. But the intention is to be as close as possible to the "final" one. This was the first step towards the computation of jets EKOs, and in principle the structure is there to be used. Unfortunately, the way it works is not extremely simple to integrate with PineAPPL, since the way we did until now is to use rank 5 arrays: Line 1794 in a913b6a
but that's the object being too big, so we are splitting by Q2 in a list of rank 4 arrays, and loading them in memory one by one (and unload as soon as it has been used). So, we have two goals:
This PR is trying to do 1., asking immediately for the |
Similar for the |
Consider that we could even fake in pineko for the moment and only do a single PR against PineAPPL the moment our output is more stable (because I expect still further changes) |
This I didn't consider, but it might be reasonable. On one side we are doing something not optimal twice: here, working with a legacy structure, and in Pineko, mocking to keep it. But it's true that in the end we want to go for 2., so we can also go for mocking as a temporary solution, and face the change when we'll be ready for the proper one. @cschwan how would you proceed for 2.? |
At the moment option 1. (in the first comment) seems most attractive to me, mainly because that's what |
For option 2. you basically have to copy what I did in |
Indeed, you have already done most of the job. The practical question is actually more about if we want an explicit dependency on a single function in a given crate, or we just define an interface. In any case, I would build on what you have already done, and I would also stick to just The proposal is to move that part of your code (the data loader in So, let's finalize the interface vs dependency decision, and then I'll start sketching the loader in EKO NNPDF/eko#97 (maybe with the help of @andreab1997, while @felixhekhorn will take care of the completion of split computation NNPDF/eko#138, that is the main bottleneck) |
In terms of memory it would probably be best to lazy load a three-dimensional array of the type used here: pineappl/pineappl/src/evolution.rs Lines 179 to 185 in 4a183b5
This extracts (a slice of the) operators for each non-zero
Storing three-dimensional operators would give you the benefit of throwing away operators that are zero (that's probably important if you have one big EKO where dimensions As an interface we could have two callables:
|
That's an interesting idea, but it is something more with respect to the existing solution. For us, we have to compute rank 4 operators, but they are computed one final scale at a time. That's why it made sense to split by what you call So: the layout how they are produced will be a set of Instead, about the interface vs dependency, maybe there is not really a conflict: I will start providing an interface like The moment I have something, you can have a look and see if it is possible/sensible to implement your interface on top. |
@alecandido sounds good! |
By now, this is definitely outdated. I'd propose to close and wait for NNPDF/eko#260, that would be the implementation of what is being discussed above. Until then, I believe that there is no point to keep discussing this issue. |
The best thing would be to be EKO independent, but this is not completely possible.
Furthermore, with the new structure will also be a not so clever idea, since we want to allow for very big EKOs, to be loaded one Q2 at a time.
So, for the future, we have two options:
For the time being, we just stick to the single operator, but I propose to move the construction out of PineAPPLpy
convolute_eko
evolve