{"id":19863637,"url":"https://github.com/sandialabs/p3a","last_synced_at":"2025-05-02T04:31:17.450Z","repository":{"id":37500772,"uuid":"361829209","full_name":"sandialabs/p3a","owner":"sandialabs","description":"Portably Performant Physical Algebra","archived":false,"fork":false,"pushed_at":"2023-01-25T16:15:16.000Z","size":660,"stargazers_count":12,"open_issues_count":0,"forks_count":4,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-04-06T22:38:39.893Z","etag":null,"topics":["amd-gpu","avx512","cmake","cpp","cpp17","cpp17-library","cuda","gpgpu","hip","hpc","hpc-tools","nvidia-cuda","sandia-national-laboratories","scr-2619","simd","snl-science-libs","vector"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sandialabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-04-26T17:02:49.000Z","updated_at":"2024-02-20T18:16:00.000Z","dependencies_parsed_at":"2023-02-14T09:17:11.375Z","dependency_job_id":null,"html_url":"https://github.com/sandialabs/p3a","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2Fp3a","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2Fp3a/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2Fp3a/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandialabs%2Fp3a/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sandialabs","download_url":"https://codeload.github.com/sandialabs/p3a/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251986801,"owners_count":21675951,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amd-gpu","avx512","cmake","cpp","cpp17","cpp17-library","cuda","gpgpu","hip","hpc","hpc-tools","nvidia-cuda","sandia-national-laboratories","scr-2619","simd","snl-science-libs","vector"],"created_at":"2024-11-12T15:15:34.712Z","updated_at":"2025-05-02T04:31:12.442Z","avatar_url":"https://github.com/sandialabs.png","language":"C++","readme":"Portably Performant Physical Algebra\n====================================\n\nThis is a C++17 library that is meant to support High Performance Computing physics applications.\nP3A is meant primarily to help structured grid applications perform well on Intel CPUs, NVIDIA GPUs, and AMD GPUs, but can be used for other applications and can be extended for other hardware.\nP3A provides several \"layers\" of helpful tools:\n\n2. A `p3a::dynamic_array` class that is very similar to `std::vector`, except for an `ExecutionPolicy` template argument that helps it work on GPUs.\n3. A few algorithms modeled after C++17's parallel algorithms library such as `p3a::for_each`, `p3a::transform_reduce`, and `p3a::copy`. These include non-standard overloads for iterating over 3D grids.\n4. A set of tensor algebra types such as `p3a::symmetric3x3`, `p3a::vector3`, and `p3a::matrix3x3`, with relevant mathematical operator overloads and load/store helpers.\n5. A `p3a::quantity\u003cUnit, T, ...\u003e` scalar type that adds compile-time units checking and conversion\n6. A set of SIMD scalar types `p3a::simd\u003cT, Abi\u003e` that directly call CPU vector intrinsics. Currently this is limited to one for Intel AVX-512 and one that is just a scalar.\n\nThe ideal design for an application using P3A is to implement a physics code as a series of loops which perform outer loop vectorization, while keeping the C++ source code readable by using tensor types with overloaded mathematical operators.\n\nP3A depends on [Kokkos](https://github.com/kokkos/kokkos) for its parallel algorithms,\nand [MPICPP](https://github.com/sandialabs/mpicpp) for its MPI interface.\n\nAt Sandia, P3A is SCR 2619.0\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandialabs%2Fp3a","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsandialabs%2Fp3a","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandialabs%2Fp3a/lists"}