hipify-clang
hipify-clang is a clang-based tool to automatically translate CUDA source code into portable HIP C++.
Table of Contents
Build and install
Dependencies
hipify-clang requires:
- LLVM+CLANG of at least version 3.8.0, latest stable release is 6.0.0.
- CUDA at least version 7.5, latest supported release is 9.0.
| LLVM release version | CUDA latest supported version |
|---|---|
| 3.8.0 | 7.5 |
| 3.8.1 | 7.5 |
| 3.9.0 | 7.5 |
| 3.9.1 | 7.5 |
| 4.0.0 | 8.0 |
| 4.0.1 | 8.0 |
| 5.0.0 | 8.0 |
| 5.0.1 | 8.0 |
| 6.0.0 | 9.0 |
In most cases, you can get a suitable version of LLVM+CLANG with your package manager.
Failing that or having multiple versions of LLVM, you can download a release archive, build or install it, and set
CMAKE_PREFIX_PATH so cmake can find it; for instance: -DCMAKE_PREFIX_PATH=f:\LLVM\6.0.0\dist
Build
Assuming this repository is at ./HIP:
cd hipify-clang
mkdir build dist
cd build
cmake \
-DCMAKE_INSTALL_PREFIX=../dist \
-DCMAKE_BUILD_TYPE=Release \
..
make -j install
On Windows the following option should be specified for cmake at first place: -G "Visual Studio 15 2017 Win64" and after cmake the generated hipify-clang.sln should be built by Visual Studio 15 2017 instead of make.
Debug build type -DCMAKE_BUILD_TYPE=Debug is also supported and tested, LLVM+CLANG should be built in Debug mode as well.
64 bit build mode -Thost=x64 is supported as well, LLVM+CLANG should be built (installed) in 64bit mode as well.
The binary can then be found at ./dist/bin/hipify-clang.
Test
hipify-clang has unit tests using LLVM lit/FileCheck.
LLVM+CLANG should be built from sources, Pre-Built Binaries are not exhaustive for testing.
To run it:
-
Build
LLVM+CLANG. For instance:cd llvm mkdir build dist cd build cmake \ -DCMAKE_INSTALL_PREFIX=../dist \ -DLLVM_SOURCE_DIR=../llvm \ -DCMAKE_BUILD_TYPE=Debug \ -Thost=x64 \ ../llvm make -j installOn Windows the following option should be specified for
cmakeat first place:-G "Visual Studio 15 2017 Win64"and aftercmakethe generatedLLVM.slnshould be built byVisual Studio 15 2017instead ofmake. -
Ensure
CUDAof minimum version 7.5 is installed.-
Having multiple CUDA installations in order to choose a concrete version the
DCUDA_TOOLKIT_ROOT_DIRoption should be specified:-DCUDA_TOOLKIT_ROOT_DIR="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0"- On Windows
CUDA_SDK_ROOT_DIRoption should be specified as well:
-DCUDA_SDK_ROOT_DIR="c:/ProgramData/NVIDIA Corporation/CUDA Samples/v9.0" - On Windows
-
-
Ensure
cuDNNof version corresponding to CUDA's version is installed.-
Path to cuDNN should be specified by the
CUDA_DNN_ROOT_DIRoption:-DCUDA_DNN_ROOT_DIR=f:/CUDNN/cudnn-9.0-windows10-x64-v7.1
-
-
Ensure
pythonof minimum required version 2.7 is installed. -
Ensure
litandFileCheckare installed - these are distributed with LLVM.-
installing
litintopythonmight be required:python f:/LLVM/6.0.0/llvm/utils/lit/setup.py install,where
f:/LLVM/6.0.0/llvmis LLVM sources root directory. -
Starting with LLVM 6.0.0 path to llvm-lit.py script should be specified by the
LLVM_EXTERNAL_LIToption:-DLLVM_EXTERNAL_LIT=f:/LLVM/6.0.0/build/Debug/bin/llvm-lit.py,where
f:/LLVM/6.0.0/build/Debugis LLVM build directory.
-
-
Build with the
HIPIFY_CLANG_TESTSoption turned on: -DHIPIFY_CLANG_TESTS=1. -
make test-hipifyOn Windows after
cmakethe projecttest-hipifyin the generatedhipify-clang.slnshould be built byVisual Studio 15 2017instead ofmake test-hipify.
Windows
On Windows the following tested configuration is recommended:
LLVM 6.0.0 (exact), CUDA 9.0 (exact), cudnn-9.0 (exact), Python 3.6 (min), cmake 3.10 (min), Visual Studio 15.5 2017 (min).
Here is an example of building hipify-clang with testing support on Windows 10 by Visual Studio 15 2017:
cmake
-G "Visual Studio 15 2017 Win64" \
-DHIPIFY_CLANG_TESTS=1 \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX=../dist \
-DCMAKE_PREFIX_PATH=f:/LLVM/6.0.0/dist \
-DCUDA_TOOLKIT_ROOT_DIR="c:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0" \
-DCUDA_SDK_ROOT_DIR="c:/ProgramData/NVIDIA Corporation/CUDA Samples/v9.0" \
-DCUDA_DNN_ROOT_DIR=f:/CUDNN/cudnn-9.0-windows10-x64-v7.1 \
-DLLVM_EXTERNAL_LIT=f:/LLVM/6.0.0/build/Debug/bin/llvm-lit.py \
..
A corresponding successful output:
-- Found LLVM 6.0.0:
-- - CMake module path: F:/LLVM/6.0.0/dist/lib/cmake/llvm
-- - Include path : F:/LLVM/6.0.0/dist/include
-- - Binary path : F:/LLVM/6.0.0/dist/bin
-- Found PythonInterp: C:/Program Files/Python36/python.exe (found suitable version "3.6.4", minimum required is "2.7")
-- Found lit: C:/Program Files/Python36/Scripts/lit.exe
-- Found FileCheck: F:/LLVM/6.0.0/dist/bin/FileCheck.exe
-- Found CUDA: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0 (found version "9.0")
-- Configuring done
-- Generating done
-- Build files have been written to: f:/HIP/hipify-clang/build
Running and using hipify-clang
To process a file, hipify-clang needs access to the same headers that would be needed to compile it with clang.
For example:
hipify-clang square.cu -- \
-x cuda \
--cuda-path=/opt/cuda \
--cuda-gpu-arch=sm_30 \
-isystem /opt/cuda/samples/common/inc
-I /opt/cuda/cuDNN
hipify-clang arguments are given first, followed by a separator, and then the arguments you'd pass to clang if you
were compiling the input file. The Clang manual for compiling CUDA
may be useful.
For a list of hipify-clang options, run hipify-clang --help.
Disclaimer
The information contained herein is for informational purposes only, and is subject to change without notice. While every precaution has been taken in the preparation of this document, it may contain technical inaccuracies, omissions and typographical errors, and AMD is under no obligation to update or otherwise correct this information. Advanced Micro Devices, Inc. makes no representations or warranties with respect to the accuracy or completeness of the contents of this document, and assumes no liability of any kind, including the implied warranties of noninfringement, merchantability or fitness for particular purposes, with respect to the operation or use of AMD hardware, software or other products described herein. No license, including implied or arising by estoppel, to any intellectual property rights is granted by this document. Terms and limitations applicable to the purchase or use of AMD's products are as set forth in a signed agreement between the parties or in AMD's Standard Terms and Conditions of Sale.
AMD, the AMD Arrow logo, and combinations thereof are trademarks of Advanced Micro Devices, Inc. Other product names used in this publication are for identification purposes only and may be trademarks of their respective companies.
Copyright (c) 2014-2018 Advanced Micro Devices, Inc. All rights reserved.