First of all, thank you for considering contributing to the Triton programming language! We appreciate the time and effort you're willing to put into improving and expanding our project. In order to maintain a high standard of code and a welcoming atmosphere for collaboration, we kindly ask you to follow the guidelines outlined below.
-
Quality Contributions: We value meaningful contributions that aim to improve the project and help it grow. Please refrain from submitting low-effort pull requests (PR) -- such as minor formatting/typo fixes -- solely for the purpose of appearing in the commit history. Maintainers have limited bandwidth, and may decline to review such work.
-
Code Formatting: Our Continuous Integration (CI) pipeline uses autopep8, isort, and clang-format to check code formatting. To avoid failing the CI workflow due to formatting issues, please utilize the provided
.pre-commit-config.yaml
pre-commit configuration file. -
Unit Testing: When contributing new functionalities, please also include appropriate tests. We aim to continuously improve and expand our CI pipeline to ensure the robustness and reliability of the project. PRs that add a large amount of untested code will be rejected.
-
Respectful Communication: In all discussions related to PRs or other contributions, please maintain a courteous and civil tone. We strive to foster a collaborative environment that is inclusive and respectful to all contributors.
RFCs are a crucial aspect of the collaborative development process, as they provide a structured way to propose and discuss significant changes or additions to the project. RFCs may encompass modifications to the language itself, extensive changes in the compiler backend, or other substantial updates that impact the Triton ecosystem.
To ensure that RFCs are clear and easy to understand, consider the following guidelines when creating one:
The purpose of an RFC is to:
- Clearly communicate your proposal to the Triton community
- Collect feedback from maintainers and other contributors
- Provide a platform for discussing and refining ideas
- Reach a consensus on the best approach for implementing the proposed changes
A well-structured RFC should include:
-
Title: A concise and descriptive title that reflects the main topic of the proposal.
-
Summary: A brief overview of the proposed changes, including the motivation behind them and their intended impact on the project.
-
Detailed Design: A thorough description of the proposed changes, including:
- Technical details and implementation approach
- Any new or modified components, functions, or data structures
- Any potential challenges or limitations, as well as proposed solutions
-
Examples and Use Cases: Provide examples of how the proposed changes would be used in real-world scenarios, as well as any use cases that demonstrate the benefits of the changes.
-
Performance Impact: Discuss the expected performance impact of the proposed changes, including any potential bottlenecks or performance improvements.
-
Timeline and Milestones: Outline a proposed timeline for implementing the changes, including any milestones or intermediate steps.
Due to limited resources, we need to prioritize the number of targets we support. We are committed to providing upstream support for Nvidia and AMD GPUs. However, if you wish to contribute support for other backends, please start your project in a fork. If your backend proves to be useful and meets our performance requirements, we will discuss the possibility of upstreaming it.