Skip to content

Commit ae0c89d

Browse files
committed
oneccl rfc process
1 parent 80f8220 commit ae0c89d

File tree

2 files changed

+114
-0
lines changed

2 files changed

+114
-0
lines changed

README.md

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# oneCCL Design Documents / RFCs
2+
3+
The purpose of the RFC process is to communicate the intent to make
4+
library-wide changes, get the feedback prior to the actual implementation,
5+
increase the transparency on why and how the decisions are made, and improve
6+
the alignment between different teams involved in oneDNN development.
7+
8+
This branch contains design documents (RFCs) that are approved for
9+
implementation in oneCCL.
10+
11+
## Document Style
12+
13+
The design documents are stored in the `rfcs` directory.
14+
15+
- Each RFC is stored in a separate subdirectory
16+
`rfcs/<YYYMMDD>-descriptive-but-short-name`.
17+
18+
- There must be a `README.md` file that contains the main RFC itself.
19+
20+
- The directory can contain other supporting files, such as images,
21+
tex formulas, and sub-proposals / sub-RFCs.
22+
23+
- The RFC is written in markdown. The width of the text should be limited by
24+
80 symbols, unless there is a need to violate this rule, e.g. because of
25+
long links or wide tables.
26+
27+
- The document structure should follow the [RFC template](rfcs/template.md).
28+
29+
- It is also recommended to read through existing RFCs to better understand
30+
the general writing style and required elements.
31+
32+
## RFC Ratification Process
33+
34+
Before submitting an RFC, it might be helpful to have a preliminary discussion
35+
on the idea with oneCCL contributors. Regular GitHub issues could be used for
36+
the discussion.
37+
38+
The RFC life-cycle is:
39+
40+
1. A design author writes up a design and opens a PR to the
41+
[`rfcs`](https://github.com/oneapi-src/oneCCL/tree/rfcs) branch. The PR
42+
should be labeled as an
43+
[`RFC`](https://github.com/oneapi-src/oneCCL/labels/RFC) and contain the
44+
short description of the objective.
45+
It is quite handy if the PR description contains a link to the RFC
46+
directory that will automatically render the RFC's `README.md`.
47+
48+
2. RFCs from external parties require a sponsor from oneCCL maintainers to
49+
guide them to completion (either approval or rejection). The sponsor will be
50+
assigned to the PR.
51+
52+
3. RFC discussions take place in comments sections in the PRs. RFC owners
53+
continuously update the design until all the issues are resolved.
54+
55+
4. To accept the RFC, at least two approvals from oneCCL maintainers (excluding
56+
the author of the proposal) are required. Once general consensus is reached
57+
and the approvals are in place, the RFC is merged to the branch.

rfcs/template.md

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# oneCCL Design Document (RFC)
2+
3+
> Please follow the document style requirements listed
4+
> [here](../README.md#document-style).
5+
6+
## Introduction
7+
8+
Short description of the idea proposed with explained motivation. The
9+
motivation could be:
10+
- Widespread usage of the proposed feature in different frameworks or
11+
applications. Provide references to support the claim.
12+
- Improved users experience for API changes and extensions. Code snippets to
13+
showcase the benefits would be nice here.
14+
- Performance improvements with the data, if available.
15+
- Improved engineering practices.
16+
17+
Introduction may also include any additional information that sheds light on
18+
the proposal, such as history of the matter, links to relevant issues and
19+
discussions, etc.
20+
21+
## Proposal
22+
23+
A full and detailed description of the proposal, with highlighted consequences.
24+
25+
A proposal should include the alternatives that were considered with listed
26+
pros and cons. The alternatives should be clearly separated to make possible
27+
discussions clear.
28+
29+
Pay close attention to the following aspects of the library:
30+
- API and ABI backwards compatibility. The library follows semantic versioning
31+
so if any of those interfaces are to be broken we need to state that
32+
explicitly.
33+
- Performance implications, as this is one of the main goals of the library.
34+
- Changes to the build system. While the library's primary building system is
35+
CMake, there are some frameworks that may build the library directly from the
36+
sources.
37+
- Dependencies and support matrix: does the proposal brings any new
38+
dependencies or affects the supported configurations.
39+
40+
Some other common subsections here are:
41+
- Discussion: some people like to list all the options first (as separate
42+
subsections), and then have a dedicated section with the discussion/
43+
- Listing of the proposed API and examples of its usage.
44+
- Testing aspects.
45+
- Short explanation and links to the related sub-proposals, if any. Such
46+
sub-proposals could be organized as separate standalone RFCs, but this is
47+
not mandatory. If the changes is insignificant, or doesn't make any sense
48+
without the original proposal it is fine to have it in the RFC. The
49+
sub-proposals are typically kept in a separate files.
50+
- Execution plan if approved, aka next steps.
51+
52+
## Open Questions
53+
54+
List here the significant uncertainties that are relevant to the proposal.
55+
56+
However, sometimes the answers on these questions won't be found even if the
57+
proposal is accepted, say, by leaving the current implementation as is.

0 commit comments

Comments
 (0)