Skip to content

Latest commit

 

History

History
83 lines (62 loc) · 2.5 KB

CODING_STANDARDS.md

File metadata and controls

83 lines (62 loc) · 2.5 KB

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.


Automatic detection

oneDNN uses 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. 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:

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,
    if (x < 4) y = 64;

    In this example, 4 and 64 should be named, in which case the code becomes:

    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:
    {
          Xbyak::Label barrier_exit_label;
          ...
          jmp(barrier_exit_label);
          ...
          L(barrier_exit_label);
    }