Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

134 lines
4.4 KiB
ReStructuredText

.. meta::
:description: A high-performance HIP library for tensor primitives
:keywords: hipTensor, ROCm, library, API, tool, contribution
.. _contributors-guide:
============================
Contributing to hipTensor
============================
This document provides the coding guidelines for contributing to the hipTensor APIs.
License agreement
=================
1. The code I am contributing is mine and I have the right to license
it.
2. By submitting a pull request for this project, I am granting you a
license to distribute said code under the MIT License for the
project.
Pull-request guidelines
=======================
Our code contribution guidelines closely follows the model of `GitHub
pull-requests <https://help.github.com/articles/using-pull-requests/>`__.
The hipTensor repository uses a workflow with a ``release`` branch for releases and a
``develop`` branch for integrating new code. Follow the guidelines below when creating a pull request:
- Target the ``develop`` branch for integration.
- Ensure that the code builds successfully.
- Do not break existing test cases.
- Be informed that a new functionality is only merged with new unit tests.
- Ensure that new unit tests integrate within the existing GoogleTest framework.
- Design the tests with thorough code coverage.
- Include benchmark tests and ensure performance approaches the compute-bound or memory-bound limits.
Style guide
============
This project follows the `CPP Core
guidelines <https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md>`__,
with a few modifications and additions listed below. Follow these guidelines when creating pull requests.
Interface
---------
- Use C++17 for the library code.
- Avoid camel case.
.. note::
The above rules specifically apply to publicly visible APIs, but are also encouraged, though not required, for internal code.
Philosophy
----------
- Use ISO Standard C++14 to ensure compatibility across Windows, Linux, and macOS platforms.
- Prefer compile-time check to run-time check.
Implementation
--------------
- Use the ``.cpp`` suffix for code files and ``.hpp`` suffix for interface files, if your project doesn't already follow another
convention.
- Ensure that each ``.cpp`` file includes the ``.hpp`` file(s) that defines its interface.
- Avoid placing global ``using`` directives in header files.
- Use ``#include`` guards for all ``.hpp`` files.
- Avoid using unnamed (anonymous) ``namespace``\ s in header files.
- Use ``std::array`` or ``std::vector`` instead of C arrays.
- Minimize the exposure of class members.
- Keep functions short and simple.
- To return multiple output values, prefer using a ``std::tuple``.
- Manage resources automatically using RAII, including ``std::unique_ptr`` and ``std::shared_ptr``.
- Use ``auto`` to avoid redundant repetition of type names.
- Always initialize an object.
- Use the ``{}`` initializer syntax wherever possible.
- Expect your code to run as part of a multi-threaded program.
- Avoid using global variables.
Format
------
C++ code is formatted using ``clang-format``. To run ``clang-format``,
use the version in the ``/opt/rocm/llvm/bin`` directory. Avoid using your
system's built-in ``clang-format``, as it might be outdated and produce inconsistent results.
To format a file, use:
.. code-block:: bash
/opt/rocm/llvm/bin/clang-format -style=file -i <path-to-source-file>
To format all files, run the following script in the hipTensor directory:
.. code-block:: bash
#!/bin/bash
git ls-files -z *.cc *.cpp *.h *.hpp *.cl *.h.in *.hpp.in *.cpp.in | xargs -0 /opt/rocm/llvm/bin/clang-format -style=file -i
To install githooks to format the code per-commit, use:
.. code-block:: bash
./.githooks/install
Example
-------
1. Create and track a hipTensor fork.
2. Clone your fork:
.. code-block:: bash
git clone -b develop https://github.com/<your_fork>/hipTensor.git .
.githooks/install
git checkout -b <new_branch>
...
git add <new_work>
git commit -m "What was changed"
git push origin <new_branch>
...
3. Create a pull request to ``ROCm/hipTensor``, targeting the ``develop`` branch.
4. Respond to code reviews.
5. Await CI and approval feedback.
6. Once approved, await for dev team to merge!
.. note::
Install the githooks via ``.githooks/install``, as there are triggers for clang formatting in commits.