Skip to content
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

Goals for next version of miniapp #241

Open
prckent opened this issue Jun 4, 2019 · 6 comments
Open

Goals for next version of miniapp #241

prckent opened this issue Jun 4, 2019 · 6 comments
Labels

Comments

@prckent
Copy link
Contributor

prckent commented Jun 4, 2019

Assuming we have learned all we need for the Exascale project from the current version of the miniapp, we need to ask whether we need to make a new version and what the goals should be before making changes that might need to be unwound or simply be effort that does not help ECP.

Requirements, suggestions can be put below. We'll have a discussion on the ECP project but this will be several weeks away due to existing commitments.

@ye-luo
Copy link
Collaborator

ye-luo commented Jun 4, 2019

We wrote some goals initially, https://github.com/QMCPACK/miniqmc/blob/develop/goals.md#general-principles.
I think miniQMC is never a separated project and it serves QMCPACK. If something is taken from QMCPACK, it needs to be studied by miniQMC. If some changes are agreed to be merged on miniQMC, it is meant to be propagate back to QMCPACK.
It is much convenient to test new hardware and software with miniQMC than QMCPACK. This is a recurring need within and beyond ECP projects.

@prckent
Copy link
Contributor Author

prckent commented Jun 4, 2019

The question is not about the existence of the miniapp but what our goals for a v2 might be. Since QMCPACK mainline is going to be rearchitected, perhaps that needs to happen first. Or perhaps we need to try something (still) in the miniapp first. i.e. The assumption I wrote about might not be correct. The aim of this issue is to capture some requests. What we shouldn't do is keep updating the minapp without some broadly agreed on goals in mind.

@lshulen
Copy link

lshulen commented Jun 4, 2019

Something that I would be interested in exploring is the role / scope of refactoring in the miniapp. A lot of the challenges we face concern what happens when our experiments have diverged greatly from the initial mini app. One the one hand, I think this is a great strength of the miniapp idea that we can do these large experiments, but as we see, there has been much consternation figuring out what to do when these experiments are finished.

I don’t know the best way forward, but if we could figure out as smoother “governance” model to handle these larger architectural changes, it would help us with the process for the main application as well.

@PDoakORNL
Copy link
Collaborator

Refactoring implies that you are finding an optimal design through continued development and generalization of code based on the emergent requirements of the code base. If new specializations and design ideas are blocked from ever entering the code then refactoring is a pretty empty exercise, you're just doing incremental rewrites. If you never bother to look for generalizations until the entirety of a new implementation is done its also very difficult.

@ye-luo
Copy link
Collaborator

ye-luo commented Jun 6, 2019

  1. miniQMC is designed to serve QMCPACK. miniQMC needs to reflect QMCPACK algorithms and implementations. v2 is missing Port delayed update algorithms #239 and Need batched evaluation of NLPP #223 algorithms.
  2. New ideas needs to be exercised on separate branches. After sufficient discussion, demonstration and validation, good architectural change may get in miniQMC ahead of QMCPACK. Solid benefit and viability needs to be proven including a smooth transition path to guarantee that QMCPACK will be changed the same way and there is no divergence between QMCPACK and miniQMC eventually.

@PDoakORNL
Copy link
Collaborator

PDoakORNL commented Jun 14, 2019

Goals are statements like the following:

We would like to use miniqmc to come to agreement on how to do the following in QMCPACK:
a. Develop on a Single Source (rather than in execution or repo branches controlled and used by one developer)
b. Fall back to CPU single walker evaluation easily.
c. Support specialization for different algorithms and devices.
d. Improve QMCPACK's design to simplify, clarify and lower the barrier to contributing.

I think you are saying with 1. and 2. of the previous comment:

  1. MiniQMC should be like QMCPACK in every significant detail and share the same architecture.

  2. We will continue to develop in separate branches until... the project leader declares a winner.
    And implying a third:

  3. 1 is always more important than 2.

  4. will raise costs for any idea that refactors or rethinks QMCPACK's design rather than primarily adding code to the imports from QMCPACK.

So if I'm not wrong about what @ye-luo the previous comment means I think these two sets of goals are incompatible. QMCPACK needs to fight its ball of mud design to achieve a.,b.,c.,d. but 1., 2., 3. favor ball of mud.

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

No branches or pull requests

4 participants