{"items":["5f764fd6ac4f570017a157db","5f764fd6ac4f570017a157dc","5f764fd6ac4f570017a157dd"],"styles":{"galleryType":"Columns","groupSize":1,"showArrows":true,"cubeImages":true,"cubeType":"max","cubeRatio":1.7777777777777777,"isVertical":true,"gallerySize":30,"collageAmount":0,"collageDensity":0,"groupTypes":"1","oneRow":false,"imageMargin":25,"galleryMargin":0,"scatter":0,"rotatingScatter":"","chooseBestGroup":true,"smartCrop":false,"hasThumbnails":false,"enableScroll":true,"isGrid":true,"isSlider":false,"isColumns":false,"isSlideshow":false,"cropOnlyFill":false,"fixedColumns":0,"enableInfiniteScroll":true,"isRTL":false,"minItemSize":50,"rotatingGroupTypes":"","rotatingCropRatios":"","columnWidths":"","gallerySliderImageRatio":1.7777777777777777,"numberOfImagesPerRow":3,"numberOfImagesPerCol":1,"groupsPerStrip":0,"borderRadius":0,"boxShadow":0,"gridStyle":0,"mobilePanorama":false,"placeGroupsLtr":true,"viewMode":"preview","thumbnailSpacings":4,"galleryThumbnailsAlignment":"bottom","isMasonry":false,"isAutoSlideshow":false,"slideshowLoop":false,"autoSlideshowInterval":4,"bottomInfoHeight":0,"titlePlacement":["SHOW_ON_THE_RIGHT","SHOW_BELOW"],"galleryTextAlign":"center","scrollSnap":false,"itemClick":"nothing","fullscreen":true,"videoPlay":"hover","scrollAnimation":"NO_EFFECT","slideAnimation":"SCROLL","scrollDirection":0,"scrollDuration":400,"overlayAnimation":"FADE_IN","arrowsPosition":0,"arrowsSize":23,"watermarkOpacity":40,"watermarkSize":40,"useWatermark":true,"watermarkDock":{"top":"auto","left":"auto","right":0,"bottom":0,"transform":"translate3d(0,0,0)"},"loadMoreAmount":"all","defaultShowInfoExpand":1,"allowLinkExpand":true,"expandInfoPosition":0,"allowFullscreenExpand":true,"fullscreenLoop":false,"galleryAlignExpand":"left","addToCartBorderWidth":1,"addToCartButtonText":"","slideshowInfoSize":200,"playButtonForAutoSlideShow":false,"allowSlideshowCounter":false,"hoveringBehaviour":"NEVER_SHOW","thumbnailSize":120,"magicLayoutSeed":1,"imageHoverAnimation":"NO_EFFECT","imagePlacementAnimation":"NO_EFFECT","calculateTextBoxWidthMode":"PERCENT","textBoxHeight":60,"textBoxWidth":200,"textBoxWidthPercent":75,"textImageSpace":10,"textBoxBorderRadius":0,"textBoxBorderWidth":0,"loadMoreButtonText":"","loadMoreButtonBorderWidth":1,"loadMoreButtonBorderRadius":0,"imageInfoType":"ATTACHED_BACKGROUND","itemBorderWidth":0,"itemBorderRadius":0,"itemEnableShadow":false,"itemShadowBlur":20,"itemShadowDirection":135,"itemShadowSize":10,"imageLoadingMode":"BLUR","expandAnimation":"NO_EFFECT","imageQuality":90,"usmToggle":false,"usm_a":0,"usm_r":0,"usm_t":0,"videoSound":false,"videoSpeed":"1","videoLoop":true,"jsonStyleParams":"","gallerySizeType":"px","gallerySizePx":1000,"allowTitle":true,"allowContextMenu":true,"textsHorizontalPadding":-30,"itemBorderColor":{"themeName":"color_12","value":"rgba(191,191,191,0)"},"showVideoPlayButton":true,"galleryLayout":2,"calculateTextBoxHeightMode":"MANUAL","targetItemSize":1000,"selectedLayout":"2|bottom|1|max|true|0|true","layoutsVersion":2,"selectedLayoutV2":2,"isSlideshowFont":true,"externalInfoHeight":60,"externalInfoWidth":0.75},"container":{"width":300,"galleryWidth":325,"galleryHeight":0,"scrollBase":0,"height":null}}

# CEED Code Competition: VT software release

**VT CEED BP Software Release**: the VT Parallel Numerical Algorithms team has released GPU optimized implementations for the Center for Efficient Exascale Discretization (CEED) bake-off competition on github here. The details are described in this report on arXiv.

**CEED Background**: The CEED project is funded by the Department of Energy to develop new numerical simulation tools that can exploit the next generation of leadership compute facilities. Initial goals include adding GPU acceleration to the MFEM modular finite element package and the Nek5000 finite element based flow solver code.

The VT Parallel Numerical Algorithms team has used the standalone mini-app development strategy to fast track the development and assessment of GPU accelerated components for these solvers.

**CEED Bake-off Problems Objective**: The CEED project team defined a set of numbered bake-off problems (BP). The whole CEED BP suite is detailed at the CEED website on this page. Each BP is carefully designed to conduct a feasibility study of a major component of finite element analysis. Each CEED BP is prognostic about the impact of both implementation issues and the architectural shifts that accompany next generation accelerators .

We used the VT NewRiver GPU compute nodes to develop a set OCCA compute kernels for the BP finite element operations (details). These operations include: BP1.0 - multiplication by elemental mass-matrix using an intermediate quadrature rule for integration.

BP3.0 - multiplication by elemental stiffness-matrix using an intermediate quadrature rule for integration.
BP3.5 - multiplication by elemental stiffness-matrix using GLL nodes for integration (as used in the Nek5K code).
**VT CEED BP Software Quickstart**: if you have already installed OCCA then installing/building/running the VT CEED BP codes should be straight forward:

git clone https://github.com/kswirydo/CEED-Ax

**# BP1.0**
cd CEED-Ax/BP10

make

# to perform mass-matrix-vector product on a mesh with 512 hex elements and polynomial degree 10 and tensor-product quadrature of 12^3 nodes per element

./BP10 512 10

**# BP3.0**

cd ../CEED-Ax/BP30

make

# to perform stiffness-matrix-vector product on a mesh with 512 hex elements and polynomial degree 10 and tensor-product quadrature of 12^3 nodes per element

./BP30 512 10

**# BP3.5**

cd ../CEED-Ax/BP35

make

# to perform stiffness-matrix-vector product on a mesh with 512 hex elements and polynomial degree 10 and tensor-product quadrature of 11^3 nodes per element

./BP35 512 10

*Hint*: You may need to adjust the OCCA device/platform/thread model for you specific hardware and system configuration. This can be done by editing the driver cpp files, making again, and rerunning.

**VT CEED BP Software Results**: each benchmark code consists of a family of kernel implementations for each finite-element operation. We intentionally retain the sequence of intermediate kernel code
optimizations to illustrate their relative importance. The optimizations are detailed in the preprint linked below.

In the following figure we show for a range of polynomial degrees the spread of achieved performance measured in TFLOPS/s (i.e. 10^12 floating point operations per second) on an NVIDIA P100 12GB PCI-E GPU for the BP1.0 "mass-matrix-vector product" test case.

The empirical roofline is determined by timing how long it takes to move the same amount of data with device to device transfer using cudaMemcpy. In short, if the performance reaches this roofline then it takes the same total time to evaluate the matrix-vector product as it does to load the element node data, load the geometric factors, and store the result to device memory. We can see in the above figure that up to degree 11 we have in fact been able to find a kernel that achieves very close to this ideal roofline performance.

Narrowing to the degree 13 spectral element we see in the following figure that the difference between the fairly naive kernel #1 and the most optimized #8 kernel delivers an 18x speed up.

The roofline model and the kernel optimization strategies are detailed in the preprint linked below.
**Acknowledgement**: Kasia Swirydowicz was instrumental in the development of many of the kernel optimizations for these bake-off problems and provided the figures for this blog entry.

**Preprint**: the VT CEED BP results are described in this preprint:
"*Acceleration of tensor-product operations for high-order finite element methods*", by Kasia Swirydowicz, Noel Chalmers, Ali Karakus, T. Warburton available on arXiv.

**Project Sponsorship**: this research was
funded in part by the DOE Exascale Computing Project. The activities also benefitted from the generous support from the John K. Costain Faculty Chair in the College of Science at Virginia Tech.