diff --git a/projects/clr/hipamd/docs/markdown/CUFFT_API_supported_by_HIP.md b/projects/clr/hipamd/docs/markdown/CUFFT_API_supported_by_HIP.md new file mode 100644 index 0000000000..57a9d414b7 --- /dev/null +++ b/projects/clr/hipamd/docs/markdown/CUFFT_API_supported_by_HIP.md @@ -0,0 +1,81 @@ +# CUFFT API supported by HIP + +## **1. CUFFT Data types** + +| **type** | **CUDA** | **HIP** |**HIP value** (if differs) | +|-------------:|---------------------------------------------------------------|------------------------------------------------------------|---------------------------| +| enum |***`cufftResult_t`*** |***`hipfftResult_t`*** | +| enum |***`cufftResult`*** |***`hipfftResult`*** | +| 0x0 |*`CUFFT_SUCCESS`* |*`HIPFFT_SUCCESS`* | 0 | +| 0x1 |*`CUFFT_INVALID_PLAN`* |*`HIPFFT_INVALID_PLAN`* | 1 | +| 0x2 |*`CUFFT_ALLOC_FAILED`* |*`HIPFFT_ALLOC_FAILED`* | 2 | +| 0x3 |*`CUFFT_INVALID_TYPE`* |*`HIPFFT_INVALID_TYPE`* | 3 | +| 0x4 |*`CUFFT_INVALID_VALUE`* |*`HIPFFT_INVALID_VALUE`* | 4 | +| 0x5 |*`CUFFT_INTERNAL_ERROR`* |*`HIPFFT_INTERNAL_ERROR`* | 5 | +| 0x6 |*`CUFFT_EXEC_FAILED`* |*`HIPFFT_EXEC_FAILED`* | 6 | +| 0x7 |*`CUFFT_SETUP_FAILED`* |*`HIPFFT_SETUP_FAILED`* | 7 | +| 0x8 |*`CUFFT_I;NVALID_SIZE`* |*`HIPFFT_INVALID_SIZE`* | 8 | +| 0x9 |*`CUFFT_UNALIGNED_DATA`* |*`HIPFFT_UNALIGNED_DATA`* | 9 | +| 0xA |*`CUFFT_INCOMPLETE_PARAMETER_LIST`* |*`HIPFFT_INCOMPLETE_PARAMETER_LIST`* | 10 | +| 0xB |*`CUFFT_INVALID_DEVICE`* |*`HIPFFT_INVALID_DEVICE`* | 11 | +| 0xC |*`CUFFT_PARSE_ERROR`* |*`HIPFFT_PARSE_ERROR`* | 12 | +| 0xD |*`CUFFT_NO_WORKSPACE`* |*`HIPFFT_NO_WORKSPACE`* | 13 | +| 0xE |*`CUFFT_NOT_IMPLEMENTED`* |*`HIPFFT_NOT_IMPLEMENTED`* | 14 | +| 0xF |*`CUFFT_LICENSE_ERROR`* | | +| 0x10 |*`CUFFT_NOT_SUPPORTED`* |*`HIPFFT_NOT_SUPPORTED`* | 16 | +| float |***`cufftReal`*** |***`hipfftReal`*** | +| double |***`cufftDoubleReal`*** |***`hipfftDoubleReal`*** | +| float2 |***`cufftComplex`*** |***`hipfftComplex`*** | +| double2 |***`cufftDoubleComplex`*** |***`hipfftDoubleComplex`*** | +| define |`CUFFT_FORWARD` |`HIPFFT_FORWARD` | +| define |`CUFFT_INVERSE` |`HIPFFT_BACKWARD` | +| enum |***`cufftType_t`*** |***`hipfftType_t`*** | +| enum |***`cufftType`*** |***`hipfftType`*** | +| 0x2a |*`CUFFT_R2C`* |*`HIPFFT_R2C`* | +| 0x2c |*`CUFFT_C2R`* |*`HIPFFT_C2R`* | +| 0x29 |*`CUFFT_C2C`* |*`HIPFFT_C2C`* | +| 0x6a |*`CUFFT_D2Z`* |*`HIPFFT_D2Z`* | +| 0x6c |*`CUFFT_Z2D`* |*`HIPFFT_Z2D`* | +| 0x69 |*`CUFFT_Z2Z`* |*`HIPFFT_Z2Z`* | +| enum |***`cufftCompatibility_t`*** | | +| enum |***`cufftCompatibility`*** | | +| 0x01 |*`CUFFT_COMPATIBILITY_FFTW_PADDING`* | | +| define |`CUFFT_COMPATIBILITY_DEFAULT` | | +| int |***`cufftHandle`*** |***`hipfftHandle`*** | + +## **2. CUFFT API functions** + +| **CUDA** | **HIP** | +|-----------------------------------------------------------|-------------------------------------------------| +|`cufftPlan1d` |`hipfftPlan1d` | +|`cufftPlan2d` |`hipfftPlan2d` | +|`cufftPlan3d` |`hipfftPlan3d` | +|`cufftPlanMany` |`hipfftPlanMany` | +|`cufftMakePlan1d` |`hipfftMakePlan1d` | +|`cufftMakePlan2d` |`hipfftMakePlan2d` | +|`cufftMakePlan3d` |`hipfftMakePlan3d` | +|`cufftMakePlanMany` |`hipfftMakePlanMany` | +|`cufftMakePlanMany64` |`hipfftMakePlanMany64` | +|`cufftGetSizeMany64` |`hipfftGetSizeMany64` | +|`cufftEstimate1d` |`hipfftEstimate1d` | +|`cufftEstimate2d` |`hipfftEstimate2d` | +|`cufftEstimate3d` |`hipfftEstimate3d` | +|`cufftEstimateMany` |`hipfftEstimateMany` | +|`cufftCreate` |`hipfftCreate` | +|`cufftGetSize1d` |`hipfftGetSize1d` | +|`cufftGetSize2d` |`hipfftGetSize2d` | +|`cufftGetSize3d` |`hipfftGetSize3d` | +|`cufftGetSizeMany` |`hipfftGetSizeMany` | +|`cufftGetSize` |`hipfftGetSize` | +|`cufftSetWorkArea` |`hipfftSetWorkArea` | +|`cufftSetAutoAllocation` |`hipfftSetAutoAllocation` | +|`cufftExecC2C` |`hipfftExecC2C` | +|`cufftExecR2C` |`hipfftExecR2C` | +|`cufftExecC2R` |`hipfftExecC2R` | +|`cufftExecZ2Z` |`hipfftExecZ2Z` | +|`cufftExecD2Z` |`hipfftExecD2Z` | +|`cufftExecZ2D` |`hipfftExecZ2D` | +|`cufftSetStream` |`hipfftSetStream` | +|`cufftDestroy` |`hipfftDestroy` | +|`cufftGetVersion` |`hipfftGetVersion` | +|`cufftGetProperty` | | diff --git a/projects/clr/hipamd/hipify-clang/README.md b/projects/clr/hipamd/hipify-clang/README.md index e099085ca6..fdb37d2e2d 100644 --- a/projects/clr/hipamd/hipify-clang/README.md +++ b/projects/clr/hipamd/hipify-clang/README.md @@ -6,19 +6,30 @@ -- [Using hipify-clang](#using-hipify-clang) - * [Build and install](#build-and-install) - * [Running and using hipify-clang](#running-and-using-hipify-clang) +- [Supported CUDA APIs](#cuda-apis) +- [Dependencies](#dependencies) +- [Build and install](#build-and-install) + * [Building](#building) + * [Testing](#testing) + * [Windows](#windows) +- [Running and using hipify-clang](#running-and-using-hipify-clang) - [Disclaimer](#disclaimer) -## Build and install +##Supported CUDA APIs -### Dependencies +- [Runtime API](../docs/markdown/CUDA_Runtime_API_functions_supported_by_HIP.md) +- [Driver API](../docs/markdown/CUDA_Driver_API_functions_supported_by_HIP.md) +- [cuBLAS](../docs/markdown/CUBLAS_API_supported_by_HIP.md) +- [cuRAND](../docs/markdown/CURAND_API_supported_by_HIP.md) +- [cuDNN](../docs/markdown/CUDNN_API_supported_by_HIP.md) +- [cuFFT](../docs/markdown/CUFFT_API_supported_by_HIP.md) + +##Dependencies `hipify-clang` requires: -1. LLVM+CLANG of at least version 3.8.0, latest stable release is 6.0.0. +1. LLVM+CLANG of at least version 3.8.0, latest stable and recommended release is 6.0.1. 2. CUDA at least version 7.5, latest supported release is 9.0. | **LLVM release version** | **CUDA latest supported version** | @@ -38,10 +49,11 @@ 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](http://releases.llvm.org/), build or install it, and set -[CMAKE_PREFIX_PATH](https://cmake.org/cmake/help/v3.0/variable/CMAKE_PREFIX_PATH.html) so `cmake` can find it; for instance: `-DCMAKE_PREFIX_PATH=f:\LLVM\6.0.0\dist` +[CMAKE_PREFIX_PATH](https://cmake.org/cmake/help/v3.10/variable/CMAKE_PREFIX_PATH.html) so `cmake` can find it; for instance: `-DCMAKE_PREFIX_PATH=f:\LLVM\6.0.1\dist` -### Build +##Build and install +###Build Assuming this repository is at `./HIP`: @@ -64,14 +76,14 @@ 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 +###Test `hipify-clang` has unit tests using LLVM [`lit`](https://llvm.org/docs/CommandGuide/lit.html)/[`FileCheck`](https://llvm.org/docs/CommandGuide/FileCheck.html). **LLVM+CLANG should be built from sources, Pre-Built Binaries are not exhaustive for testing.** To run it: -1. Download [`LLVM`](http://releases.llvm.org/6.0.0/llvm-6.0.0.src.tar.xz)+[`CLANG`](http://releases.llvm.org/6.0.0/cfe-6.0.0.src.tar.xz) sources. +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 @@ -110,21 +122,21 @@ To run it: 6. Ensure `lit` and `FileCheck` are installed - these are distributed with LLVM. * installing `lit` into `python` might be required: - `python f:/LLVM/6.0.0/llvm/utils/lit/setup.py install`, + `python f:/LLVM/6.0.1/llvm/utils/lit/setup.py install`, - where `f:/LLVM/6.0.0/llvm` is LLVM sources root directory. + where `f:/LLVM/6.0.1/llvm` is LLVM sources root directory. - * Starting with LLVM 6.0.0 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.py script should be specified by the `LLVM_EXTERNAL_LIT` option: - `-DLLVM_EXTERNAL_LIT=f:/LLVM/6.0.0/build/Release/bin/llvm-lit.py`, + `-DLLVM_EXTERNAL_LIT=f:/LLVM/6.0.1/build/Release/bin/llvm-lit.py`, - where `f:/LLVM/6.0.0/build/Release` is LLVM build directory. + where `f:/LLVM/6.0.1/build/Release` is LLVM build directory. 7. Build with the `HIPIFY_CLANG_TESTS` option turned on: -DHIPIFY_CLANG_TESTS=1. 8. `make test-hipify` 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`. -### Windows +###Windows On Windows the following configurations are tested: @@ -144,30 +156,30 @@ cmake -DHIPIFY_CLANG_TESTS=1 \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=../dist \ - -DCMAKE_PREFIX_PATH=f:/LLVM/6.0.0/dist \ + -DCMAKE_PREFIX_PATH=f:/LLVM/6.0.1/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/Release/bin/llvm-lit.py \ + -DLLVM_EXTERNAL_LIT=f:/LLVM/6.0.1/build/Release/bin/llvm-lit.py \ -Thost=x64 .. ``` A corresponding successful output: ```shell --- 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 LLVM 6.0.1: +-- - CMake module path: F:/LLVM/6.0.1/dist/lib/cmake/llvm +-- - Include path : F:/LLVM/6.0.1/dist/include +-- - Binary path : F:/LLVM/6.0.1/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 FileCheck: F:/LLVM/6.0.1/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 +##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. @@ -188,7 +200,7 @@ may be useful. For a list of `hipify-clang` options, run `hipify-clang --help`. -## Disclaimer +##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. diff --git a/projects/clr/hipamd/hipify-clang/src/CUDA2HipMap.cpp b/projects/clr/hipamd/hipify-clang/src/CUDA2HipMap.cpp index 63c294ac34..ca53738abb 100644 --- a/projects/clr/hipamd/hipify-clang/src/CUDA2HipMap.cpp +++ b/projects/clr/hipamd/hipify-clang/src/CUDA2HipMap.cpp @@ -395,7 +395,10 @@ const std::map CUDA_INCLUDE_MAP{ {"curand_uniform.h", {"hiprand_kernel.h", CONV_INCLUDE, API_RAND}}, // CUDNN includes - {"cudnn.h", {"hipDNN.h", CONV_INCLUDE_CUDA_MAIN_H, API_RAND}}, + {"cudnn.h", {"hipDNN.h", CONV_INCLUDE_CUDA_MAIN_H, API_DNN}}, + + // CUDNN includes + {"cufft.h", {"hipfft.h", CONV_INCLUDE_CUDA_MAIN_H, API_FFT}}, // HIP includes // TODO: uncomment this when hip/cudacommon.h will be renamed to hip/hipcommon.h @@ -3161,7 +3164,7 @@ const std::map CUDA_IDENTIFIER_MAP{ {"cudnnDebug_t", {"hipdnnDebug_t", CONV_TYPE, API_DNN, HIP_UNSUPPORTED}}, {"cudnnCallback_t", {"hipdnnCallback_t", CONV_TYPE, API_DNN, HIP_UNSUPPORTED}}, - ///////////////////////////// cuDNN functions ///////////////////////////// + ///////////////////////////// cuDNN functions ///////////////////////////// {"cudnnGetVersion", {"hipdnnGetVersion", CONV_VERSION, API_DNN}}, {"cudnnGetCudartVersion", {"hipdnnGetCudartVersion", CONV_VERSION, API_DNN, HIP_UNSUPPORTED}}, {"cudnnQueryRuntimeError", {"hipdnnQueryRuntimeError", CONV_VERSION, API_DNN, HIP_UNSUPPORTED}}, @@ -3193,7 +3196,7 @@ const std::map CUDA_IDENTIFIER_MAP{ {"cudnnDestroyOpTensorDescriptor", {"hipdnnDestroyOpTensorDescriptor", CONV_MATH_FUNC, API_DNN}}, {"cudnnOpTensor", {"hipdnnOpTensor", CONV_MATH_FUNC, API_DNN}}, - // cuDNN Reduce Tensor functions + // cuDNN Reduce Tensor functions {"cudnnCreateReduceTensorDescriptor", {"hipdnnCreateReduceTensorDescriptor", CONV_MATH_FUNC, API_DNN}}, {"cudnnSetReduceTensorDescriptor", {"hipdnnSetReduceTensorDescriptor", CONV_MATH_FUNC, API_DNN}}, {"cudnnGetReduceTensorDescriptor", {"hipdnnGetReduceTensorDescriptor", CONV_MATH_FUNC, API_DNN}}, @@ -3206,7 +3209,7 @@ const std::map CUDA_IDENTIFIER_MAP{ // cuDNN Filter functions {"cudnnCreateFilterDescriptor", {"hipdnnCreateFilterDescriptor", CONV_MATH_FUNC, API_DNN}}, - {"cudnnSetFilter4dDescriptor", {"hipdnnSetFilter4dDescriptor", CONV_MATH_FUNC, API_DNN, HIP_UNSUPPORTED}}, + {"cudnnSetFilter4dDescriptor", {"hipdnnSetFilter4dDescriptor", CONV_MATH_FUNC, API_DNN}}, {"cudnnGetFilter4dDescriptor", {"hipdnnGetFilter4dDescriptor", CONV_MATH_FUNC, API_DNN, HIP_UNSUPPORTED}}, {"cudnnSetFilterNdDescriptor", {"hipdnnSetFilterNdDescriptor", CONV_MATH_FUNC, API_DNN}}, {"cudnnGetFilterNdDescriptor", {"hipdnnGetFilterNdDescriptor", CONV_MATH_FUNC, API_DNN}}, @@ -3365,6 +3368,85 @@ const std::map CUDA_IDENTIFIER_MAP{ {"cudnnGetAlgorithmSpaceSize", {"hipdnnGetAlgorithmSpaceSize", CONV_MATH_FUNC, API_DNN, HIP_UNSUPPORTED}}, {"cudnnSaveAlgorithm", {"hipdnnSaveAlgorithm", CONV_MATH_FUNC, API_DNN, HIP_UNSUPPORTED}}, {"cudnnRestoreAlgorithm", {"hipdnnRestoreAlgorithm", CONV_MATH_FUNC, API_DNN, HIP_UNSUPPORTED}}, + + ///////////////////////////// cuFFT ///////////////////////////// + // cuFFT defines + {"CUFFT_FORWARD", {"HIPFFT_FORWARD", CONV_NUMERIC_LITERAL, API_DNN}}, // -1 + {"CUFFT_INVERSE", {"HIPFFT_BACKWARD", CONV_NUMERIC_LITERAL, API_DNN}}, // 1 + {"CUFFT_COMPATIBILITY_DEFAULT", {"HIPFFT_COMPATIBILITY_DEFAULT", CONV_NUMERIC_LITERAL, API_DNN, HIP_UNSUPPORTED}}, // CUFFT_COMPATIBILITY_FFTW_PADDING + + // cuFFT enums + {"cufftResult_t", {"hipfftResult_t", CONV_TYPE, API_FFT}}, + {"cufftResult", {"hipfftResult", CONV_TYPE, API_FFT}}, + {"CUFFT_SUCCESS", {"HIPFFT_SUCCESS", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x0 0 + {"CUFFT_INVALID_PLAN", {"HIPFFT_INVALID_PLAN", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x1 1 + {"CUFFT_ALLOC_FAILED", {"HIPFFT_ALLOC_FAILED", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x2 2 + {"CUFFT_INVALID_TYPE", {"HIPFFT_INVALID_TYPE", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x3 3 + {"CUFFT_INVALID_VALUE", {"HIPFFT_INVALID_VALUE", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x4 4 + {"CUFFT_INTERNAL_ERROR", {"HIPFFT_INTERNAL_ERROR", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x5 5 + {"CUFFT_EXEC_FAILED", {"HIPFFT_EXEC_FAILED", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x6 6 + {"CUFFT_SETUP_FAILED", {"HIPFFT_SETUP_FAILED", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x7 7 + {"CUFFT_INVALID_SIZE", {"HIPFFT_INVALID_SIZE", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x8 8 + {"CUFFT_UNALIGNED_DATA", {"HIPFFT_UNALIGNED_DATA", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x9 9 + {"CUFFT_INCOMPLETE_PARAMETER_LIST", {"HIPFFT_INCOMPLETE_PARAMETER_LIST", CONV_NUMERIC_LITERAL, API_FFT}}, // 0xA 10 + {"CUFFT_INVALID_DEVICE", {"HIPFFT_INVALID_DEVICE", CONV_NUMERIC_LITERAL, API_FFT}}, // 0xB 11 + {"CUFFT_PARSE_ERROR", {"HIPFFT_PARSE_ERROR", CONV_NUMERIC_LITERAL, API_FFT}}, // 0xC 12 + {"CUFFT_NO_WORKSPACE", {"HIPFFT_NO_WORKSPACE", CONV_NUMERIC_LITERAL, API_FFT}}, // 0xD 13 + {"CUFFT_NOT_IMPLEMENTED", {"HIPFFT_NOT_IMPLEMENTED", CONV_NUMERIC_LITERAL, API_FFT}}, // 0xE 14 + {"CUFFT_LICENSE_ERROR", {"HIPFFT_LICENSE_ERROR", CONV_NUMERIC_LITERAL, API_FFT, HIP_UNSUPPORTED}}, + {"CUFFT_NOT_SUPPORTED", {"HIPFFT_NOT_SUPPORTED", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x10 16 + {"cufftType_t", {"hipfftType_t", CONV_TYPE, API_FFT}}, + {"cufftType", {"hipfftType", CONV_TYPE, API_FFT}}, + {"CUFFT_R2C", {"HIPFFT_R2C", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x2a + {"CUFFT_C2R", {"HIPFFT_C2R", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x2c + {"CUFFT_C2C", {"HIPFFT_C2C", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x29 + {"CUFFT_D2Z", {"HIPFFT_D2Z", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x6a + {"CUFFT_Z2D", {"HIPFFT_Z2D", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x6c + {"CUFFT_Z2Z", {"HIPFFT_Z2Z", CONV_NUMERIC_LITERAL, API_FFT}}, // 0x69 + {"cufftCompatibility_t", {"hipfftCompatibility_t", CONV_TYPE, API_FFT, HIP_UNSUPPORTED}}, + {"cufftCompatibility", {"hipfftCompatibility", CONV_TYPE, API_FFT, HIP_UNSUPPORTED}}, + {"CUFFT_COMPATIBILITY_FFTW_PADDING", {"HIPFFT_COMPATIBILITY_FFTW_PADDING", CONV_NUMERIC_LITERAL, API_FFT, HIP_UNSUPPORTED}}, // 0x01 + + // cuFFT types + {"cufftReal", {"hipfftReal", CONV_TYPE, API_FFT}}, + {"cufftDoubleReal", {"hipfftDoubleReal", CONV_TYPE, API_FFT}}, + {"cufftComplex", {"hipfftComplex", CONV_TYPE, API_FFT}}, + {"cufftDoubleComplex", {"hipfftDoubleComplex", CONV_TYPE, API_FFT}}, + {"cufftHandle", {"hipfftHandle", CONV_TYPE, API_FFT}}, + + ///////////////////////////// cuFFT functions ///////////////////////////// + {"cufftPlan1d", {"hipfftPlan1d", CONV_MATH_FUNC, API_FFT}}, + {"cufftPlan2d", {"hipfftPlan2d", CONV_MATH_FUNC, API_FFT}}, + {"cufftPlan3d", {"hipfftPlan3d", CONV_MATH_FUNC, API_FFT}}, + {"cufftPlanMany", {"hipfftPlanMany", CONV_MATH_FUNC, API_FFT}}, + {"cufftMakePlan1d", {"hipfftMakePlan1d", CONV_MATH_FUNC, API_FFT}}, + {"cufftMakePlan2d", {"hipfftMakePlan2d", CONV_MATH_FUNC, API_FFT}}, + {"cufftMakePlan3d", {"hipfftMakePlan3d", CONV_MATH_FUNC, API_FFT}}, + {"cufftMakePlanMany", {"hipfftMakePlanMany", CONV_MATH_FUNC, API_FFT}}, + {"cufftMakePlanMany64", {"hipfftMakePlanMany64", CONV_MATH_FUNC, API_FFT}}, + {"cufftGetSizeMany64", {"hipfftGetSizeMany64", CONV_MATH_FUNC, API_FFT}}, + {"cufftEstimate1d", {"hipfftEstimate1d", CONV_MATH_FUNC, API_FFT}}, + {"cufftEstimate2d", {"hipfftEstimate2d", CONV_MATH_FUNC, API_FFT}}, + {"cufftEstimate3d", {"hipfftEstimate3d", CONV_MATH_FUNC, API_FFT}}, + {"cufftEstimateMany", {"hipfftEstimateMany", CONV_MATH_FUNC, API_FFT}}, + {"cufftCreate", {"hipfftCreate", CONV_MATH_FUNC, API_FFT}}, + {"cufftGetSize1d", {"hipfftGetSize1d", CONV_MATH_FUNC, API_FFT}}, + {"cufftGetSize2d", {"hipfftGetSize2d", CONV_MATH_FUNC, API_FFT}}, + {"cufftGetSize3d", {"hipfftGetSize3d", CONV_MATH_FUNC, API_FFT}}, + {"cufftGetSizeMany", {"hipfftGetSizeMany", CONV_MATH_FUNC, API_FFT}}, + {"cufftGetSize", {"hipfftGetSize", CONV_MATH_FUNC, API_FFT}}, + {"cufftSetWorkArea", {"hipfftSetWorkArea", CONV_MATH_FUNC, API_FFT}}, + {"cufftSetAutoAllocation", {"hipfftSetAutoAllocation", CONV_MATH_FUNC, API_FFT}}, + {"cufftExecC2C", {"hipfftExecC2C", CONV_MATH_FUNC, API_FFT}}, + {"cufftExecR2C", {"hipfftExecR2C", CONV_MATH_FUNC, API_FFT}}, + {"cufftExecC2R", {"hipfftExecC2R", CONV_MATH_FUNC, API_FFT}}, + {"cufftExecZ2Z", {"hipfftExecZ2Z", CONV_MATH_FUNC, API_FFT}}, + {"cufftExecD2Z", {"hipfftExecD2Z", CONV_MATH_FUNC, API_FFT}}, + {"cufftExecZ2D", {"hipfftExecZ2D", CONV_MATH_FUNC, API_FFT}}, + {"cufftSetStream", {"hipfftSetStream", CONV_MATH_FUNC, API_FFT}}, + {"cufftDestroy", {"hipfftDestroy", CONV_MATH_FUNC, API_FFT}}, + {"cufftGetVersion", {"hipfftGetVersion", CONV_MATH_FUNC, API_FFT}}, + {"cufftGetProperty", {"hipfftGetProperty", CONV_MATH_FUNC, API_FFT, HIP_UNSUPPORTED}}, }; const std::map& CUDA_RENAMES_MAP() { diff --git a/projects/clr/hipamd/hipify-clang/src/HipifyAction.cpp b/projects/clr/hipamd/hipify-clang/src/HipifyAction.cpp index 21b16e0699..20bc9dcc2c 100644 --- a/projects/clr/hipamd/hipify-clang/src/HipifyAction.cpp +++ b/projects/clr/hipamd/hipify-clang/src/HipifyAction.cpp @@ -164,6 +164,10 @@ bool HipifyAction::Exclude(const hipCounter & hipToken) { if (insertedDNNHeader) { return true; } insertedDNNHeader = true; return false; + case API_FFT: + if (insertedFFTHeader) { return true; } + insertedFFTHeader = true; + return false; default: return false; } diff --git a/projects/clr/hipamd/hipify-clang/src/HipifyAction.h b/projects/clr/hipamd/hipify-clang/src/HipifyAction.h index af75f93063..ad987c921e 100644 --- a/projects/clr/hipamd/hipify-clang/src/HipifyAction.h +++ b/projects/clr/hipamd/hipify-clang/src/HipifyAction.h @@ -28,6 +28,7 @@ private: bool insertedRANDHeader = false; bool insertedRAND_kernelHeader = false; bool insertedDNNHeader = false; + bool insertedFFTHeader = false; bool firstHeader = false; bool pragmaOnce = false; clang::SourceLocation firstHeaderLoc; diff --git a/projects/clr/hipamd/hipify-clang/src/Statistics.cpp b/projects/clr/hipamd/hipify-clang/src/Statistics.cpp index 13d4c3effc..595f243857 100644 --- a/projects/clr/hipamd/hipify-clang/src/Statistics.cpp +++ b/projects/clr/hipamd/hipify-clang/src/Statistics.cpp @@ -14,7 +14,7 @@ const char *counterNames[NUM_CONV_TYPES] = { }; const char *apiNames[NUM_API_TYPES] = { - "CUDA Driver API", "CUDA RT API", "CUBLAS API", "CURAND API", "CUDNN API" + "CUDA Driver API", "CUDA RT API", "CUBLAS API", "CURAND API", "CUDNN API", "CUFFT API" }; namespace { diff --git a/projects/clr/hipamd/hipify-clang/src/Statistics.h b/projects/clr/hipamd/hipify-clang/src/Statistics.h index 77bf9b0518..00ecce3eda 100644 --- a/projects/clr/hipamd/hipify-clang/src/Statistics.h +++ b/projects/clr/hipamd/hipify-clang/src/Statistics.h @@ -57,6 +57,7 @@ enum ApiTypes { API_BLAS, API_RAND, API_DNN, + API_FFT, API_LAST }; constexpr int NUM_API_TYPES = (int) ApiTypes::API_LAST; diff --git a/projects/clr/hipamd/tests/hipify-clang/cuFFT/simple_cufft.cu b/projects/clr/hipamd/tests/hipify-clang/cuFFT/simple_cufft.cu new file mode 100644 index 0000000000..906fe93853 --- /dev/null +++ b/projects/clr/hipamd/tests/hipify-clang/cuFFT/simple_cufft.cu @@ -0,0 +1,78 @@ +// RUN: %run_test hipify "%s" "%t" %cuda_args + +// CHECK: #include +#include +// CHECK: #include +#include +#include +#include + +#define DATASIZE 8 +#define BATCH 2 + +#define gpuErrchk(ans) { gpuAssert((ans), __FILE__, __LINE__); } +// CHECK: inline void gpuAssert(hipError_t code, const char *file, int line, bool abort = true) +inline void gpuAssert(cudaError_t code, const char *file, int line, bool abort = true) +{ + // CHECK: if (code != hipSuccess) + if (code != cudaSuccess) + { + // CHECK: fprintf(stderr, "GPUassert: %s %s %dn", hipGetErrorString(code), file, line); + fprintf(stderr, "GPUassert: %s %s %dn", cudaGetErrorString(code), file, line); + if (abort) exit(code); + } +} + +int main() +{ + // --- Host side input data allocation and initialization + // CHECK: hipfftReal *hostInputData = (hipfftReal*)malloc(DATASIZE*BATCH * sizeof(hipfftReal)); + cufftReal *hostInputData = (cufftReal*)malloc(DATASIZE*BATCH * sizeof(cufftReal)); + for (int i = 0; iHost copy of the results + // CHECK: gpuErrchk(hipMemcpy(hostOutputData, deviceOutputData, (DATASIZE / 2 + 1) * BATCH * sizeof(hipfftComplex), hipMemcpyDeviceToHost)); + gpuErrchk(cudaMemcpy(hostOutputData, deviceOutputData, (DATASIZE / 2 + 1) * BATCH * sizeof(cufftComplex), cudaMemcpyDeviceToHost)); + + for (int i = 0; i +// CHECK: #include "hipfft.h" + #include #include @@ -91,3 +93,5 @@ #include "curand_uniform.h" #include + +#include "cufft.h"