Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
6d0f8db
Remove hardcoded batch size from kernel execution
LinusJungemann Feb 23, 2024
ddb376f
Implement setBatchSize for complete Stack
LinusJungemann Feb 23, 2024
aec895b
Remove RingBuffer from Synchronous Inference and add full batch mapping
LinusJungemann Feb 28, 2024
2e67f97
Deduplicate batchsize in basedriver & fix unittests
LinusJungemann Feb 29, 2024
407234a
Fix integrationtests
LinusJungemann Feb 29, 2024
5aba44b
Change input kernel code to run concurrrently to output kernel code
LinusJungemann Mar 1, 2024
c072653
Optimize inference of lower batch sizes
LinusJungemann Mar 6, 2024
9996054
Increase packing performance
LinusJungemann Mar 7, 2024
5dafa7b
Further optimize OpenMP
LinusJungemann Mar 7, 2024
47d5eda
Optimize Utils
LinusJungemann Mar 8, 2024
1c95f78
Some small changes
LinusJungemann Mar 8, 2024
122f92a
Merge pull request #8 from eki-project/f-BackendBatchSupport
LinusJungemann Mar 14, 2024
a110bef
Add example data
LinusJungemann Mar 22, 2024
fa226bc
Small Amounts of cleanup
LinusJungemann Mar 25, 2024
f249cf3
Merge branch 'f-BackendBatchSupport' of github.com:eki-project/finn-c…
LinusJungemann Mar 25, 2024
6bace34
Change Driver to run without XRT managed kernels
LinusJungemann Mar 26, 2024
a20748e
Add more efficient version of execute method
LinusJungemann Mar 26, 2024
b8b1d5b
Hotfix FPGA bricking
LinusJungemann Mar 27, 2024
d8399bb
Simplify inference interface to speed up inference
LinusJungemann Mar 28, 2024
a07dd3a
Merge changes
LinusJungemann Mar 28, 2024
70301ff
Update unittest
LinusJungemann Mar 28, 2024
ff76adb
Simplify code
LinusJungemann Mar 28, 2024
c6eec6a
Update CMake
LinusJungemann Apr 9, 2024
baa3bdb
Merge branch 'f-BackendBatchSupport' into dev
LinusJungemann Apr 9, 2024
4c7f1d4
Fix Release Build CMakeLists
LinusJungemann Apr 30, 2024
7b29083
Fix wrong old variable names in CMake
LinusJungemann Apr 30, 2024
3c1fc7f
Fix formatting
LinusJungemann Apr 30, 2024
3ba0258
Change format target
LinusJungemann Apr 30, 2024
b99b039
Add changes to paper version
LinusJungemann Aug 29, 2024
0c1f365
Add final paper changes
LinusJungemann Oct 9, 2024
c22f785
Add basic host mem functionality
LinusJungemann Oct 9, 2024
6cad619
Add switch for Host Memory Access and fix unittests for User Managed …
LinusJungemann Oct 9, 2024
664addb
Merge pull request #11 from eki-project/f-hostMemoryAccess
LinusJungemann Oct 10, 2024
763f009
Revert timing changes for paper
LinusJungemann Mar 14, 2025
1675b4d
Formatting changes
LinusJungemann Mar 14, 2025
399be9a
Remove unneccesary benchmark
LinusJungemann Mar 14, 2025
1c1b4ef
Small changes
LinusJungemann Mar 14, 2025
77fc26a
Clean up and update dependencies
LinusJungemann Mar 18, 2025
e9a07c4
Merge dev into paperVersion
LinusJungemann Mar 18, 2025
c0d693b
Merge
LinusJungemann Mar 18, 2025
d8bc335
Fix setting of Host Mem Var and update cppcheck config
LinusJungemann Mar 18, 2025
323dfab
Merge pull request #12 from eki-project/paperVersion
LinusJungemann Mar 18, 2025
8698773
Update CI definition
LinusJungemann Mar 19, 2025
09aced6
Fix typo in CI
LinusJungemann Mar 19, 2025
0d80dc7
Remove hardcoded path from examples
LinusJungemann Mar 19, 2025
1f8e6e4
Fix linting for json files
LinusJungemann Mar 19, 2025
5fa468c
Merge pull request #14 from eki-project/paperVersion
LinusJungemann Mar 20, 2025
9164bb7
Expand integrationTests
LinusJungemann Mar 20, 2025
23aa11d
Update FPGA PCIe signatures
LinusJungemann Mar 21, 2025
040d7aa
Increase timelimits of jobs
LinusJungemann Mar 21, 2025
2b4dbae
Switch CI partition to HACC for testing
LinusJungemann Mar 21, 2025
e335ea4
Bump Graphviz version
LinusJungemann Mar 21, 2025
c24aa19
Optimize CI
LinusJungemann Mar 21, 2025
1286577
Fix integrationtest path
LinusJungemann Mar 21, 2025
d2d1269
Update CI and add performance benchmark
LinusJungemann Mar 21, 2025
fb6d843
Fix paths
LinusJungemann Mar 21, 2025
5046070
Change logger and add exptected performance results to synchronous in…
LinusJungemann Mar 21, 2025
a18a91f
Update expected results
LinusJungemann Mar 24, 2025
04ea60a
Add missing path change
LinusJungemann Mar 24, 2025
0b76447
Add regression tests
LinusJungemann Mar 25, 2025
2c34f20
Add test condition to regression test
LinusJungemann Mar 25, 2025
8b5a95a
Fix broken bash script in CI
LinusJungemann Mar 25, 2025
fe58723
Fix broken bash script in CI
LinusJungemann Mar 25, 2025
f3c41f7
Update dependencies in CI pipeline
LinusJungemann Mar 25, 2025
be59622
Fix missing boost lib
LinusJungemann Mar 26, 2025
15d89c3
Fix missing libs
LinusJungemann Mar 26, 2025
1f3839f
Change number of processors to be correct and simplify regression tests
LinusJungemann Mar 26, 2025
54375c6
Fix typo in ci
LinusJungemann Mar 26, 2025
3bf7d90
Fix floating point comparison
LinusJungemann Mar 26, 2025
deeb89a
Add debug print to CI
LinusJungemann Mar 26, 2025
aebb292
Add debug print to CI
LinusJungemann Mar 26, 2025
f492bda
Filter colored output
LinusJungemann Mar 26, 2025
6eff9e7
Filter colored output
LinusJungemann Mar 26, 2025
51129a1
Update .gitlab-ci.yml
LinusJungemann Mar 27, 2025
acb3970
Update .gitlab-ci.yml
LinusJungemann Mar 27, 2025
7245fc4
Update .gitlab-ci.yml
LinusJungemann Mar 27, 2025
7900921
Merge pull request #15 from eki-project/f-integrationTests
LinusJungemann Mar 27, 2025
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
3 changes: 3 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,6 @@ SpacesInContainerLiterals: 'false'
SpacesInParentheses: 'false'
SpacesInSquareBrackets: 'false'
TabWidth: '4'
---
Language: Json
BasedOnStyle: llvm
215 changes: 142 additions & 73 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -1,105 +1,134 @@
stages:
- prepare
- build
- test

workflow:
rules:
# Run pipeline for GitHub PRs to dev (does not support PRs from forks)
- if: $CI_PIPELINE_SOURCE == "external_pull_request_event" && $CI_EXTERNAL_PULL_REQUEST_TARGET_BRANCH_NAME == "dev"
- if: $CI_PIPELINE_SOURCE == "external_pull_request_event" && $CI_EXTERNAL_PULL_REQUEST_TARGET_BRANCH_NAME == "main"
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_REF_PROTECTED == "true"
# Run pipeline if manually triggered via API or web GUI
- if: $CI_PIPELINE_SOURCE == "api"
- if: $CI_PIPELINE_SOURCE == "web"

.load-modules:
before_script:
- ml vis/Graphviz/8.1.0-GCCcore-12.3.0 fpga xilinx/xrt/2.16 devel/Doxygen/1.9.7-GCCcore-12.3.0 compiler/GCC/12.3.0 devel/CMake/3.26.3-GCCcore-12.3.0

build-dependencies:
stage: build
id_tokens:
CI_JOB_JWT:
aud: https://git.uni-paderborn.de
stage: prepare
variables:
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 1:00:00 -N 1 -n 1 --cpus-per-task=128"
#SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 2:00:00 -N 1 -n 1 --cpus-per-task=128"
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p hacc -t 2:00:00"
extends: .load-modules
script:
- ml fpga
- ml xilinx/xrt/2.14
- ml devel/Doxygen/1.9.5-GCCcore-12.2.0
- ml compiler/GCC/12.2.0
- ml devel/CMake/3.24.3-GCCcore-12.2.0
- ./buildDependencies.sh
artifacts:
paths:
- "deps/"
expire_in: 1 week
only:
refs:
- main
- dev

build-job:
build-unittests:
id_tokens:
CI_JOB_JWT:
aud: https://git.uni-paderborn.de
stage: build
needs:
- build-dependencies
variables:
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 1:00:00 -N 1 -n 1 --cpus-per-task=128"
#SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 2:00:00 -N 1 -n 1 --cpus-per-task=128"
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p hacc -t 2:00:00"
extends: .load-modules
script:
- ml vis/Graphviz/2.50.0-GCCcore-11.2.0
- ml fpga
- ml xilinx/xrt/2.14
- ml devel/Doxygen/1.9.5-GCCcore-12.2.0
- ml compiler/GCC/12.2.0
- ml devel/CMake/3.24.3-GCCcore-12.2.0
- mkdir build && cd build
- cmake -DCMAKE_BUILD_TYPE=Release ..
- make -j $procs
- cmake -DCMAKE_BUILD_TYPE=Release -DFINN_BUILD_DOC=OFF -DFINN_ENABLE_SANITIZERS=ON ..
- make -j $(nproc)
artifacts:
paths:
- "build/"
expire_in: 1 week
only:
refs:
- main
- dev

build-integrationtests:
id_tokens:
CI_JOB_JWT:
aud: https://git.uni-paderborn.de
stage: build
needs:
- build-dependencies
variables:
#SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 2:00:00 -N 1 -n 1 --cpus-per-task=128"
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p hacc -t 2:00:00"
extends: .load-modules
script:
- mkdir build-host-mem && cd build-host-mem
- cmake -DCMAKE_BUILD_TYPE=Release -DFINN_BUILD_DOC=OFF -DFINN_ENABLE_SANITIZERS=ON ..
- make Integrationtests -j $(nproc)
- cd ..
- mkdir build-no-host-mem && cd build-no-host-mem
- cmake -DCMAKE_BUILD_TYPE=Release -DFINN_USE_HOST_MEM=OFF -DFINN_BUILD_DOC=OFF -DFINN_ENABLE_SANITIZERS=ON ..
- make Integrationtests -j $(nproc)
artifacts:
paths:
- "build-host-mem/"
- "build-no-host-mem/"
expire_in: 1 week

build-regressiontests:
id_tokens:
CI_JOB_JWT:
aud: https://git.uni-paderborn.de
stage: build
needs:
- build-dependencies
variables:
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 1:00:00 -N 1 -n 1 --cpus-per-task=128"
#SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 2:00:00 -N 1 -n 1 --cpus-per-task=128"
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p hacc -t 2:00:00"
extends: .load-modules
script:
- ml vis/Graphviz/2.50.0-GCCcore-11.2.0
- ml fpga
- ml xilinx/xrt/2.14
- ml devel/Doxygen/1.9.5-GCCcore-12.2.0
- ml compiler/GCC/12.2.0
- ml devel/CMake/3.24.3-GCCcore-12.2.0
- mkdir build && cd build
- cmake -DCMAKE_BUILD_TYPE=Release ..
- make Integrationtests -j $procs
- cmake -DCMAKE_BUILD_TYPE=Release -DFINN_BUILD_DOC=OFF -DFINN_ENABLE_SANITIZERS=OFF ..
- make -j $(nproc)
artifacts:
paths:
- "build/"
expire_in: 1 week
only:
refs:
- main
- dev

lint:
stage: test
id_tokens:
CI_JOB_JWT:
aud: https://git.uni-paderborn.de
stage: prepare
variables:
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 0:30:00 -N 1 -n 1 --cpus-per-task=2 --mem-per-cpu=2G"
#SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 0:30:00 -N 1 -n 1 --cpus-per-task=2 --mem-per-cpu=2G"
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p hacc -t 2:00:00"
script:
- ml lang
- ml Python/3.10.4-GCCcore-11.3.0
- command -v clang-format >/dev/null 2>&1 || pip3 install --user clang-format
- find ./src \( -name \*.cpp -o -name \*.h -o -name \*.hpp \) -print0 | xargs -0 -n 1 /pc2/users/e/ekiappci/.local/bin/clang-format -style=file --Werror -n --verbose
- find ./unittests \( -name \*.cpp -o -name \*.h -o -name \*.hpp \) -print0 | xargs -0 -n 1 /pc2/users/e/ekiappci/.local/bin/clang-format -style=file --Werror -n --verbose
- find ./benchmarks \( -name \*.cpp -o -name \*.h -o -name \*.hpp \) -print0 | xargs -0 -n 1 /pc2/users/e/ekiappci/.local/bin/clang-format -style=file --Werror -n --verbose
only:
refs:
- main
- dev

run-unittests:
id_tokens:
CI_JOB_JWT:
aud: https://git.uni-paderborn.de
stage: test
dependencies:
- build-job
needs:
- build-unittests
- build-dependencies
variables:
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 0:30:00 -N 1 -n 1 --cpus-per-task=2 --mem-per-cpu=2G"
#SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 0:30:00 -N 1 -n 1 --cpus-per-task=2 --mem-per-cpu=2G"
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p hacc -t 2:00:00"
extends: .load-modules
script:
- ml fpga
- ml xilinx/xrt/2.14
- ml compiler/GCC/12.2.0
- ml devel/CMake/3.24.3-GCCcore-12.2.0
- export LD_LIBRARY_PATH="$(pwd)/deps/finn_boost/stage/lib/boost/:$LD_LIBRARY_PATH"
- cd build
- ctest --output-on-failure --output-junit ctest-results.xml
artifacts:
Expand All @@ -108,36 +137,76 @@ run-unittests:
expire_in: 1 week
reports:
junit: build/ctest-results.xml
only:
refs:
- main
- dev


run-integrationtests:
id_tokens:
CI_JOB_JWT:
aud: https://git.uni-paderborn.de
stage: test
dependencies:
needs:
- build-integrationtests
- build-dependencies
variables:
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p fpga -t 0:30:00 --constraint=xilinx_u280_xrt2.14"
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p hacc -t 0:30:00"
extends: .load-modules
script:
- ml fpga
- ml xilinx/xrt/2.14
- ml compiler/GCC/12.2.0
- ml devel/CMake/3.24.3-GCCcore-12.2.0
- cp example_networks/identity_net/* build/integrationtest
- cd build/integrationtest
- xbutil reset -d 0000:a1:00.1
- export LD_LIBRARY_PATH="$(pwd)/deps/finn_boost/stage/lib/boost/:$LD_LIBRARY_PATH"
# Reset FPGAs and setup Host Memory Access
- ml xilinx/u55c/u55c_gen3x16_xdma_3_202210_1
- xbutil reset -d 0000:c1:00.1
- xbutil reset -d 0000:81:00.1
- xbutil reset -d 0000:01:00.1
- sudo /opt/software/FPGA/scripts/u280/host_memory/enable_hostmem_single_fpga.sh 0000:c1:00.1
- /opt/software/FPGA/scripts/u280/host_memory/verify_single_fpga.sh 0000:c1:00.1
- sudo /opt/software/FPGA/scripts/u280/host_memory/enable_hostmem_single_fpga.sh 0000:81:00.1
- /opt/software/FPGA/scripts/u280/host_memory/verify_single_fpga.sh 0000:81:00.1

- cd build-host-mem/integrationtest
# Test Synchronous Inference with Host memory
- cp ../../example_networks/jet-structure-classification-with-host-mem/* .
- ./SyncInference
# - xbutil reset -d 0000:a1:00.1
# - xbutil reset -d 0000:81:00.1
# - xbutil reset -d 0000:01:00.1
# - ./AsyncInference
only:
refs:
- main
- dev

# Reset FPGAs again
- xbutil reset -d 0000:c1:00.1
- xbutil reset -d 0000:81:00.1

# Test Synchronous Inference without Host memory
- cd ../../build-no-host-mem/integrationtest
- cp ../../example_networks/jet-structure-classification-without-host-mem/* .
- ./SyncInference

# TODO: Run regression tests + asynchronous inference

run-regressiontests:
id_tokens:
CI_JOB_JWT:
aud: https://git.uni-paderborn.de
stage: test
needs:
- build-regressiontests
- build-dependencies
variables:
#SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p normal -t 0:30:00 -N 1 -n 1 --cpus-per-task=2 --mem-per-cpu=2G"
SCHEDULER_PARAMETERS: "-A hpc-prf-ekiapp -p hacc -t 0:30:00"
extends: .load-modules
script:
- export LD_LIBRARY_PATH="$(pwd)/deps/finn_boost/stage/lib/boost/:$LD_LIBRARY_PATH"
# Reset FPGAs and setup Host Memory Access
- ml xilinx/u55c/u55c_gen3x16_xdma_3_202210_1
- xbutil reset -d 0000:c1:00.1
- xbutil reset -d 0000:81:00.1
- sudo /opt/software/FPGA/scripts/u280/host_memory/enable_hostmem_single_fpga.sh 0000:c1:00.1
- /opt/software/FPGA/scripts/u280/host_memory/verify_single_fpga.sh 0000:c1:00.1
- sudo /opt/software/FPGA/scripts/u280/host_memory/enable_hostmem_single_fpga.sh 0000:81:00.1
- /opt/software/FPGA/scripts/u280/host_memory/verify_single_fpga.sh 0000:81:00.1

- cd build/benchmarks
- cp ../../example_networks/jet-structure-classification-with-host-mem/* .
- ../_deps/googlebenchmark-src/tools/compare.py -a -d results.json benchmarks ../../benchmarks/expectedPerformance.json ./SynchronousInferenceBenchmark | tee benchmark_output.txt
# Extract the OVERALL_GEOMEAN p-value and check if it exceeds the threshold
- THRESHOLD=0.05
- GEOMEAN=$(grep "OVERALL_GEOMEAN" benchmark_output.txt)
- if [[ -z "$GEOMEAN" ]]; then exit 1;fi
- VALUE=$(echo "$GEOMEAN" | awk '{print $3}' | sed 's/\x1B\[[0-9;]\{1,\}[A-Za-z]//g')
- if (( $(echo "$VALUE > $THRESHOLD" | bc -l) )); then exit 1;fi

Loading