mirror of
https://github.com/uxlfoundation/oneDNN.git
synced 2025-10-20 18:43:49 +08:00
84 lines
2.5 KiB
Markdown
84 lines
2.5 KiB
Markdown
# Coding Standards
|
|
|
|
## Introduction
|
|
|
|
The Coding Standards outline and describe a set of rules the oneDNN code base
|
|
and code contributions must follow.
|
|
|
|
The only goal of the Coding Standards is to maintain productivity for the
|
|
development of the library.
|
|
|
|
The Coding Standards are subject to change.
|
|
|
|
---
|
|
**NOTE** It may happen that not all code can and does follow all the rules
|
|
outlined in the Coding Standards. In case enforcing a specific rule makes your
|
|
contribution less effective in terms of code design, please do not apply the
|
|
corresponding rule. This exception does not apply to violations detected by
|
|
[clang-tidy](CODING_STANDARDS.md#automatic-detection).
|
|
|
|
---
|
|
|
|
### Automatic detection
|
|
|
|
oneDNN uses [clang-tidy](https://clang.llvm.org/extra/clang-tidy/) in order to
|
|
diagnose and fix common style violations and easy-to-fix issues in the code
|
|
base. For instructions on how to use `clang-tidy`, please refer to the
|
|
[clang-tidy
|
|
RFC](https://github.com/uxlfoundation/oneDNN/blob/rfcs/rfcs/20200813-clang-tidy/README.md).
|
|
The list of clang-tidy checks the oneDNN code base follows is available in the
|
|
`.clang-tidy` file found in the oneDNN top-level directory.
|
|
|
|
### Coding style
|
|
|
|
The coding style consistency in oneDNN is maintained using `clang-format`. When
|
|
submitting your contribution, please make sure that it adheres to the existing
|
|
coding style with the following command:
|
|
```sh
|
|
clang-format -style=file -i foo.cpp
|
|
```
|
|
This will format the code using the `_clang_format` file found in the oneDNN top
|
|
level directory.
|
|
|
|
Coding style is secondary to the general code design.
|
|
|
|
### General
|
|
|
|
- Use properly named constants whenever possible (unless this code is
|
|
auto-generated).
|
|
* For example,
|
|
~~~cpp
|
|
if (x < 4) y = 64;
|
|
~~~
|
|
|
|
In this example, 4 and 64 should be named, in which case the code becomes:
|
|
~~~cpp
|
|
if (x < sizeof(float)) y = cache_line_size;
|
|
~~~
|
|
|
|
- Don't use `using namespace XXX` in header files.
|
|
|
|
- Avoid code duplication (look for similarities), unless it is necessary.
|
|
|
|
- Use `src`/`dst` instead of `input`/`output`.
|
|
|
|
- Declare variables in the innermost possible scope until there are some
|
|
circumstances that make you declare them somewhere else.
|
|
|
|
- Consider using utils to improve readability (`IMPLICATION`, `one_of`,
|
|
`everyone_is`).
|
|
|
|
### Xbyak
|
|
|
|
- Don't use `char[]` for label names and don't pass them as parameters. Instead,
|
|
use `Xbyak::Label` variables. For example:
|
|
~~~cpp
|
|
{
|
|
Xbyak::Label barrier_exit_label;
|
|
...
|
|
jmp(barrier_exit_label);
|
|
...
|
|
L(barrier_exit_label);
|
|
}
|
|
~~~
|