Accelerate MPI with GPUs
You can find this application in the demos
folder of your Jupyter notebook environment.
- athinput.kh
- plot_output_slice.py
- plot_slice.py
- accl_mpi_with_gpus.ipynb
Many scientific libraries are being modernized or created to take advantage of GPU acceleration. When the code is designed effectively, this code runs much faster with GPUs than it can with CPUs alone, even large multicore CPUs. For many applications, using GPUs is more cost effective than using large multicore CPUs. So, if you run GPU-optimized code on GPU-accelerated hardwared, you can complete calculations faster, saving time and money .
Camber’s platform can run codes using on-demand GPU instances. This tutorial uses the Athena engine to run Athenak, a code that has been written to obtain high performance with GPUs. Here, simulate the Kelvin-Helmholtz instability in 2D and visualize the results.
Build your GPU-run Athena engine
The first step is to set up the Athena instance.
Note the use_gpu
flag when initializing the engine.
from camber.athena import AthenaEngine
!git clone --recursive https://github.com/IAS-Astrophysics/athenak.git
# initialize a single Athena Engine with gpu acceleration
engine = AthenaEngine(engine_size='XSMALL', use_gpu=True, num_engines=1)
Note that this engine uses the XSMALL
engine size. You can increase this size to run on a GPU cluster. For details, refer to Engine Attributes.
Now use the build
method to create an Athena executable that runs the Kelvin-Helmholtz problem. You might need to wait for the GPU instance to be assigned. You can check if the status is pending with engine history
attribute.
# Build AthenaK to run the Kelvin-Helmholtz problem by selecting the "kh" problem generator
engine.build(problem_generator="kh")
# Check the status of jobs run with this engine
engine.history
Once the build finishes, you can run the job with your input file:
# Now use the Athena Engine to run a job with "kh.athinput" input file
engine.run(input_file="kh.athinput")
Read data from cloud storage and process for visualization
# import a custom script for reading and plotting the AthenaK outputs, placing images in the output_images directory
from plot_output_slice import plot_output
!mkdir output_images
plot_output()
from IPython.display import Video
Video("density.mov", width=800, height=800)