-
-
Notifications
You must be signed in to change notification settings - Fork 247
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
[GSoC 2021] Implementing GPU Accelerated Sub-gridding #297
Open
ThenoobMario
wants to merge
30
commits into
gprMax:devel
Choose a base branch
from
ThenoobMario:devel
base: devel
Could not load branches
Branch not found: {{ refName }}
Could not load tags
Nothing to show
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
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
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.
[GSoC 2021] GPU Accelerated Sub-grdding
The purpose of this Pull Request is to explain the code structure and implementation of HSG Sub-gridding Algorithm ported to GPU for improved computation performance. This was done within the time duration of GSoC 2021 along with the help of my mentors.
The implementation of GPU kernels for subgridding closely follows the the Cython implementation of the same algorithm.
In the subgridding implementation there is a difference with how the Grid is calculated. While the Main_grid computation looks at the whole 3D grid simulataneously, the computation for sub-grid happens by cutting the whole grid into 2D slices of arrays.
Code Structure
The CUDA Kernels
The main GPU kernels can be found in the the file
cuda/hsg_field_updates.py
. These kernels are then implemented insubgrids/subgrid_hsg.py
where the main update computations happen.In the CUDA kernels, the main difference between the main GPU FDTD implementation and the GPU Sub-grid FDTD implementation is the way the subscript indexing is calculated for traversal of EM fields.
In the main GPU FDTD implementation (Found in
cuda/field_updates.py
) the indexing is calculated as follows:Where:
Here, we are assuming that the traversal happens in Z-direction first.
This subscript calculation changes for Subgridding as:
Hence the index calculation happens as follows:
Where:
The Abstraction and Structure of Classes
The Subgridding directory contains all the classes and methods related to subgridding. The ones where there have been significant changes/ have importance to the explanation are as shown here
CPUSubGridBase
andCUDASubGridBase
inheritFDTDGrid
andCUDAGrid
respectively, along withSubGridBase
.create_updates()
method is called insolver.py
which integrates the subgrid computations to the already existing gprMax structure.Further Work to be Done