Contributing to hipBLAS#
Pull-request guidelines#
Our code contriubtion guidelines closely follows the model of GitHub pull-requests. The hipBLAS repository follows a workflow which dictates a /master branch where releases are cut, and a /develop branch which serves as an integration branch for new code. Pull requests should:
target the develop branch for integration
ensure code builds successfully.
do not break existing test cases
new unit tests should integrate within the existing googletest framework.
tests must have good code coverage
code must also have benchmark tests, and performance must approach the compute bound limit or memory bound limit.
Coding Guidelines:#
Do not use unnamed namespaces inside of header files.
Use either
templateorinline(or both) for functions defined outside of classes in header files.Do not declare namespace-scope (not
class-scope) functionsstaticinside of header files unless there is a very good reason, that the function does not have any non-conststaticlocal variables, and that it is acceptable that each compilation unit will have its own independent definition of the function and itsstaticlocal variables. (staticclassmember functions defined in header files are okay.)Use
staticforconstexprtemplatevariables until C++17, after whichconstexprvariables becomeinlinevariables, and thus can be defined in multiple compilation units. It is okay if theconstexprvariables remainstaticin C++17; it just means there might be a little bit of redundancy between compilation units.
Format#
C and C++ code is formatted using clang-format. To run clang-format
use the version in the /opt/rocm/llvm/bin directory. Please do not use your
system’s built-in clang-format, as this may be an older version that
will result in 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 rocBLAS 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
Also, githooks can be installed to format the code per-commit:
./.githooks/install
Static Code Analysis#
cppcheck is an open-source static analysis tool. This project uses this tool for performing static code analysis.
Users can use the following command to run cppcheck locally to 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 command line options, refer to the cppcheck manual on the web.