Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
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
32 changes: 32 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,35 @@
*.jpg binary
*.pdf binary
*.ipynb binary

c_reference/models/q_scut_head_b_face3_model/mbconv1.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face3_model/mbconv3.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face3_model/mbconv4.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face3_model/rnn1.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face3_model/conv2D.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face3_model/detection1.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face3_model/detection2.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face3_model/detection3.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face3_model/mbconv2.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face3_model/rnn2.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/detection4.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv10.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv11.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv2.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv5.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv6.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/detection1.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/detection3.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/rnn2.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv7.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv8.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv9.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv14.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv4.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/rnn1.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/conv2D.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv3.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv13.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv1.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/detection2.h filter=lfs diff=lfs merge=lfs -text
c_reference/models/q_scut_head_b_face2_model/mbconv12.h filter=lfs diff=lfs merge=lfs -text
4 changes: 4 additions & 0 deletions c_reference/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,24 @@
include config.mk

SRC_DIR=src
MODEL_DIR=models
TEST_DIR=tests

all:
$(MAKE) -C $(SRC_DIR)
$(MAKE) -C $(MODEL_DIR)
$(MAKE) -C $(TEST_DIR)

.PHONY: clean cleanest

clean:
rm -f *.o *.gch
$(MAKE) -C $(SRC_DIR) clean
$(MAKE) -C $(MODEL_DIR) clean
$(MAKE) -C $(TEST_DIR) clean

cleanest: clean
rm *~
$(MAKE) -C $(SRC_DIR) cleanest
$(MAKE) -C $(MODEL_DIR) cleanest
$(MAKE) -C $(TEST_DIR) cleanest
23 changes: 20 additions & 3 deletions c_reference/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,24 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT license.

This folder consists of C reference code for some EdgeML operators,
This folder consists of `C` reference code for some `EdgeML` operators,
and sample parameter sets and input/output traces to verify them.
The code is intended to compile with gcc on Linux machines,
and is to be adapated as needed for other embedded platforms.
The code is intended to compile with `GCC` on `Linux` machines,
and is to be adapted as needed for other embedded platforms.

## Directory Structure

The `EdgeML/c_reference/` directory is broadly structured into the following sub-directories:

- **include/**: Contains the header files for various lower level operators and layers.
- **models/**: Contains the optimized source code and header files for various models built by stiching together different layers and operators. Also contains the layer weights and hyper-parameters for the corresponding models as well (stored using `Git LFS`).
- **src/**: Contains the optimized source code files for various lower level operators and layers.
- **tests/**: Contains extensive test cases for individual operators and layers, as well as the implemented models. The executables are generated in the main directory itself, while the test scripts and their configurations can be accessed in the appropriate sub-directories.

## Compiling

Run `make` inside the `EdgeML/c_reference/` directory to compile the entire project at once. Alternatively, run `make clean` to discard the previously generated object files and executables. By default, the directory is compiled with loop unrolling and shift operations turned off.

## Running

Head to `c_reference/tests/` directory and execute the test script of your choice. Test patches (wherever required) are currently not included because of license restrictions. Please open an issue / refer to an existing issue for the same.
27 changes: 11 additions & 16 deletions c_reference/include/quantized_datatypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,20 @@

#include <stdint.h>

// Macro for input type.
typedef int16_t INT_T;
// Macros for input type.
typedef int8_t Q7_T;
typedef int16_t Q15_T;
typedef int32_t Q31_T;
typedef int64_t Q63_T;
// Macro for unsigned iterator type.
typedef uint16_t ITER_T;
typedef uint32_t ITER_T;
// Macro for signed iterator type.
typedef int16_t S_ITER_T;
// Macro for intermediate buffer type.
typedef int32_t INTM_T;
// Macros for scale variable type.
#ifdef SHIFT
typedef uint8_t SCALE_T;
typedef uint8_t L_SCALE_T;
#else
typedef int16_t SCALE_T;
typedef int32_t L_SCALE_T;
#endif
typedef int32_t S_ITER_T;
// Macro for scale variable type.
typedef int32_t SCALE_T;
// Macro for max value of input type.
#define INT_TMAX 32767
#define Q15_TMAX 32767
// Macro for min value of input type.
#define INT_TMIN -32768
#define Q15_TMIN -32768

#endif
Loading