diff --git a/projects/hip/hipify-clang/README.md b/projects/hip/hipify-clang/README.md index ec46c7cb2f..431c0a844a 100644 --- a/projects/hip/hipify-clang/README.md +++ b/projects/hip/hipify-clang/README.md @@ -11,6 +11,7 @@ - [Build and install](#build-and-install) * [Building](#building) * [Testing](#testing) + * [Linux](#linux) * [Windows](#windows) - [Running and using hipify-clang](#running-and-using-hipify-clang) - [Disclaimer](#disclaimer) @@ -80,7 +81,7 @@ Debug build type `-DCMAKE_BUILD_TYPE=Debug` is also supported and tested; `LLVM+ The binary can then be found at `./dist/bin/hipify-clang`. -### Test +### Testing `hipify-clang` has unit tests using LLVM [`lit`](https://llvm.org/docs/CommandGuide/lit.html)/[`FileCheck`](https://llvm.org/docs/CommandGuide/FileCheck.html). @@ -88,61 +89,183 @@ The binary can then be found at `./dist/bin/hipify-clang`. To run it: 1. Download [`LLVM`](http://releases.llvm.org/6.0.1/llvm-6.0.1.src.tar.xz)+[`CLANG`](http://releases.llvm.org/6.0.1/cfe-6.0.1.src.tar.xz) sources. -2. Build [`LLVM+CLANG`](http://llvm.org/docs/CMake.html). - For instance: - ```shell +2. Build [`LLVM+CLANG`](http://llvm.org/docs/CMake.html): + ```shell cd llvm mkdir build dist cd build + ``` + - **Linux**: - cmake \ - -DCMAKE_INSTALL_PREFIX=../dist \ - -DLLVM_SOURCE_DIR=../llvm \ - -DCMAKE_BUILD_TYPE=Release \ - -Thost=x64 \ - ../llvm + ```shell + cmake \ + -DCMAKE_INSTALL_PREFIX=../dist \ + -DLLVM_SOURCE_DIR=../llvm \ + -DCMAKE_BUILD_TYPE=Release \ + ../llvm + make -j install + ``` + - **Windows**: + +```shell + cmake \ + -G "Visual Studio 15 2017 Win64" \ + -DCMAKE_INSTALL_PREFIX=../dist \ + -DLLVM_SOURCE_DIR=../llvm \ + -DCMAKE_BUILD_TYPE=Release \ + -Thost=x64 \ + ../llvm +``` + +                Run `Visual Studio 15 2017`, open the generated `LLVM.sln`, build all, build project `INSTALL`. - make -j install - ``` - On Windows the following option should be specified for `cmake` at first place: `-G "Visual Studio 15 2017 Win64"`; the generated `LLVM.sln` should be built by `Visual Studio 15 2017` instead of `make`. 3. Ensure [`CUDA`](https://developer.nvidia.com/cuda-toolkit-archive) of minimum version 7.5 is installed. - * Having multiple CUDA installations, in order to choose a particular version the `DCUDA_TOOLKIT_ROOT_DIR` option should be specified: + * Having multiple CUDA installations to choose a particular version the `DCUDA_TOOLKIT_ROOT_DIR` option should be specified: - `-DCUDA_TOOLKIT_ROOT_DIR="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0"` + - Linux: `-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-8.0` - * On Windows `CUDA_SDK_ROOT_DIR` option should be specified as well: + - Windows: `-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_SDK_ROOT_DIR="c:/ProgramData/NVIDIA Corporation/CUDA Samples/v9.0"` 4. Ensure [`cuDNN`](https://developer.nvidia.com/rdp/cudnn-archive) of version corresponding to CUDA's version is installed. * Path to cuDNN should be specified by the `CUDA_DNN_ROOT_DIR` option: - `-DCUDA_DNN_ROOT_DIR=f:/CUDNN/cudnn-9.0-windows10-x64-v7.1` + - Linux: `-DCUDA_DNN_ROOT_DIR=/srv/CUDNN/cudnn-8.0-v7.1` + + - Windows: `-DCUDA_DNN_ROOT_DIR=f:/CUDNN/cudnn-9.0-windows10-x64-v7.1` 5. Ensure [`python`](https://www.python.org/downloads) of minimum required version 2.7 is installed. 6. Ensure `lit` and `FileCheck` are installed - these are distributed with LLVM. - * installing `lit` into `python` might be required: + * Install `lit` into `python`: - `python f:/LLVM/6.0.1/llvm/utils/lit/setup.py install`, + - Linux: `python /srv/git/LLVM/6.0.1/llvm/utils/lit/setup.py install` - where `f:/LLVM/6.0.1/llvm` is LLVM sources root directory. + - Windows: `python f:/LLVM/6.0.1/llvm/utils/lit/setup.py install` - * Starting with LLVM 6.0.1 path to llvm-lit.py script should be specified by the `LLVM_EXTERNAL_LIT` option: + * Starting with LLVM 6.0.1 path to `llvm-lit` python script should be specified by the `LLVM_EXTERNAL_LIT` option: - `-DLLVM_EXTERNAL_LIT=f:/LLVM/6.0.1/build/Release/bin/llvm-lit.py`, + - Linux: `-DLLVM_EXTERNAL_LIT=/srv/git/LLVM/6.0.1/build/bin/llvm-lit` - where `f:/LLVM/6.0.1/build/Release` is LLVM build directory. + - Windows: `-DLLVM_EXTERNAL_LIT=f:/LLVM/6.0.1/build/Release/bin/llvm-lit.py` -7. Build with the `HIPIFY_CLANG_TESTS` option turned on: -DHIPIFY_CLANG_TESTS=1. +7. Set `HIPIFY_CLANG_TESTS` option turned on: `-DHIPIFY_CLANG_TESTS=1`. -8. `make test-hipify` +8. Run `cmake`: + * [Linux](#linux) + * [Windows](#windows) - On Windows after `cmake` the project `test-hipify` in the generated `hipify-clang.sln` should be built by `Visual Studio 15 2017` instead of `make test-hipify`. +9. Run tests: + + - Linux: `make test-hipify`. + + - Windows: run `Visual Studio 15 2017`, open the generated `hipify-clang.sln`, build project `test-hipify`. + +### Linux + +On Linux (Ubuntu 14-18) the following configurations are tested: + +LLVM 5.0.0 - 6.0.1, CUDA 8.0, cudnn-8.0 + +Build system for the above configurations: + +Python 2.7 (min), cmake 3.5.2 (min), GNU C/C++ 5.4.0 (min). + +Here is an example of building `hipify-clang` with testing support on `Ubuntu 16.04`: + +```shell +cmake + -DHIPIFY_CLANG_TESTS=1 \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=../dist \ + -DCMAKE_PREFIX_PATH=/srv/git/LLVM/6.0.1/dist \ + -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-8.0 \ + -DCUDA_DNN_ROOT_DIR=/srv/CUDNN/cudnn-8.0-v7.1 \ + -DLLVM_EXTERNAL_LIT=/srv/git/LLVM/6.0.1/build/bin/llvm-lit \ + .. +``` +*A corresponding successful output:* +```shell +-- The C compiler identification is GNU 5.4.0 +-- The CXX compiler identification is GNU 5.4.0 +-- Check for working C compiler: /usr/bin/cc +-- Check for working C compiler: /usr/bin/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Detecting C compile features +-- Detecting C compile features - done +-- Check for working CXX compiler: /usr/bin/c++ +-- Check for working CXX compiler: /usr/bin/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Detecting CXX compile features +-- Detecting CXX compile features - done +-- Found LLVM 6.0.1: +-- - CMake module path: /srv/git/LLVM/6.0.1/dist/lib/cmake/llvm +-- - Include path : /srv/git/LLVM/6.0.1/dist/include +-- - Binary path : /srv/git/LLVM/6.0.1/dist/bin +-- Linker detection: GNU ld +-- Found PythonInterp: /usr/bin/python2.7 (found suitable version "2.7.12", minimum required is "2.7") +-- Found lit: /usr/local/bin/lit +-- Found FileCheck: /srv/git/LLVM/6.0.1/dist/bin/FileCheck +-- Looking for pthread.h +-- Looking for pthread.h - found +-- Looking for pthread_create +-- Looking for pthread_create - not found +-- Looking for pthread_create in pthreads +-- Looking for pthread_create in pthreads - not found +-- Looking for pthread_create in pthread +-- Looking for pthread_create in pthread - found +-- Found Threads: TRUE +-- Found CUDA: /usr/local/cuda-8.0 (found version "8.0") +-- Configuring done +-- Generating done +-- Build files have been written to: /srv/git/HIP/hipify-clang/build +``` +```shell +make test-hipify +``` +*A corresponding successful output:* +```shell +[100%] Running HIPify regression tests +-- Testing: 28 tests, 12 threads -- +PASS: hipify :: allocators.cu (1 of 28) +PASS: hipify :: coalescing.cu (2 of 28) +PASS: hipify :: cuDNN/cudnn_softmax.cu (3 of 28) +PASS: hipify :: cuFFT/simple_cufft.cu (4 of 28) +PASS: hipify :: cuComplex/cuComplex_Julia.cu (5 of 28) +PASS: hipify :: cuBLAS/cublas_sgemm_matrix_multiplication.cu (6 of 28) +PASS: hipify :: cuBLAS/cublas_1_based_indexing.cu (7 of 28) +PASS: hipify :: cuBLAS/cublas_0_based_indexing.cu (8 of 28) +PASS: hipify :: axpy.cu (9 of 28) +PASS: hipify :: dynamic_shared_memory.cu (10 of 28) +PASS: hipify :: headers_test_01.cu (11 of 28) +PASS: hipify :: headers_test_02.cu (12 of 28) +PASS: hipify :: headers_test_03.cu (13 of 28) +PASS: hipify :: headers_test_05.cu (14 of 28) +PASS: hipify :: cuDNN/cudnn_convolution_forward.cu (15 of 28) +PASS: hipify :: cuRAND/poisson_api_example.cu (16 of 28) +PASS: hipify :: cudaRegister.cu (17 of 28) +PASS: hipify :: headers_test_06.cu (18 of 28) +PASS: hipify :: headers_test_04.cu (19 of 28) +PASS: hipify :: intro.cu (20 of 28) +PASS: hipify :: headers_test_07.cu (21 of 28) +PASS: hipify :: square.cu (22 of 28) +PASS: hipify :: static_shared_memory.cu (23 of 28) +PASS: hipify :: vec_add.cu (24 of 28) +PASS: hipify :: headers_test_08.cu (25 of 28) +PASS: hipify :: cuRAND/benchmark_curand_generate.cpp (26 of 28) +PASS: hipify :: cuRAND/benchmark_curand_kernel.cpp (27 of 28) +PASS: hipify :: headers_test_09.cu (28 of 28) +Testing Time: 1.71s + Expected Passes : 28 +[100%] Built target test-hipify +``` ### Windows @@ -172,7 +295,7 @@ cmake -Thost=x64 .. ``` -A corresponding successful output: +*A corresponding successful output:* ```shell -- Found LLVM 6.0.1: -- - CMake module path: F:/LLVM/6.0.1/dist/lib/cmake/llvm @@ -194,12 +317,13 @@ To process a file, `hipify-clang` needs access to the same headers that would be For example: ```shell -hipify-clang square.cu -- \ +./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 + --cuda-path=/usr/local/cuda-8.0 \ + --cuda-gpu-arch=sm_50 \ + -isystem /usr/local/cuda-8.0/samples/common/inc ``` `hipify-clang` arguments are given first, followed by a separator, and then the arguments you'd pass to `clang` if you