added how to use hipcc for kernel compilation

Change-Id: If652316272f21b90516f5a5ed88c17f4f4e77fb0
This commit is contained in:
Aditya Atluri
2016-08-31 13:22:28 -05:00
parent 2f8b2fca6b
commit 6754587ed2
@@ -667,3 +667,22 @@ The following C++ features are not supported:
- Run-time-type information (RTTI)
- Virtual functions
- Try/catch
## Kernel Compilation
HIP now supports compiling C++/HIP kernels to binary. Eventhough HIP does not support fatbinary (yet), the user can specify the target for which the binary can be generated. The file format for binary is `.co` which means Code Object. The following command builds the binary using `hipcc`.
`hipcc --genisa --target-isa=[TARGET GPU] [INPUT FILE] -o [OUTPUT FILE]`
```[TARGET GPU] = fiji/hawaii
[INPUT FILE] = Name of the file containing kernels
[OUTPUT FILE] = Name of the generated code object file```
Note that the kernel file should have `int main(){}` at the end it so that the binary is generated. This happens because HCC generates binaries at linking time rather than compilation
You need 3 things to run kernel in binary.
1. Kernel Binary
2. Name of kernel binary
3. Name of the kernel
We already got first two of them. In order to get name of the kernel, try `objdump -x [OUTPUT FILE]`. OUTPUT FILE is file generated by hipcc during kernel compilation. The output from objdump has symbol to the kernel whose name is mangled with `grid_launch_parm`, `__functor`, `__cxxamp_trampoline`. An example of how it looks is `ZN12_GLOBAL__N_137_Z3Cpy16grid_launch_parmPfS0__functor19__cxxamp_trampolineEiiiiiiPKfPf` where `Cpy` is the name of the kernel written in C++.