Commit Graph

53 Commits

Author SHA1 Message Date
Evgeny Mankov 58906beac9 [HIPIFY] Fix build failure against ToT trunk LLVM 11.0.0
+ Add an explicit cast when assigning StringRef to std::string
2020-02-01 14:41:16 +03:00
Evgeny Mankov 93bc9c9195 [HIPIFY] Clang style formatting 2019-11-07 12:48:05 +03:00
Evgeny Mankov c87ab05fc6 [HIPIFY] Add a compatibility for CharSourceRange if LLVM < 7 2019-11-06 14:30:39 +03:00
Evgeny Mankov 976f8e8bf6 [HIPIFY][#1409] Fix for kernel launch macro expansion
+ Add a corresponding test kernel_launch_01.cu
+ Add isBefore() check to avoid crash on Replacement with negative length

TODO:
+ Compatibility with former LLVM versions
+ More complicated kernel launch tests
2019-11-05 14:00:13 +03:00
Evgeny Mankov 98874c0e7f [HIPIFY][CUB][#1460] Add "using namespace cub" translation support
+ Add cub_03.cu
2019-10-18 18:51:40 +03:00
Evgeny Mankov edfd05a86d [HIPIFY][CUB][#1460] Add cub:: namespace support in TemplateInstantiation of cudaLaunchKernel
+ Update cub_02.cu test accordingly
2019-10-16 19:02:13 +03:00
Evgeny Mankov 809a67a4f6 [HIPIFY] Refactor a couple of matcher functions
+ Separate out GetSubstrLocation function for finding substr SourceLocation in a given SourceRange
2019-10-16 13:43:56 +03:00
Evgeny Mankov 6960574850 [HIPIFY][CUB][#1460] Implement cubFunctionTemplateDecl matcher
+ Add cub_02.cu test
+ Partial fixes #1460
2019-10-16 13:08:11 +03:00
Evgeny Mankov c0f62157f9 [HIPIFY] HipifyAction code clean-up 2019-10-14 18:08:29 +03:00
Evgeny Mankov 277d3b8369 [HIPIFY][CUB] Initial support (hipify-clang only)
+ Add one matcher (will be more)
+ Update Maps and Statistics
+ Add cub_01.cu unit test
+ Update lit harness to support standalone CUB
+ Update README.md
+ Update hipify-perl (only CUB header is supported for now)

[IMPORTANT]
clang (and hipify-clang) works correctly only with official NVLabs version on GitHub.
Compilation of CUB from official CUDA release has conflicts with THRUST.
Thus, to compile CUB sources, option "-I" should be specified to the cloned CUB from NVLAB on GitHub.
2019-10-14 11:55:55 +03:00
Evgeny Mankov 6bb9913e8a [HIPIFY] Return to wrapping with HIP_KERNEL_NAME(...) macro of a template instantiation kernel launch
[REASON]

1. hip-clang is fine with the templated kernel launch, brackets are unneeded: HIP_KERNEL_NAME(...) __VA_ARGS__
2. HCC is not, thus: HIP_KERNEL_NAME(...) (__VA_ARGS__)

[TODO] Clean-up entirely kernel name wrapping when HCC is finally obsolete.

+ Update perl generation, hipify-perl, and affected tests accordingly.
2019-10-02 16:01:07 +03:00
Evgeny Mankov 76a439f4c0 [HIPIFY] Reconcile transformation (statistics) types between hipify-clang and hipify-perl
+ Update hipify-perl accordingly
2019-09-29 17:33:37 +03:00
Evgeny Mankov 9d1d4b78e3 [HIPIFY][#1439] Add reinterpret_cast to args of some functions
+ Perl part of [#1458]
+ Affected functions: hipFuncSetCacheConfig, hipFuncGetAttributes
+ Implement function generateHostFunctions() in hipify-clang for that purposes
+ Update hipify-perl accordingly
2019-09-25 18:53:17 +03:00
Evgeny Mankov 84baa83a25 [HIPIFY] HipifyAction refactoring
+ Merge of cudaSymbolFuncCall and cudaReinterpretCastArgFuncCall matchers into a single cudaHostFuncCall matcher
+ More const std::string declarations
+ Formatting
2019-09-24 10:33:51 +03:00
Evgeny Mankov dd6a92afb7 [HIPIFY][#1439] Add reinterpret_cast to args of some functions
+ Affected functions: hipFuncSetCacheConfig, hipFuncGetAttributes
+ Add a corresponding Matcher cudaReinterpretCastArgFuncCall
+ Add reinterpret_cast.cu test

TODO: Do the same for hipify-perl
2019-09-24 09:44:17 +03:00
Evgeny Mankov 1b989bcb8d [HIPIFY][#1435][perl] Add HIP_SYMBOL wrapper to the templated Device Symbol argument of the following functions:
cudaMemcpyToSymbol, cudaMemcpyToSymbolAsync, cudaGetSymbolSize, cudaGetSymbolAddress, cudaMemcpyFromSymbol, cudaMemcpyFromSymbolAsync

+ Perl part of [#1441]
+ Implement function generateSymbolFunctions() in hipify-clang for that purposes
+ Update hipify-perl

TODO: Eliminate dim3() issue in hipify-perl as well
2019-09-21 07:33:17 +03:00
Evgeny Mankov 3722d5b4b9 [HIPIFY][#1435] Add HIP_SYMBOL wrapper to the templated Device Symbol argument of the following functions:
cudaMemcpyToSymbol, cudaMemcpyToSymbolAsync, cudaGetSymbolSize, cudaGetSymbolAddress, cudaMemcpyFromSymbol, cudaMemcpyFromSymbolAsync

+ Add a corresponding cudaSymbolFuncCall matcher.
+ Add device_symbols.cu test for the above 6 functions, update existed.
+ Fix dim3() type cast issue, update affected tests.

TODO: Do the same in hipify-perl
2019-09-19 19:33:42 +03:00
Evgeny Mankov 042c125601 [HIPIFY] Add supported device functions (from math_functions.h)
+ [perl] Add generation of sub countSupportedDeviceFunctions
+ [FIX] Do not perform any replacement for supported device functions
+ [perl] Sync hipify-perl accordingly
2019-09-17 16:17:28 +03:00
Evgeny Mankov 56ab105e9d [HIPIFY][#1400] Fix Template Instantiation kernel launch (clang & perl)
+ Enclose template instantiation kernel calls into round brackets, leave regular kernel names unchanged (hipify-perl doesn't handle cases with macros).
+ Fix corresponding tests.

PS. hipify-perl couldn't handle correctly the following cases due to macros expansion disability, thus hipify-clang should be used instead:

#define KERNEL_NAME_MACRO axpy<float>
#define KERNEL_CALL_MACRO axpy<float><<<1, 2>>>
#define KERNEL_ARG_LIST_MACRO a, x, y

// CUDA:
KERNEL_NAME_MACRO<<<1, 2>>>(KERNEL_ARG_LIST_MACRO);
KERNEL_CALL_MACRO(KERNEL_ARG_LIST_MACRO);

// hipify-perl:
hipLaunchKernelGGL(KERNEL_NAME_MACRO, dim3(1), dim3(2), 0, 0, KERNEL_ARG_LIST_MACRO);
KERNEL_CALL_MACRO(KERNEL_ARG_LIST_MACRO);

// hipify-clang:
hipLaunchKernelGGL((KERNEL_NAME_MACRO), dim3(1), dim3(2), 0, 0, KERNEL_ARG_LIST_MACRO);
hipLaunchKernelGGL((axpy<float>), dim3(1), dim3(2), 0, 0, KERNEL_ARG_LIST_MACRO);
2019-09-10 15:59:06 +03:00
Evgeny Mankov 6602fadc16 [HIPIFY] Add device functions support
+ Add a corresponding matcher cudaDeviceFuncCall to match only (__device__ or __global__) and not __host__ functions.
+ Add a corresponding device functions mapping:
  only unsupported are listed, cause supported are exactly the same as of CUDA and do not need transformation;
  make FindAndReplace for device functions separated from host API calls.
+ Add a test to distinguish device functions and user-defined.
2019-09-06 18:34:12 +03:00
Evgeny Mankov 24be21495d [HIPIFY][#207][fix] Translate all preprocessor's conditional blocks
+ Start to translate preprocessor's false conditional blocks too:
  based on clang's https://reviews.llvm.org/D66597;
  available only starting from LLVM 10.0 or trunk.
+ Option -skip-excluded-preprocessor-conditional-blocks for skipping excluded conditional blocks:
  the default behavior for hipify-clang built with LLVM < 10.0;
  false by default for hipify-clang built with LLVM 10 or trunk.
+ Add 4 preprocessor unit tests, 2 of which are LLVM 10.0 only
+ Update couple of existing tests by setting -skip-excluded-preprocessor-conditional-blocks option:
  update lit testing accordingly
2019-08-28 21:17:35 +03:00
Evgeny Mankov 25075729f9 [HIPIFY][fix][#211] Taking into account include guard controlling macro
...while including HIP main header file, which is inserted now after #indef controlling macro, or after #pragma once, if it's occurred earlier.

+ Add a couple of unit tests.
ToDo: Check backward compatibility on older clang versions.
2019-08-02 16:46:45 +03:00
Evgeny Mankov d19fcbcde4 [HIPIFY][#1239] Fix an assert 2019-07-22 22:13:54 +03:00
Evgeny Mankov c7a2b4e492 [HIPIFY] Add device texture fetch functions support
+ Add a corresponding reverse engineered sample tex2dKernel with texture template
2019-05-23 12:47:08 +03:00
Evgeny Mankov fa3dda9107 [HIPIFY][fix][#1109] Do not preserve extern __shared__ for IncompleteArrayType
+ Update tests accordingly
2019-05-15 20:05:56 +03:00
Evgeny Mankov 7ba8c440e6 [HIPIFY][RAND] revise
+ add missing functions
+ add minimum rocRAND support
+ updated CURAND_API_supported_by_HIP.md
2019-02-08 17:54:28 +03:00
Evgeny Mankov e93fe78648 [HIPIFY][BLAS] Restrict hipification to 'ROC' to BLAS library only
+ Add utility functions isToRoc, isHipUnsupported, isRocUnsupported, isUnsupported
2019-02-07 13:17:05 +03:00
emankov fcaf954998 [HIPIFY] Add the legal right comment to all the sources 2018-12-20 18:47:57 +03:00
Evgeny Mankov c5ed25da22 [HIPIFY] Initial support of translation to ROCm
+ Option '-roc' is added to translate to ROCm instead of HIP
+ Update hipification mechanism accordingly
+ Populate all translation maps with additional field for ROCm identifiers
+ There are 4 degrees of CUDA support now: full support, only by HIP, only by ROCm, unsupported
2018-12-06 21:52:54 +03:00
emankov 30c387a811 [HIPIFY][SPARSE] Initial support 2018-11-20 17:58:05 +03:00
Evgeny Mankov aad5858cb1 [HIPIFY][LLVMCompat] support of upcoming LLVM 8.0
+ StringRef issue, which is finally moved to LLVM from Clang
+ Renamed getBeginLoc() and getEndLoc() resolution for Expr and TypeLoc classes
+ Support all the previous LLVM versions via LLVCompat
2018-11-16 01:23:25 +03:00
Evgeny Mankov a8e6033aa3 [HIPIFY][fix][#739] Fix garbage after replacements
[Issue] https://github.com/ROCm-Developer-Tools/HIP/issues/739
[Resolution] Always use an std::string not a clang::StringRef for replacement

P.S. Occurred only on Linux, on Windows works fine.
2018-10-30 19:35:59 +03:00
Evgeny Mankov f83eabfa9e [HIPIFY] Modify HIP types to conform to CUDA's ones 2018-10-29 20:51:25 +03:00
Evgeny Mankov 5d1255272b [HIPIFY] Split CUDA2HIP map into a number of maps based on API type
[Reasons]
+ Simplify the support
+ Optimize compilation and code generation time

[Additionally]
+ Update minimum required version of cmake
+ Fix MSVC compile options force update
2018-10-23 00:00:10 +03:00
Evgeny Mankov ee3a5cc722 [HIPIFY] Code cleanup and formatting 2018-10-15 15:27:37 +03:00
Evgeny Mankov 368977f75b [HIPIFY][Complex] Add cuComplex support
+ Add API_COMPLEX support (data types and functions)
+ Add cuComplex_API_supported_by_HIP.md
+ Add cuComplex_Julia.cu test
+ Update README.md
2018-08-08 18:34:57 +03:00
Evgeny Mankov 70cfa5e53c [HIPIFY][FFT] Add cuFFT support
+ Add API_FFT support (data types and functions)
+ Add CUFFT_API_supported_by_HIP.md
+ Add simple_cufft.cu test
+ Update README.md
2018-07-31 22:25:48 +03:00
Evgeny Mankov 433e172776 [HIPIFY] Current trunk LLVM 7.0 initial support
Tested with CUDA 8.0, 9.0, 9.1 and 9.2.

Only 8.0 works with LLVM 7.0, due to the changes in LLVM trunc since released 6.0, which works fine with CUDA 8.0 and 9.0.

So, nothing to do in hipify-clang, hope that all the CUDA 9.x related issues will be fixed in 7.0 release.
2018-07-11 20:15:49 +03:00
Evgeny Mankov fe421c89b2 [HIPIFY] Initial cuDNN support
- based on https://github.com/ROCmSoftwarePlatform/hipDNN.
- lit testing was supplemented with CUDA_DNN_ROOT_DIR for cuDNN testing.
- single cuDNN test was added.
2018-05-03 11:33:40 +03:00
Evgeny Mankov 8499e79e2b [HIPIFY] undo apply .clangformat to HIPIFY source files 2018-04-23 20:22:15 +03:00
Maneesh Gupta 1ba06f63c4 Apply .clangformat to all repo source files
Change-Id: I7e79c6058f0303f9a98911e3b7dd2e8596079344
2018-03-12 11:29:03 +05:30
Evgeny Mankov 02e23c4d87 [HIPIFY] InclusionDirective refactoring
Due to support of cuRAND headers.

+ compound test on all headers is added;
+ missing entities are added with updating the doc;
+ a couple cuRAND tests are added (https://github.com/ROCmSoftwarePlatform/rocRAND/tree/master/benchmark):
  - the following CUDA entities are still unsupported by hipRAND:
      curandMakeMTGP32Constants
      curandMakeMTGP32KernelState
      curandGetDirectionVectors32
      curandDirectionVectorSet_t
      CURAND_DIRECTION_VECTORS_32_JOEKUO6
      curandStateSobol64_t
      curandStateScrambledSobol64_t
      curandGenerateLongLong
  - and the following - by HIP:
      cudaRuntimeGetVersion
  - those entities are handled by CHECK-NOT directive for now.
2018-01-29 18:33:47 +03:00
Evgeny Mankov fb1012a4b8 Merge pull request #340 from emankov/master
[HIPIFY][fix] Fix PragmaDirective
2018-01-24 18:09:54 +03:00
Evgeny Mankov 600d5d7c06 [HIPIFY][fix] CUDA and cuBLAS main headers correct handling 2018-01-23 23:43:36 +03:00
Evgeny Mankov 77f807b597 [HIPIFY][fix] Fix PragmaDirective
File location have to be verified, otherwise location of the first found '#pragma once' in any included header even system will be erroneously handled, which might lead to attempt to including hip_runtime.h in it.
2018-01-23 23:06:55 +03:00
Evgeny Mankov e54d9f3df0 Update HipifyAction.cpp
dead code eliminate
2018-01-16 15:08:08 +03:00
Evgeny Mankov 09655a0853 [HIPIFY][fix][#211] Algorithm for explicit insert of hip include directive
If in source CUDA file main header (cuda_runtime.h or cuda.h) is not presented, corresponding HIP main header (hip_runtime.h) should be explicitly included in output hipified file.

[Algorithm]
1. If #pragma once is presented, HIP main header should be placed just after it;
2. Otherwise if any other (not CUDA main) header is presented, HIP main header should be placed just before it;
3. Otherwise HIP main header should be placed in the beginning of output file.

P.S.
There might be one more situation when #ifndef #define ... #endif guard for the entire file is presented (make sense for *.h, *.hpp, *.cuh files). In this case HIP main include should be placed just after such #ifdef, or after #pragma once, if it is also presented. This situation will be handled in a separate change.
2018-01-15 21:05:05 +03:00
Evgeny Mankov 08662fba73 [HIPIFY][fix][#306] Code improve 2018-01-10 21:26:05 +03:00
Evgeny Mankov 7e7cfa10cc [HIPIFY][FIX][#306] Eliminate second cuda main include directive
// hipified to #include<hip/hip_runtime.h>
#include<cuda.h> // 1st cuda main include (Driver API)
// to eliminate
#include<cuda_runtime.h> // 2nd cuda main include (Runtime API)

HIP has one header hip_runtime.h for both CUDA APIs, thus second cuda main include directive is eliminated entirely.
2017-12-26 20:54:54 +03:00
Evgeny Mankov 5d92a6c252 [HIPIFY] Remove cudaBuiltin matcher 2017-12-06 20:22:14 +03:00