-
Kernel: function that uses GPU to execute -
Host: CPU -
Intermediate Representation (IR): Structure that determines how code is executed by a compiler -
LLVM: open-source compiler used to convert CUDA source code into IR's -
RISC-V: open source architecture this project aims to support -
Wrapper Code: provides additional functionality to (reword) -
Object file: Contains bytecode that is generated by a compiler or assembler that needs to be linked together -
Executable: File that helps all code files be fully linked to one another -
Memory Declarations: space for variables -
Barriers: Sync Operation that ensures threads don’t interfere with each other and don’t affect execution of program -
Warps: Group of 32 threads in NVIDIA CUDA framework used to parallel execute -
Threads: Basic unit of execution; used in parallel computing platforms to run multiple operations at once and speed up performance
Below is the architectural diagram for our work, which is taking a CUDA program and making it compatible for RISC-V.
In this diagram, we have 4 stages:
-
Converting kernel and host CUDA source code into seperate IR's
-
Taking the newly created IR and transforming it so it's compatible with Vortex
-
Compiling the transformed IR’s into an Kernel Object file and a Host Object file
-
Linking both object files into an executable binary
As seen in the diagram, CuPBoP:
-
Helps transform the IR’s into ones that are compatible for RISC-V and generates wrapper code
-
Has a run time library that helps link all files together
