From 8afc3a5e3beaaf49870cf014861ddc73a10396ae Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 4 Apr 2025 14:18:56 +0200 Subject: [PATCH] concept and design: continued with architecture --- other/component_diagram_interpreter.drawio | 75 ++++++++++++ other/component_diagram_transpiler.drawio | 84 +++++++++++++ thesis/chapters/conceptdesign.tex | 112 ++++++++++++++---- thesis/chapters/implementation.tex | 2 + thesis/chapters/relwork.tex | 6 +- .../images/component_diagram_interpreter.png | Bin 0 -> 90226 bytes .../images/component_diagram_transpiler.png | Bin 0 -> 93098 bytes thesis/main.pdf | Bin 618319 -> 919 bytes 8 files changed, 255 insertions(+), 24 deletions(-) create mode 100644 other/component_diagram_interpreter.drawio create mode 100644 other/component_diagram_transpiler.drawio create mode 100644 thesis/images/component_diagram_interpreter.png create mode 100644 thesis/images/component_diagram_transpiler.png diff --git a/other/component_diagram_interpreter.drawio b/other/component_diagram_interpreter.drawio new file mode 100644 index 0000000..cf1e777 --- /dev/null +++ b/other/component_diagram_interpreter.drawio @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/other/component_diagram_transpiler.drawio b/other/component_diagram_transpiler.drawio new file mode 100644 index 0000000..2e7fd69 --- /dev/null +++ b/other/component_diagram_transpiler.drawio @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thesis/chapters/conceptdesign.tex b/thesis/chapters/conceptdesign.tex index 7912a18..d4e64fb 100644 --- a/thesis/chapters/conceptdesign.tex +++ b/thesis/chapters/conceptdesign.tex @@ -31,36 +31,104 @@ With these requirements, one possible expression that must be able to be evaluat With this, the capabilities are outlined, however, the input and output data need to further be explained for a better understanding. The first input are the expressions that need to be evaluated. These can have any length and can contain constant values, variables and parameters and all of these are linked together with the supported operations. In the example shown in Figure \ref{fig:input_output_explanation}, there are six expressions $e_1$ through $e_6$. Next is the variable matrix. One entry in this matrix, corresponds to one variable in every expression, with the row indicating which variable it holds the value for. Each column holds a different set of variables. In the provided example, there are three variable sets, each holding the values for four variables $x_1$ through $x_4$. All expressions are evaluated using all variable sets and the results of these evaluations are stored in the results matrix. Each entry in this matrix holds the resulting value of the evaluation of one expression with one variable set. The row indicates the variable set while the column indicates the expression. -%% -%% TODO: Explain parameter optimisation a bit better/longer. Right now the understanding of parameters is not great with this. -%% - This is the minimal functionality needed to evaluate expressions with variables generated by a symbolic regression algorithm. In the case of parameter optimisation, it is useful to have a different type of variable, called parameter. For parameter optimisation it is important that for the given variable sets, the best fitting parameters need to be found. To achieve this, the evaluator is called multiple times with different parameters, but the same variables, and the results are evaluated for their fitness by the caller. In this case, the parameters do not change within one call. Parameters could therefore be treated as constant values of the expressions and no separate input for them would be needed. However, providing the possibility to have the parameters as an input, makes the process of parameter optimisation easier. This is the reason the prototype evaluators need to support parameters as inputs. Not all expressions need to have the same number of parameters. Therefore, they are structured as a vector of vectors and not a matrix. The example in Figure \ref{fig:input_output_explanation} shows how the parameters are structured. For example one expression has zero parameters, while another has six parameters $p_1$ through $p_6$. It needs to be mentioned that just like the number of variables, the number of parameters per expression is not limited. It is also possible to completely omit the parameters if they are not needed. -\subsection{Non-Goals} -Probably a good idea. Probably move this to "introduction" +% \subsection{Non-Goals} +% Probably a good idea. Probably move this to "introduction" +\section{Architecture} -\section{Interpreter} -as introduction to this section talk about what "interpreter" means in this context. so "gpu parses expr and calculates" +Based on the requirements above, the architecture of both prototypes can be designed. While the requirements only specify the input and output, the components and workflow also need to be specified. This section aims at giving an architectural overview of both prototypes, alongside their design decisions. -\subsection{Architecture} -talk about the coarse grained architecture on how the interpreter will work. (.5 to 1 page probably) +A design decision that has been made for both prototypes is to split the evaluation of each expression into a separate kernel dispatch. As explained in Section \ref{sec:thread_hierarchy}, it is desirable to reduce the occurrence of thread divergence as much as possible. Although the SIMT programming model tries to mitigate the negative effects of thread divergence, it is still a good idea to avoid it when possible. In this case, thread divergence can easily be avoided by not evaluating all expressions in a single kernel dispatch. GPUs are able to have multiple resident grids, with modern GPUs being able to have 128 grids concurrently \parencite{nvidia_cuda_2025}. One grid corresponds to one kernel dispatch, and therefore allow 128 kernels to be run concurrently. Therefore, dispatching a kernel for each expression, has the possibility to improve the performance. -\subsection{Host} -talk about the steps taken to prepare for GPU interpretation +%% Maybe add overview Diagram +%% Shows -> Caller calls Evaluator -> Evaluator dispatches kernel -> kernel evaluates -> Evaluator returns evaluation result +%% Probably the same as the interpreter and transpiler diagram. If so, dont add it -\subsection{Device} -talk about how the actual interpreter will be implemented +\subsection{Pre-Processing} +The first step in both prototypes is the pre-processing step. It is needed, as it simplifies working with the expressions in the later steps. Similar to the front-end in compilers as described in Section \ref{sec:compilers}, it takes an expression and transforms it into an intermediate representation. One of the responsibilities of the pre-processor is to verify that only allowed operators are present in the given expressions. Furthermore, it transforms the expressions into postfix-notation. This further allows the later parts to more easily evaluate the expressions. One of the major benefits of this notation is the implicit operator precedence. It allows the evaluators to evaluate the expressions token by token from left to right, without needing to worry about the correct order of operations. With one token being either an operator, a constant value, a variable or a parameter. + +It would have also been possible to perform the pre-processing step on the GPU. However, pre-processing only one expression can not easily be split into multiple threads, which means one GPU thread would need to process one expression. As described in Section \ref{sec:gpgpu} a single GPU thread is slower than a single CPU thread. Furthermore, it wouldn't make sense to process all expressions in a single kernel. This would lead to a lot of thread divergence, essentially processing one expression after the other. The SIMT programming model might help with parallelising at least some parts of the processing work. The generated expressions can differ a lot from each other and restricting them to be similar and therefore SIMT friendly, would reduce the overall quality of the symbolic regression algorithm. Therefore, it does not make sense to perform the processing step on the GPU. This is a typical example of code that is better run on the CPU, also because the parallelisation possibilities of one thread per expression can be applied to the CPU as well. Concepts like caching processed expressions, or caching parts of the processed expressions can also be employed on the CPU. This would not be possible on the GPU, because they can not save state between two kernel dispatches. + +\subsection{Interpreter} + +\begin{figure} + \centering + \includegraphics[width=.9\textwidth]{component_diagram_interpreter.png} + \caption{This diagram depicts the coarse-grained workflow of the interpreter. It shows how the parts interact with each other and with the system it will operate in.} + \label{fig:component_diagram_interpreter} +\end{figure} + +The interpreter consists of two parts. The CPU side or host side is the part of the program, that interacts with both the GPU or device and the caller. An overview on the components and the workflow of the interpreter can be seen in Figure \ref{fig:component_diagram_interpreter}. Before the GPU can start evaluating the expressions, a pre-processing step is necessary. This step is crucial, as it transforms the expressions in a format, that greatly simplifies the evaluation part. Before the expression can be evaluated however, all data needs to be sent to the GPU, this includes the processed expressions, as well as the data for the variables and parameters. After the kernel has finished evaluating all expressions, the CPU reads the results from the GPU and returns them to the caller. + +Because of the already mentioned pre-processing step, the evaluation process is relatively straight-forward. The Algorithm \ref{alg:eval_interpreter} demonstrates how an expression in postfix-notation can be evaluated. It shows a simplified version that only works with addition, multiplication and constant values. This is the part of the interpreter prototype, that actually interprets the expressions and runs on the GPU. + +\begin{algorithm} + \caption{Interpreting an equation in postfix-notation}\label{alg:eval_interpreter} + \begin{algorithmic}[1] + \Procedure{Evaluate}{\textit{expr}: PostfixExpression} + \State $\textit{stack} \gets ()$ + + \While{HasTokenLeft(\textit{expr})} + \State $\textit{token} \gets \text{GetNextToken}(\textit{expr})$ + \If{$\textit{token.Kind} = \text{Constant}$} + Push($\textit{stack}$, $\textit{token.Value}$) + \ElsIf{$\textit{token.Kind} = \text{Operator}$} + \If{$\textit{token.Value} = \text{Addition}$} + \State $\textit{right} \gets \text{Pop}(\textit{stack})$ + \State $\textit{left} \gets \text{Pop}(\textit{stack})$ + Push($\textit{left} + \textit{right}$) + \ElsIf{$\textit{token.Value} = \text{Multiplication}$} + \State $\textit{right} \gets \text{Pop}(\textit{stack})$ + \State $\textit{left} \gets \text{Pop}(\textit{stack})$ + Push($\textit{left} * \textit{right}$) + \EndIf + \EndIf + \EndWhile + + \Return $\text{Pop}(\textit{stack})$ + \EndProcedure + \end{algorithmic} +\end{algorithm} + +If a new operator is needed, it must simply be added as another else-if block inside the operator branch. New token kinds like variables or parameters, can also be added by adding a new outer else-if block that checks for these token kinds. However, the pre-processing step also needs to be extended with these new operators and token kinds, otherwise the expression will never reach the evaluation step. It is also possible to add unary operators like logarithm. In this case only one value would be read from the stack, the operation would be applied, and the result would be written back to the stack. -\section{Transpiler} -as introduction to this section talk about what "transpiler" means in this context. so "cpu takes expressions and generates ptx for gpu execution" +\subsection{Transpiler} -\subsection{Architecture} -talk about the coarse grained architecture on how the transpiler will work. (.5 to 1 page probably) +\begin{figure} + \centering + \includegraphics[width=.9\textwidth]{component_diagram_transpiler.png} + \caption{This diagram depicts the coarse-grained workflow of the transpiler. It shows how the parts interact with each other and with the system it will operate in.} + \label{fig:component_diagram_transpiler} +\end{figure} -\subsection{Host} -talk about how the transpiler is implemented -\subsection{Device} -talk about what the GPU does. short section since the gpu does not do much \ No newline at end of file +% \section{Interpreter} +% % as introduction to this section talk about what "interpreter" means in this context. so "gpu parses expr and calculates" +% In this section, the GPU-based expression interpreter is described. It includes the design decisions made for the architecture of the interpreter. It also describes what is done on the CPU side or host side and what is performed on the GPU side or device side. + +% \subsection{Architecture} +% talk about the coarse grained architecture on how the interpreter will work. (.5 to 1 page probably) +% Include decicions made like "one kernel per expression" + +% \subsection{Host} +% talk about the steps taken to prepare for GPU interpretation + +% \subsection{Device} +% talk about how the actual interpreter will be implemented + + +% \section{Transpiler} +% as introduction to this section talk about what "transpiler" means in this context. so "cpu takes expressions and generates ptx for gpu execution" + +% Transpiler used, to reduce overhead of the generic PTX transpiler of CUDA, as we can build a more specialised transpiler and hopefully generate faster code that way. (this sentence was written as a reminder and not to be used as is) + +% \subsection{Architecture} +% talk about the coarse grained architecture on how the transpiler will work. (.5 to 1 page probably) + +% \subsection{Host} +% talk about how the transpiler is implemented + +% \subsection{Device} +% talk about what the GPU does. short section since the gpu does not do much \ No newline at end of file diff --git a/thesis/chapters/implementation.tex b/thesis/chapters/implementation.tex index 1e0d341..f82a67d 100644 --- a/thesis/chapters/implementation.tex +++ b/thesis/chapters/implementation.tex @@ -1,6 +1,8 @@ \chapter{Implementation} \label{cha:implementation} +somewhere in here explain why one kernel per expression and not one kernel for all expressions + \section{Technologies} Short section; CUDA, PTX, Julia, CUDA.jl diff --git a/thesis/chapters/relwork.tex b/thesis/chapters/relwork.tex index 20507e7..5add8ce 100644 --- a/thesis/chapters/relwork.tex +++ b/thesis/chapters/relwork.tex @@ -25,7 +25,7 @@ Graphics cards (GPUs) are commonly used to increase the performance of many diff While in the early days of GPGPU programming a lot of research has been done to assess if this approach is feasible, it now seems obvious to use GPUs to accelerate algorithms. GPUs have been used early to speed up weather simulation models. \textcite{michalakes_gpu_2008} proposed a method for simulating weather with the Weather Research and Forecast (WRF) model on a GPU. With their approach, they reached a speed-up of 5 to 2 for the most compute intensive task, with little GPU optimisation effort. They also found that the GPU usage was low, meaning there are resources and potential for more detailed simulations. Generally, simulations are great candidates for using GPUs, as they can benefit heavily from a high degree of parallelism and data throughput. \textcite{koster_high-performance_2020} have developed a way of using adaptive time steps on the GPU to considerably improve the performance of numerical and discrete simulations. In addition to the performance gains they were able to retain the precision and constraint correctness of the simulation. Black hole simulations are crucial for science and education for a better understanding of our world. \textcite{verbraeck_interactive_2021} have shown that simulating complex Kerr (rotating) black holes can be done on consumer hardware in a few seconds. Schwarzschild black hole simulations can be performed in real-time with GPUs as described by \textcite{hissbach_overview_2022} which is especially helpful for educational scenarios. While both approaches do not have the same accuracy as detailed simulations on supercomputers, they show how a single GPU can yield similar accuracy at a fraction of the cost. Software network routing can also heavily benefit from GPU acceleration as shown by \textcite{han_packetshader_2010}, where they achieved a significantly higher throughput than with a CPU only implementation. Finite element structural analysis is an essential tool for many branches of engineering and can also heavily benefit from the usage of GPUs as demonstrated by \textcite{georgescu_gpu_2013}. Generating test data for DeepQ learning can also significantly benefit from using the GPU \parencite{koster_macsq_2022}. However, it also needs to be noted, that GPUs are not always better performing than CPUs as illustrated by \textcite{lee_debunking_2010}, so it is important to consider if it is worth using GPUs for specific tasks. \subsection{Programming GPUs} -The development process on a GPU is vastly different from a CPU. A CPU has tens or hundreds of complex cores with the AMD Epyc 9965\footnote{\url{https://www.amd.com/en/products/processors/server/epyc/9005-series/amd-epyc-9965.html}} having a staggering $192$ cores and twice as many threads. To demonstrate the complexity of a simple one core 8-bit CPU \textcite{schuurman_step-by-step_2013} has written a development guide. He describes the different parts of one CPU core and how they interact. Modern CPUs are even more complex, with dedicated fast integer and floating-point arithmetic gates as well as logic gates, sophisticated branch prediction and much more. This makes a CPU perfect for handling complex control flows on a single program strand and on modern CPUs even multiple strands simultaneously \parencite{palacios_comparison_2011}. However, as seen in Section \ref{sec:gpgpu}, this often is not enough. On the other hand, a GPU contains thousands or even tens of thousands of cores. For example, the GeForce RTX 5090\footnote{\url{https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/}} contains a total of $21\,760$ CUDA cores. To achieve this enormous core count a single GPU core has to be much simpler than one CPU core. As described by \textcite{nvidia_cuda_2025} a GPU designates much more transistors towards floating-point computations. This results in less efficient integer arithmetic and control flow handling. There is also less Cache available per core and clock speeds are usually also much lower than those on a CPU. An overview of the differences of a CPU and a GPU architecture can be seen in Figure \ref{fig:cpu_vs_gpu}. +The development process on a GPU is vastly different from a CPU. A CPU has tens or hundreds of complex cores with the AMD Epyc 9965\footnote{\url{https://www.amd.com/en/products/processors/server/epyc/9005-series/amd-epyc-9965.html}} having $192$ cores and twice as many threads. To demonstrate the complexity of a simple one core 8-bit CPU \textcite{schuurman_step-by-step_2013} has written a development guide. He describes the different parts of one CPU core and how they interact. Modern CPUs are even more complex, with dedicated fast integer and floating-point arithmetic gates as well as logic gates, sophisticated branch prediction and much more. This makes a CPU perfect for handling complex control flows on a single program strand and on modern CPUs even multiple strands simultaneously \parencite{palacios_comparison_2011}. However, as seen in Section \ref{sec:gpgpu}, this often is not enough. On the other hand, a GPU contains thousands or even tens of thousands of cores. For example, the GeForce RTX 5090\footnote{\url{https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/}} contains a total of $21\,760$ CUDA cores. To achieve this enormous core count a single GPU core has to be much simpler than one CPU core. As described by \textcite{nvidia_cuda_2025} a GPU designates much more transistors towards floating-point computations. This results in less efficient integer arithmetic and control flow handling. There is also less Cache available per core and clock speeds are usually also much lower than those on a CPU. An overview of the differences of a CPU and a GPU architecture can be seen in Figure \ref{fig:cpu_vs_gpu}. \begin{figure} \centering @@ -34,9 +34,10 @@ The development process on a GPU is vastly different from a CPU. A CPU has tens \label{fig:cpu_vs_gpu} \end{figure} -Despite these drawbacks, the sheer number of cores, makes a GPU a valid choice when considering improving the performance of an algorithm. Because of the high number of cores, GPUs are best suited for data parallel scenarios. This is due to the SIMD architecture of these cards. SIMD stands for Sinlge-Instruction Multiple-Data and states that there is a single stream of instructions that is executed on a huge number of data streams. \textcite{franchetti_efficient_2005} and \textcite{tian_compiling_2012} describe ways of using SIMD instructions on the CPU. Their approaches lead to noticeable speed-ups of 3.3 and 4.7 respectively by using SIMD instructions instead of serial computations. Extending this to GPUs which are specifically built for SIMD/data parallel calculations shows why they are so powerful despite having less complex and slower cores than a CPU. +Despite these drawbacks, the sheer number of cores, makes a GPU a valid choice when considering improving the performance of an algorithm. Because of the high number of cores, GPUs are best suited for data parallel scenarios. This is due to the SIMD architecture of these cards. SIMD stands for Sinlge-Instruction Multiple-Data and states that there is a single stream of instructions that is executed on a huge number of data streams. \textcite{franchetti_efficient_2005} and \textcite{tian_compiling_2012} describe ways of using SIMD instructions on the CPU. Their approaches lead to noticeable speed-ups of 3.3 and 4.7 respectively by using SIMD instructions instead of serial computations. Extending this to GPUs which are specifically built for SIMD/data parallel calculations shows why they are so powerful despite having less complex and slower cores than a CPU. It is also important to note, that a GPU also always needs a CPU, as the CPU is responsible for sending the data to the GPU and starting the GPU program. In GPGPU programming, the CPU is usually called the host, while the GPU is usually called the device. \subsubsection{Thread Hierarchy and Tuning} +\label{sec:thread_hierarchy} The thousands of cores on a GPU, also called threads, are grouped together in several categories. This is the Thread hierarchy of GPUs. The developer can influence this grouping to a degree which allows them to tune their algorithm for optimal performance. In order to develop a well performing algorithm, it is necessary to know how this grouping works. Tuning the grouping is unique to each algorithm and also dependent on the GPU used, which means it is important to test a lot of different configurations to achieve the best possible result. This section aims at exploring the thread hierarchy and how it can be tuned to fit an algorithm. At the lowest level of a GPU exists a Streaming Multiprocessor (SM), which is a hardware unit responsible for scheduling and executing threads and also contains the registers used by these threads. An SM is always executing a group of 32 threads simultaneously, and this group is called a warp. The number of threads that can be started is virtually unlimited. However, threads must be grouped in a block, with one block typically containing a maximum of $1024$ threads but is often configured to be less. Therefore, if more than $1024$ threads are required, more blocks must be created. Blocks can also be grouped into thread block clusters which is optional, but can be useful in certain scenarios. All thread blocks or thread block clusters are part of a grid, which manifests as a dispatch of the code run on the GPU, also called kernel \parencite{amd_hip_2025}. All threads in one block have access to some shared memory, which can be used for L1 caching or communication between threads. It is important that the blocks can be scheduled independently, with no dependencies between them. This allows the scheduler to schedule blocks and threads as efficiently as possible. All threads within a warp are guaranteed to be part of the same block, and are therefore executed simultaneously and can access the same memory addresses. Figure \ref{fig:thread_hierarchy} depicts how threads in a block are grouped into warps for execution and how they shared memory. @@ -157,6 +158,7 @@ Done: \end{program} \section{Compilers} +\label{sec:compilers} Compilers are a necessary tool for many developers. If a developer wants to run their program it is very likely they need one. As best described by \textcite{aho_compilers_2006} in their dragon book, a compiler takes code written by a human in some source language and translates it into a destination language readable by a computer. This section briefly explores what compilers are and research done in this old field of computer science. Furthermore, the topics of transpilers and interpreters are explored, as their use-cases are very similar. \textcite{aho_compilers_2006} and \textcite{cooper_engineering_2022} describe how a compiler can be developed, with the latter focusing on more modern approaches. They describe how a compiler consists of two parts, the analyser, also called frontend, and the synthesiser also called backend. The front end is responsible for ensuring syntactic and semantic correctness and converts the source code into an intermediate representation, an abstract syntax tree (AST), for the backend. Generating code in the target language, from the intermediate representation is the job of the backend. This target code can be assembly or anything else that is needed for a specific use-case. This intermediate representation also makes it simple to swap out frontends or backends. The Gnu Compiler Collection \textcite{gcc_gcc_2025} takes advantage of using different frontends to provide support for many languages including C, C++, Ada and more. Instead of compiling source code for specific machines directly, many languages compile code for virtual machines instead. Notable examples are the Java Virtual Machine (JVM) \parencite{lindholm_java_2025} and the low level virtual machine (LLVM) \parencite{lattner_llvm_2004}. Such virtual machines provide a bytecode which can be used as a target language for compilers. A huge benefit of such virtual machines is the ability for one program to be run on all physical machines the virtual machine exists for, without the developer needing to change that program \parencite{lindholm_java_2025}. Programs written for virtual machines are compiled into their respective bytecode. This bytecode can then be interpreted or compiled to physical machine code and then be run. According to the JVM specification \textcite{lindholm_java_2025} the Java bytecode is interpreted and also compiled with a just-in-time (JIT) compiler to increase the performance of code blocks that are often executed. On the other hand, the common language runtime (CLR)\footnote{\url{https://learn.microsoft.com/en-us/dotnet/standard/clr}}, the virtual machine for languages like C\#, never interprets the generated bytecode. As described by \textcite{microsoft_overview_2023} the CLR always compiles the bytecode to physical machine code using a JIT compiler before it is executed. diff --git a/thesis/images/component_diagram_interpreter.png b/thesis/images/component_diagram_interpreter.png new file mode 100644 index 0000000000000000000000000000000000000000..2b2672bc8b35b4bdd56bf17de60d87c883904efa GIT binary patch literal 90226 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%0Df<3`0qz_NGayP$ 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