This page contains proposed changes for a future release of ROCm. Read the latest Linux release of ROCm documentation for your production environments.

Contributing to hipBLAS#

This topic explains how to contribute to the hipBLAS code base, including coding and pull request (PR) guidelines and information about static code analysis.

Pull request guidelines#

The hipBLAS code contribution guidelines closely follow the GitHub pull requests model. The hipBLAS repository follows a workflow that dictates a release branch, from which releases are cut, and a develop branch, which serves as an integration branch for new code. Pull requests should adhere to these guidelines:

  • Target the develop branch for integration.

  • Ensure code builds successfully.

  • Do not break existing test cases.

  • New unit tests should integrate with the existing GoogleTest framework.

  • Tests must have good code coverage.

Coding guidelines:#

  • Don’t use unnamed namespaces inside of header files.

  • Use either template or inline (or both) for functions defined outside of classes in header files.

  • Do not declare namespace-scope (not class-scope) functions static inside of header files unless:

    • There is a very good reason.

    • The function does not have any non-const static local variables.

    • It is acceptable that each compilation unit will have its own independent definition of the function and its static local variables.

    Note

    static class member functions defined in header files are okay.

  • Use static for constexpr template variables until C++17. After C++17, constexpr variables become inline variables and can be defined in multiple compilation units. It is okay if the constexpr variables remain static in C++17, but it means there might be some redundancy between compilation units.

Code format#

C and C++ code is formatted using clang-format. To run clang-format, use the version in the /opt/rocm/llvm/bin directory. Don’t use your system’s built-in clang-format, because it might be an older version that could generate different results.

To format a file, use:

/opt/rocm/llvm/bin/clang-format -style=file -i <path-to-source-file>

To format all files, run the following script in hipBLAS directory:

#!/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

The githooks application can also be installed to format the code on a per-commit basis:

./.githooks/install

Static code analysis#

cppcheck is an open-source static analysis tool. hipBLAS uses this tool to perform static code analysis.

Use the following command to run cppcheck locally and generate the report for all files.

$ cd hipBLAS
$ cppcheck --enable=all --inconclusive --library=googletest --inline-suppr -i./build --suppressions-list=./CppCheckSuppressions.txt --template="{file}:{line}: {severity}: {id} :{message}" . 2> cppcheck_report.txt

For more information on the cppcheck command line options, see the cppcheck manual.