covfie

A library for storing interpolatable vector fields on co-processors

https://github.com/acts-project/covfie

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
Last synced: 6 months ago · JSON representation ·

Repository

A library for storing interpolatable vector fields on co-processors

Basic Info
  • Host: GitHub
  • Owner: acts-project
  • Language: C++
  • Default Branch: main
  • Homepage:
  • Size: 1.28 MB
Statistics
  • Stars: 16
  • Watchers: 2
  • Forks: 7
  • Open Issues: 0
  • Releases: 10
Created over 4 years ago · Last pushed 7 months ago
Metadata Files
Readme Contributing License Citation

README.md

covfie

Build Test Status Code Check Status Documentation Status MPL-2.0 License GitHub issues GitHub pull requests GitHub commit activity GitHub contributors GitHub last commit

CERN logo       UvA logo       PCS logo   Acts logo

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

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
cuda (1) core (1) refactor (1)
Pull Request Labels
build (17) bug (16) cuda (7) enhancement (7) cicd (6) core (6) tests (5) refactor (3) documentation (3) sycl (1) hip (1) cpu (1)

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.

  • Versions: 5
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent repos count: 0.0%
Stargazers count: 27.7%
Average: 29.2%
Forks count: 30.7%
Dependent packages count: 58.3%
Maintainers (1)
Last synced: 7 months ago

Dependencies

.github/workflows/builds.yml actions
  • actions/checkout v3 composite
.github/workflows/checks.yml actions
  • actions/checkout v2 composite
docs/requirements.txt pypi
  • breathe *