Porting Cuda Codes to HIP

HIP: Heterogeneous Interface for Portability is developed by AMD to program on AMD GPUs. 

ROCm environment offers two automated methods for automatically converting CUDA projects to HIP:  Hipify perl a Perl script you can run on the CUDA source code to convert it to HIP format and Hipify clang a preprocessor that operates from within the HIP/ Clang compiler tool chain, converting the code as a preliminary step within the compiler process.

The hipify perl script acts directly on the CUDA source code using a series of simple string replacements. Ex., (sed e ’s/cuda/hip/g’)

To convert a CUDA file (foo.cu , for example) to HIP format, enter the following after loading a ROCm module:

Terminal N. Loading ROCm module and using the hipify-perl tool for translating the code from CUDA to HIP
$ module load rocm/<version>
$ hipify-perl foo.cu > new_foo.cpp


You can then compile the HIP ready . cpp file for the ROCm environment using the HIP/ Clang compiler provided in the ROCm installation:

Terminal N. Compiling the code with hipcc
$ hipcc new_foo.cpp

There are several other utility scripts and options available to support the porting of codes that you can find in the rocm installation. These include:

  • hipify-clang
  • hipify-perl
  • hipexamine.sh
  • hipexamine-perl.sh
  • hipconvertinplace.sh
  • hipconvertinplace-perl.sh



For example, hipify-perl -inplace option saves the HIP version of the code in the same file. The original CUDA code is saved in the backup file .prehip:

Terminal N. Compiling the code with hipcc
$ hipify-perl -inplace <filename>

Or hipexamine-perl.sh scans a file/directory to determine which file/files contain CUDA code and how much of that code can be automatically hipified.

$ hipexamine-perl.sh <filename/directory>

Or hipconvertinplace-perl.sh converts all the related files that are located inside the directory

$ hipconvertinplace-perl.sh <directory>

for more information see HIP programming guide, ROCm-Developer-Tools, HIPIFY/README