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

WIP Feature Hybrid Parallel and SIMD #824

Merged
merged 129 commits into from
Feb 26, 2020

Conversation

pcarruscag
Copy link
Member

Proposed Changes

I will use this draft PR for the work proposed in #789, the idea is to open small (non draft) PR's along the way for major milestones.

Related Work

#789

PR Checklist

  • I am submitting my contribution to the develop branch.
  • My contribution generates no new compiler warnings (try with the '-Wall -Wextra -Wno-unused-parameter -Wno-empty-body' compiler flags).
  • My contribution is commented and consistent with SU2 style.
  • I have added a test case that demonstrates my contribution, if necessary.

@pcarruscag
Copy link
Member Author

First work item in #789 is:
CSysMatrix lookups and any required parallel pragmas put in place.
That may require adding some stuff to CGeometry so I started by restructuring those files (in #825).

@pcarruscag
Copy link
Member Author

Next work item: Hybrid parallel limiter and gradient calculation This will not involve moving any CSolver files.
I may also do some testing on the element colorings on the structural solver.

@pcarruscag
Copy link
Member Author

The work item from #789 being worked on at the moment is colour-based parallel residual loops (at this point we have hybrid parallel!).
As was done for the FEA solver one numerics instance per thread is required since to use these classes one needs to write data onto them. Similarly we need thread-private copies of the small structures we then write to the residual and Jacobian, these are currently allocated by the solver.
Possible solutions:

  • Allocate local temporaries in each edge loop;
  • The solver allocates an array of these instead of just one for each thread to use;
  • The ownership is transferred into the numerics (as currently done by the FEA classes).

I am going with the third option, the solver will call ComputeResidual as usual but instead of passing in one array and two small matrices, it will get references to the internally (to CNumerics) allocated ones.
As part of this I will restructure the CNumerics family, applying the same cleanups that we have been doing for other classes. No significant code changes are planned.

@pcarruscag
Copy link
Member Author

In the process of making the MG routines OpenMP-friendly, I'll also restructure and clean those files (CIntegration & co).

@pcarruscag pcarruscag merged commit 3e98ddd into develop Feb 26, 2020
@pcarruscag pcarruscag deleted the feature_hybrid_parallel_and_SIMD branch February 26, 2020 15:22
@jblueh jblueh mentioned this pull request Mar 1, 2021
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants