covfie
A library for storing interpolatable vector fields on co-processors
Science Score: 57.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
Found 1 DOI reference(s) in README -
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (13.1%) to scientific vocabulary
Repository
A library for storing interpolatable vector fields on co-processors
Basic Info
Statistics
- Stars: 16
- Watchers: 2
- Forks: 7
- Open Issues: 0
- Releases: 10
Metadata Files
README.md
covfie
covfie (pronounced coffee) is a co-processor vector field library. covfie consists of two main components; the first is the header-only C++ library, which can be used by scientific applications using CUDA or other programming platforms. The second is a set of benchmarks which can be used to quantify the computational performance of all the different vector field implementations covfie provides. Arguably, the test suite constitutes a third component.
Quick start
All covfie vector fields are stored in the covfie::field type and they are
accessed using the covfie::field_view type. These require a backend type
passed as a template parameters, and their behaviour can be expanded using
transformers. The easiest way to get started using covfie is to use a field
builder backend, which allows you to write data to memory (the following
example is included in the repository as
readme_example_1):
```cpp
using field_t = covfie::field
int main(void) { // Initialize the field as a 10x10 field, then create a view from it. fieldt myfield(covfie::makeparameterpack( fieldt::backendt::configurationt{10ul, 10ul} )); fieldt::viewt myview(my_field);
// Assign f(x, y) = (sin x, cos y)
for (std::size_t x = 0ul; x < 10ul; ++x) {
for (std::size_t y = 0ul; y < 10ul; ++y) {
my_view.at(x, y)[0] = std::sin(static_cast<float>(x));
my_view.at(x, y)[1] = std::cos(static_cast<float>(y));
}
}
// Retrieve the vector value at (2, 3)
field_t::output_t v = my_view.at(2ul, 3ul);
std::cout << "Value at (2, 3) = (" << v[0] << ", " << v[1] << ")"
<< std::endl;
return 0;
} ```
This next example (readme_example_2)
creates a two-dimensional vector field over the natural numbers, stretching 10
indices in each direction. If we want to use real numbers for our vector field,
we can simply add a linear interpolator:
```cpp
using builder_t = covfie::field
using field_t = covfie::field
int main(void) { // Initialize the field as a 10x10 field, then create a view from it. buildert myfield(covfie::makeparameterpack( buildert::backendt::configurationt{10ul, 10ul} )); buildert::viewt myview(my_field);
// Assign f(x, y) = (sin x, cos y)
for (std::size_t x = 0ul; x < 10ul; ++x) {
for (std::size_t y = 0ul; y < 10ul; ++y) {
my_view.at(x, y)[0] = std::sin(static_cast<float>(x));
my_view.at(x, y)[1] = std::cos(static_cast<float>(y));
}
}
field_t new_field(my_field);
field_t::view_t new_view(new_field);
// Retrieve the vector value at (2.31, 3.98)
field_t::output_t v = new_view.at(2.31f, 3.98f);
std::cout << "Value at (2.31, 3.98) = (" << v[0] << ", " << v[1] << ")"
<< std::endl;
return 0;
} ```
covfie types can seem intimidating at first, but they are quite friendly! Also, you only really need to worry about them once, and you can hide them away in a typedef.
Installing dependencies
A full build of covfie requires a few dependencies, including a CUDA compiler, Google Test, and Google Benchmark. The easiest way to install these is to use the included Spack environment:
spack env create covfie spack.yaml
spack -e covfie concretize -f
spack -e covfie install
spack env activate covfie
Citation
If you use covfie in your research, please cite the following paper:
bibtex
@inproceedings{covfie_paper,
author = {Swatman, Stephen Nicholas and Varbanescu, Ana-Lucia and Pimentel, Andy and Salzburger, Andreas and Krasznahorkay, Attila},
title = {Systematically Exploring High-Performance Representations of Vector Fields Through Compile-Time Composition},
year = {2023},
isbn = {9798400700682},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
doi = {10.1145/3578244.3583723},
booktitle = {Proceedings of the 2023 ACM/SPEC International Conference on Performance Engineering},
pages = {55–66},
numpages = {12},
location = {Coimbra, Portugal},
series = {ICPE '23}
}
You may also want to cite the software itself. Unfortunately, academia has not yet progressed to the point where software citations are regarded as highly as paper citations; therefore, we prefer references to the paper (although you may want to cite both). To cite the software, use:
bibtex
@software{covfie_lib,
author = {Swatman, Stephen Nicholas},
license = {MPL-2.0},
title = {{Covfie: A Compositional Vector Field Library}},
url = {https://github.com/acts-project/covfie}
}
Documentation
All documentation pertaining to covfie can be found on ReadTheDocs at the following URL: https://covfie.readthedocs.io/en/latest/
Use cases
Converting the ATLAS magnetic field
Given the ATLAS magnetic field
file
in text format, it can be converted into a covfie format using the
convert_bfield example (this requires COVFIE_BUILD_EXAMPLES to be enabled
at configuration time):
bash
build/examples/core/convert_bfield --input ATLASBField_xyz.txt --output atlas_bfield.cvf
Owner
- Name: Acts
- Login: acts-project
- Kind: organization
- Repositories: 18
- Profile: https://github.com/acts-project
Citation (CITATION.cff)
cff-version: 1.2.0
message: "If you use this software, please cite it using the metadata from this file."
title: "Covfie: A Compositional Vector Field Library"
type: software
authors:
- affiliation: "CERN, University of Amsterdam"
family-names: "Swatman"
given-names: "Stephen Nicholas"
license: MPL-2.0
repository-code: "https://github.com/acts-project/covfie"
identifiers:
- description: "The official covfie paper."
type: doi
value: "10.1145/3578244.3583723"
- description: "The artifact associated with the covfie paper."
type: doi
value: "10.5281/zenodo.7540593"
preferred-citation:
title: "Systematically Exploring High-Performance Representations of Vector Fields Through Compile-Time Composition"
type: conference-paper
authors:
- family-names: "Swatman"
given-names: "Stephen Nicholas"
- family-names: "Varbanescu"
given-names: "Ana-Lucia"
- family-names: "Pimentel"
given-names: "Andy"
- family-names: "Salzburger"
given-names: "Andreas"
- family-names: "Krasznahorkay"
given-names: "Attila"
doi: "10.1145/3578244.3583723"
collection-doi: "10.1145/3578244"
collection-title: "Proceedings of the 2023 ACM/SPEC International Conference on Performance Engineering"
collection-type: proceedings
isbn: "9798400700682"
publisher:
name: "Association for Computing Machinery"
address: "New York, NY, USA"
conference:
name: "ICPE '23: ACM/SPEC International Conference on Performance Engineering"
city: "Coimbra"
country: "Portugal"
date-start: 2023-04-15
date-end: 2023-04-19
year: 2023
month: 4
pages: 12
start: 55
end: 66
GitHub Events
Total
- Create event: 7
- Issues event: 2
- Release event: 6
- Watch event: 3
- Delete event: 2
- Member event: 1
- Issue comment event: 16
- Push event: 49
- Pull request review event: 20
- Pull request review comment event: 17
- Pull request event: 101
- Fork event: 6
Last Year
- Create event: 7
- Issues event: 2
- Release event: 6
- Watch event: 3
- Delete event: 2
- Member event: 1
- Issue comment event: 16
- Push event: 49
- Pull request review event: 20
- Pull request review comment event: 17
- Pull request event: 101
- Fork event: 6
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 1
- Total pull requests: 32
- Average time to close issues: 2 days
- Average time to close pull requests: about 18 hours
- Total issue authors: 1
- Total pull request authors: 5
- Average comments per issue: 0.0
- Average comments per pull request: 0.25
- Merged pull requests: 28
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 1
- Pull requests: 32
- Average time to close issues: 2 days
- Average time to close pull requests: about 18 hours
- Issue authors: 1
- Pull request authors: 5
- Average comments per issue: 0.0
- Average comments per pull request: 0.25
- Merged pull requests: 28
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- robrwg (1)
- stephenswat (1)
- sethrj (1)
Pull Request Authors
- stephenswat (48)
- esseivaju (3)
- sethrj (3)
- SeverinDiederichs (2)
- krasznaa (2)
- giacomd (1)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 1
- Total downloads: unknown
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 5
- Total maintainers: 1
spack.io: covfie
Covfie is a library for compositional descriptions of storage methods for vector fields and other structured multi-dimensional data.
- Homepage: https://github.com/acts-project/covfie
- License: []
-
Latest release: 0.13.0
published 11 months ago
Rankings
Maintainers (1)
Dependencies
- actions/checkout v3 composite
- actions/checkout v2 composite
- breathe *