diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ebc9432..0bde7632 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,12 @@ jobs: build-linux: strategy: matrix: - build_type: [DEBUG, RELEASE] + include: + - build_type: DEBUG + - build_type: RELEASE + stats: false + - build_type: RELEASE + stats: true runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -34,7 +39,10 @@ jobs: -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ - -DOPENCV_PATH=3rdparty/opencv/build + -DOPENCV_PATH=3rdparty/opencv/build \ + ${{ matrix.stats && '-DENABLE_STATISTIC_TENSORS=ON' || '' }} \ + ${{ matrix.stats && '-DENABLE_STATISTIC_TIME=ON' || '' }} \ + ${{ matrix.stats && '-DENABLE_STATISTIC_WEIGHTS=ON' || '' }} cmake --build build --parallel env: CTEST_OUTPUT_ON_FAILURE: 1 @@ -48,7 +56,7 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@v4 with: - name: mnist-${{ matrix.build_type }} + name: mnist-${{ matrix.build_type }}${{ matrix.stats && '-stats' || '' }} path: | build/bin/ACC_MNIST* build/bin/opencv_libs/* @@ -83,7 +91,7 @@ jobs: -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_C_COMPILER=clang \ - -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ + -DCMAKE_CXX_COMPILER=clang++ cmake --build build --parallel - name: Test run: cmake --build build -t test diff --git a/include/layers/ConcatLayer.hpp b/include/layers/ConcatLayer.hpp index d76f0ee2..ca721ab7 100644 --- a/include/layers/ConcatLayer.hpp +++ b/include/layers/ConcatLayer.hpp @@ -18,6 +18,10 @@ class ConcatLayer : public Layer { static std::string get_name() { return "ConcatLayer"; } +#ifdef ENABLE_STATISTIC_WEIGHTS + Tensor get_weights() override { return Tensor(); } +#endif + private: int64_t axis_; diff --git a/include/layers/DropOutLayer.hpp b/include/layers/DropOutLayer.hpp index 23e5436b..fcac4a1d 100644 --- a/include/layers/DropOutLayer.hpp +++ b/include/layers/DropOutLayer.hpp @@ -14,6 +14,9 @@ class DropOutLayer : public Layer { DropOutLayer(double drop_rate) { drop_rate_ = drop_rate; } static std::string get_name() { return "DropOut layer"; } void run(const Tensor& input, Tensor& output) override; +#ifdef ENABLE_STATISTIC_WEIGHTS + Tensor get_weights() override { return Tensor(); } +#endif }; } // namespace it_lab_ai \ No newline at end of file diff --git a/include/layers/FlattenLayer.hpp b/include/layers/FlattenLayer.hpp index 5636b21b..2c01da10 100644 --- a/include/layers/FlattenLayer.hpp +++ b/include/layers/FlattenLayer.hpp @@ -17,6 +17,9 @@ class FlattenLayer : public Layer { FlattenLayer(const std::vector& order) : order_(order) {} static std::string get_name() { return "Flatten layer"; } void run(const Tensor& input, Tensor& output) override; +#ifdef ENABLE_STATISTIC_WEIGHTS + Tensor get_weights() override { return Tensor(); } +#endif }; template diff --git a/include/layers/ReduceLayer.hpp b/include/layers/ReduceLayer.hpp index e2400600..6a9543b4 100644 --- a/include/layers/ReduceLayer.hpp +++ b/include/layers/ReduceLayer.hpp @@ -19,6 +19,10 @@ class ReduceLayer : public Layer { static std::string get_name() { return "ReduceLayer"; } +#ifdef ENABLE_STATISTIC_WEIGHTS + Tensor get_weights() override { return Tensor(); } +#endif + private: Operation op_; int64_t keepdims_; diff --git a/test/inference/test_inference.cpp b/test/inference/test_inference.cpp index 0134abe6..aa6be302 100644 --- a/test/inference/test_inference.cpp +++ b/test/inference/test_inference.cpp @@ -1,3 +1,4 @@ +#include #include #include "graph/graph.hpp" @@ -42,9 +43,9 @@ TEST(bfs, check_result_vec) { std::vector res = {81, 81, 81}; #ifdef ENABLE_STATISTIC_TENSORS std::vector tensors = graph.getTensors(); - for (int i = 0; i < tensors.size(); i++) { + for (size_t i = 0; i < tensors.size(); i++) { std::vector ten = *tensors[i].as(); - for (int j = 0; j < ten.size(); j++) { + for (size_t j = 0; j < ten.size(); j++) { std::cout << ten[j] << ' '; } std::cout << '\n'; @@ -52,18 +53,18 @@ TEST(bfs, check_result_vec) { #endif #ifdef ENABLE_STATISTIC_TIME std::vector times = graph.getTimeInfo(); - for (int j = 0; j < times.size(); j++) { + for (size_t j = 0; j < times.size(); j++) { std::cout << times[j] << ' '; } std::cout << '\n'; #endif #ifdef ENABLE_STATISTIC_WEIGHTS std::vector weights = graph.getWEIGHTS(); - for (int i = 0; i < weights.size(); i++) { + for (size_t i = 0; i < weights.size(); i++) { switch (weights[i].get_type()) { case Type::kInt: { std::vector ten = *weights[i].as(); - for (int j = 0; j < ten.size(); j++) { + for (size_t j = 0; j < ten.size(); j++) { std::cout << ten[j] << ' '; } std::cout << '\n'; @@ -71,12 +72,17 @@ TEST(bfs, check_result_vec) { } case Type::kFloat: { std::vector ten = *weights[i].as(); - for (int j = 0; j < ten.size(); j++) { + for (size_t j = 0; j < ten.size(); j++) { std::cout << ten[j] << ' '; } std::cout << '\n'; break; } + case Type::kUnknown: + default: { + throw std::runtime_error("Unknown tensor type encountered"); + break; + } } } #endif @@ -112,11 +118,11 @@ TEST(bfs, check_end_to_end) { graph.inference(); #ifdef ENABLE_STATISTIC_WEIGHTS std::vector weights = graph.getWEIGHTS(); - for (int i = 0; i < weights.size(); i++) { + for (size_t i = 0; i < weights.size(); i++) { switch (weights[i].get_type()) { case Type::kInt: { std::vector ten = *weights[i].as(); - for (int j = 0; j < ten.size(); j++) { + for (size_t j = 0; j < ten.size(); j++) { std::cout << ten[j] << ' '; } std::cout << '\n'; @@ -124,12 +130,17 @@ TEST(bfs, check_end_to_end) { } case Type::kFloat: { std::vector ten = *weights[i].as(); - for (int j = 0; j < ten.size(); j++) { + for (size_t j = 0; j < ten.size(); j++) { std::cout << ten[j] << ' '; } std::cout << '\n'; break; } + case Type::kUnknown: + default: { + throw std::runtime_error("Unknown tensor type encountered"); + break; + } } } #endif