harmonize
An execution framework for GPU with the aims of reducing divergence and inter-warp communication for applications requiring complex processing patterns.
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (11.2%) to scientific vocabulary
Repository
An execution framework for GPU with the aims of reducing divergence and inter-warp communication for applications requiring complex processing patterns.
Basic Info
- Host: GitHub
- Owner: CEMeNT-PSAAP
- License: bsd-3-clause
- Language: C++
- Default Branch: main
- Size: 23.1 MB
Statistics
- Stars: 8
- Watchers: 3
- Forks: 3
- Open Issues: 2
- Releases: 1
Metadata Files
README.md
Harmonize
Harmonize is an execution framework for GPU with the aims of increasing performance and decreasing development burden for applications requiring complex processing patterns. Harmonize is currently available both as a headers-only CUDA/HIP C++ library and as a Python package. In both forms, functionality is exposed as an asynchronous processing framework.
Fundamentals
The system of asynchronous functions that are executed within a given runtime are defined in advance through a program specification. A program specification only represents these systems abstractly, but they may be transformed into an implementation by declaring a program specialization.
Program specifications are defined by application developers, and represent the business logic of what needs to be accomplished in the GPU, whereas the templates (program types) used to transform them into specializations are defined by framework developers. This structure is used because it separates much of the underlying implementation details away from application developers, delegating those concerns to the framework developers. Ideally, with the addition of a program type, transitioning a codebase to this other program could be as little as a one-line refactor:
```
< using MyProgram = EventProgram
using MyProgram = AsyncProgram
; ```
Likewise, as long as the interface between the specification and the program type does not change, program types may be updated without requiring refactors from the application developers.
Why Async?
Asynchronous programming represents a looser contract between program and execution environment. Once a function is called, there is no guarantee of where or when that call is actually evaluated. If the call is lazy, then the evaluation may not happen at all.
This looser contract is useful, because it allows an interface to represent a wide variety of execution strategies without breaking any promises. By representing all program types as different asynchronous runtimes, they can be used interchangeably as long as they fulfill the few promises made by the runtime's interface.
Dependencies
CUDA C++ Dependencies
The C++ framework currently requires the following for CUDA:
- a CUDA compiler (e.g.
nvcc) - the CUDA runtime (host and device)
HIP C++ Dependencies
The C++ framework currently requires the following for ROCM:
- a HIP compiler (e.g.
hipcc) - the ROCM runtime (host and device)
Python Dependencies
Python bindings require:
Non-package Dependencies
- CUDA execution requires the CUDA toolkit, including:
nvcc- CUDA runtime (host and device)
- ROCM execution requires the ROCM 6.0.0 toolkit, including its version of:
hipccclang-offload-bundlerllvm-linkllvm-as- HIP runtime (host and device)
Python Package Dependencies
numpyllvmlite- For CUDA:
numba- For ROCM:
- the AMD fork of
numba
Owner
- Name: CEMeNT
- Login: CEMeNT-PSAAP
- Kind: organization
- Location: Corvallis, Oregon, USA
- Website: https://cement-psaap.github.io
- Repositories: 5
- Profile: https://github.com/CEMeNT-PSAAP
Center for Exascale Monte Carlo Neutron Transport
Citation (CITATION.cff)
# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!
cff-version: 1.2.0
title: 'harmonize'
message: >-
An a-synchronous GPU scheduler for deceasing thread divergence on GPU
type: software
authors:
- name: >-
Center for Exascale Monte Carlo Neutron Transport
(CEMeNT)
website: 'https://cement-psaap.github.io/'
- given-names: Braxton
family-names: Cuneo
email: bcuneo@seattleu.edu
affiliation: Seattle University
orcid: 'https://orcid.org/0000-0002-6493-0990'
- given-names: Joanna Piper
family-names: Morgan
email: morgajoa@oregonstate.edu
affiliation: Oregon State University
orcid: 'https://orcid.org/0000-0003-1379-5431'
identifiers:
- type: doi
value: 10.1145/3626957
description: Divergence Reduction in Monte Carlo Neutron Transport with On-GPU Asynchronous Scheduling
repository-code: 'https://github.com/CEMeNT-PSAAP/harmonize'
abstract: >-
An a-synchronous GPU scheduler for deceasing thread divergence on GPU
keywords:
- gpu
- cuda
- hip
- scheduler
license: BSD-3-Clause
version: 0.0.1
date-released: '2024-04-14'
GitHub Events
Total
- Create event: 3
- Issues event: 3
- Release event: 1
- Watch event: 3
- Issue comment event: 6
- Push event: 4
- Pull request event: 2
- Fork event: 2
Last Year
- Create event: 3
- Issues event: 3
- Release event: 1
- Watch event: 3
- Issue comment event: 6
- Push event: 4
- Pull request event: 2
- Fork event: 2