Skip to content
This repository was archived by the owner on Jan 29, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions .github/workflows/bvt-compatibility.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:

- name: install compilers
run: |
sudo apt install -y gcc-13 g++-13 gcc-14 g++-14 clang-16 clang-17 clang-18 clang-19 libc++-19-dev
sudo apt install -y gcc-13 g++-13 gcc-14 g++-14 clang-16 clang-17 clang-18 clang-19 libc++-17-dev

- name: check compiler versions
run: |
Expand Down Expand Up @@ -50,9 +50,8 @@ jobs:
cmake --build build-clang-17 -j
ctest --test-dir build-clang-17 -j

# Note that libc++ in Clang 19 is not compatible with Clang 16. Therefore, we fallback to libstdc++.
- name: build and run test with clang 16
run: |
cmake -B build-clang-16 -DCMAKE_C_COMPILER=clang-16 -DCMAKE_CXX_COMPILER=clang++-16 -DCMAKE_BUILD_TYPE=Release -DPROXY_BUILD_MODULES=FALSE
cmake -B build-clang-16 -DCMAKE_C_COMPILER=clang-16 -DCMAKE_CXX_COMPILER=clang++-16 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_BUILD_TYPE=Release -DPROXY_BUILD_MODULES=FALSE
cmake --build build-clang-16 -j
ctest --test-dir build-clang-16 -j
8 changes: 4 additions & 4 deletions .github/workflows/bvt-nvhpc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: install NVHPC 24.9
- name: install NVHPC 25.7
run: |
curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list
sudo apt-get update -y
sudo apt-get install -y nvhpc-24-9
sudo apt-get install -y nvhpc-25-7

- name: build and run test with NVHPC 24.9
- name: build and run test with NVHPC 25.7
run: |
PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/24.9/compilers/bin:$PATH; export PATH
PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/25.7/compilers/bin:$PATH; export PATH
cmake -B build -GNinja -DCMAKE_C_COMPILER=nvc -DCMAKE_CXX_COMPILER=nvc++ -DCMAKE_BUILD_TYPE=Release -DPROXY_BUILD_MODULES=FALSE
cmake --build build -j
ctest --test-dir build -j
Expand Down
45 changes: 45 additions & 0 deletions .github/workflows/bvt-oneapi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
on:
workflow_call:

jobs:
bvt-oneapi:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4

- name: install libc++
run: |
sudo apt-get install -y libc++-19-dev libc++abi-19-dev

- name: install intel oneAPI
run: |
sudo wget -qO /etc/apt/trusted.gpg.d/intel-oneapi.asc https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/intel-oneapi.list
sudo apt update
sudo apt install -y intel-oneapi-compiler-dpcpp-cpp
source /opt/intel/oneapi/setvars.sh
echo "PATH=$PATH" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> $GITHUB_ENV

- name: check compiler version
run: |
icpx --version

- name: build and run test with oneapi
run: |
cmake -B build -GNinja -DCMAKE_CXX_COMPILER=icpx -DCMAKE_CXX_STANDARD=23 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-stdlib=libc++"
cmake --build build -j
ctest --test-dir build -j
mkdir build/drop
chmod +x tools/dump_build_env.sh
./tools/dump_build_env.sh icpx build/drop/env-info.json

- name: run benchmarks
run: |
build/benchmarks/msft_proxy_benchmarks --benchmark_min_warmup_time=0.1 --benchmark_min_time=0.1s --benchmark_repetitions=30 --benchmark_enable_random_interleaving=true --benchmark_report_aggregates_only=true --benchmark_format=json > build/drop/benchmarking-results.json

- name: archive benchmarking results
uses: actions/upload-artifact@v4
with:
name: drop-oneapi
path: build/drop/
6 changes: 5 additions & 1 deletion .github/workflows/pipeline-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,18 @@ jobs:
uses: ./.github/workflows/bvt-nvhpc.yml
name: Run BVT with NVHPC

run-bvt-icx:
Comment thread
mingxwa marked this conversation as resolved.
Outdated
uses: ./.github/workflows/bvt-oneapi.yml
name: Run BVT with Intel oneAPI

run-bvt-compatibility:
uses: ./.github/workflows/bvt-compatibility.yml
name: Run BVT for compatibility

report:
uses: ./.github/workflows/bvt-report.yml
name: Generate report
needs: [run-bvt-gcc, run-bvt-clang, run-bvt-msvc, run-bvt-appleclang, run-bvt-nvhpc]
needs: [run-bvt-gcc, run-bvt-clang, run-bvt-msvc, run-bvt-appleclang, run-bvt-nvhpc, run-bvt-icx]

mkdocs:
uses: ./.github/workflows/mkdocs.yml
Expand Down
13 changes: 7 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -234,12 +234,13 @@ The "Proxy" library is a self-contained solution for runtime polymorphism in C++

## <a name="compiler-req">Minimum Requirements for Compilers</a>

| Family | Minimum version | Required flags |
| ---------- | --------------- | -------------- |
| GCC | 13.1 | -std=c++20 |
| Clang | 16.0.0 | -std=c++20 |
| MSVC | 19.31 | /std:c++20 |
| NVIDIA HPC | 24.1 | -std=c++20 |
| Family | Minimum version | Required flags |
| ------------ | --------------- | -------------- |
| GCC | 13.1 | -std=c++20 |
| Clang | 16.0.0 | -std=c++20 |
| MSVC | 19.31 | /std:c++20 |
| NVIDIA HPC | 24.1 | -std=c++20 |
| Intel oneAPI | 2024.0 | -std=c++20 |

## Build and Run Tests with CMake

Expand Down
7 changes: 6 additions & 1 deletion include/proxy/v4/proxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -644,6 +644,8 @@ template <class P>
struct ptr_traits<P> : applicable_traits {};
template <class F>
struct ptr_traits<proxy<F>> : inapplicable_traits {};
template <>
struct ptr_traits<std::nullptr_t> : inapplicable_traits {};

template <class P, class F, std::size_t ActualSize, std::size_t MaxSize>
consteval bool diagnose_proxiable_size_too_large() {
Expand Down Expand Up @@ -1118,7 +1120,10 @@ class proxy PROD_TR_IF_ELIGIBLE
if constexpr (F::relocatability == constraint_level::trivial ||
F::copyability == constraint_level::trivial) {
std::swap(meta_, rhs.meta_);
std::swap(ptr_, rhs.ptr_);
std::byte temp[F::max_size];
std::ranges::uninitialized_copy(ptr_, temp);
Comment thread
mingxwa marked this conversation as resolved.
std::ranges::uninitialized_copy(rhs.ptr_, ptr_);
std::ranges::uninitialized_copy(temp, rhs.ptr_);
} else {
if (meta_.has_value()) {
if (rhs.meta_.has_value()) {
Expand Down
5 changes: 5 additions & 0 deletions tools/report_generator/report-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@
"Description": "NVIDIA HPC on Ubuntu",
"InfoPath": "artifacts/drop-nvhpc/env-info.json",
"BenchmarkingResultsPath": "artifacts/drop-nvhpc/benchmarking-results.json"
},
{
"Description": "Intel oneAPI on Ubuntu",
"InfoPath": "artifacts/drop-oneapi/env-info.json",
"BenchmarkingResultsPath": "artifacts/drop-oneapi/benchmarking-results.json"
}
],
"Metrics": [
Expand Down
Loading