From 3c289f13d1500e8c3e2ffb771787b50e22133373 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 21 Mar 2025 17:49:55 +0100 Subject: [PATCH] relwork: slight rewording and fixing errors --- thesis/chapters/relwork.tex | 47 ++++++++++++++++++------------------ thesis/main.pdf | Bin 550951 -> 574163 bytes thesis/references.bib | 13 +++++++--- 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/thesis/chapters/relwork.tex b/thesis/chapters/relwork.tex index 03c7e5f..6436f1c 100644 --- a/thesis/chapters/relwork.tex +++ b/thesis/chapters/relwork.tex @@ -5,9 +5,9 @@ The goal of this chapter is to provide an overview of equation learning or symbo \section{Equation learning} Equation learning is a field of research that can be used for understanding and discovering equations from a set of data from various fields like mathematics and physics. Data is usually much more abundant while models often are elusive which is demonstrated by \textcite{guillemot_climate_2022} where they explain how validating the models against large amounts of data is a big part in creating such models. Because of this effort, generating equations with a computer can more easily lead to discovering equations that describe the observed data. \textcite{brunton_discovering_2016} describe an algorithm that leverages equation learning to discover equations for physical systems. A more literal interpretation of equation learning is demonstrated by \textcite{pfahler_semantic_2020}. They use machine learning to learn the form of equations. Their aim was to simplify the discovery of relevant publications by the equations they use and not by technical terms, as they may differ by the field of research. However, this kind of equation learning is not relevant for this thesis. -Symbolic regression is a subset of equation learning, that specialises more towards discovering mathematical equations. A lot of research is done in this field. Using genetic programming (GP) for different problems, including symbolic regression, was first described by \textcite{koza_genetic_1994}. He described that finding a computer program to solve a problem for a given input and output, can be done by traversing the search space of all solutions. This fits well for the goal of symbolic regression, where a mathematical expression needs to be found to describe a problem with specific inputs and outputs. Later, \textcite{koza_human-competitive_2010} provided an overview of results that were generated with the help of GP and were competitive with human solutions, showing how symbolic regression is a useful tool. In their book Symbolic Regression, \textcite{kronberger_symbolic_2024} show how symbolic regression can be applied for real world scenarios. They also describe symbolic regression in great detail, while being tailored towards beginners and experts. +Symbolic regression is a subset of equation learning, that specialises more towards discovering mathematical equations. A lot of research is done in this field. Using genetic programming (GP) for different problems, including symbolic regression, was first described by \textcite{koza_genetic_1994}. He described that finding a computer program to solve a problem for a given input and output, can be done by traversing the search space of all solutions. This fits well for the goal of symbolic regression, where a mathematical expression needs to be found to describe a problem with specific inputs and outputs. Later, \textcite{koza_human-competitive_2010} provided an overview of results that were generated with the help of GP and were competitive with human solutions, showing how symbolic regression is a useful tool. In their book Symbolic Regression, \textcite{kronberger_symbolic_2024} show how symbolic regression can be applied for real world scenarios. They also describe symbolic regression in great detail, while being tailored towards beginners and experts alike. -\textcite{keijzer_scaled_2004} and \textcite{korns_accuracy_2011} presented ways of improving the quality of symbolic regression algorithms, making symbolic regression more feasible for problem-solving. \textcite{bartlett_exhaustive_2024} describe an exhaustive approach for symbolic regression which can find the true optimum for perfectly optimised parameters while retaining simple and interpretable results. Alternatives to GP for symbolic regression also exist with one proposed by \textcite{jin_bayesian_2020}. Their approach increased the quality of the results noticeably compared to GP alternatives. Another alternative to heuristics like GP is the usage of neural networks. One such alternative has been introduced by \textcite{martius_extrapolation_2016} where they used a neural network for their equation learner with mixed results. Later, an extension has been provided by \textcite{sahoo_learning_2018}. They introduced the division operator, which led to much better results. Further improvements have been described by \textcite{werner_informed_2021} with their informed equation learner. By incorporating domain expert knowledge they could limit the search space and find better solutions for particular domains. One drawback of these three implementations is the fact that their neural networks are fixed. An equation learner which can change the network at runtime and therefore evolve over time is proposed by \textcite{dong_evolving_2024}. Their approach further improved the results of neural network equation learners. In their work, \textcite{lemos_rediscovering_2022} also used a neural network for symbolic regression. They were able to find an equivalent to Newton's law of gravitation and rediscovered Newton's second and third law only with trajectory data of bodies of our solar system. Although these laws were already known, this research has shown how neural networks and machine learning in general have great potential. An implementation for an equation learner in the physics domain is proposed by \textcite{sun_symbolic_2023}. Their algorithm was specifically designed for nonlinear dynamics often occurring in physical systems. When compared to other implementations their equation learner was able to create better results but have the main drawback of high computational cost. As seen by these publications, increasing the quality of generated equations and also increasing the speed of finding these equations is a central part in symbolic regression and equation learning in general. +\textcite{keijzer_scaled_2004} and \textcite{korns_accuracy_2011} presented ways of improving the quality of symbolic regression algorithms, making symbolic regression more feasible for problem-solving. \textcite{bartlett_exhaustive_2024} describe an exhaustive approach for symbolic regression which can find the true optimum for perfectly optimised parameters while retaining simple and interpretable results. Alternatives to GP for symbolic regression also exist with one proposed by \textcite{jin_bayesian_2020}. Their approach increased the quality of the results noticeably compared to GP alternatives. Another alternative to heuristics like GP is the usage of neural networks. One such alternative has been introduced by \textcite{martius_extrapolation_2016} where they used a neural network for their equation learner with mixed results. Later, an extension has been provided by \textcite{sahoo_learning_2018}. They introduced the division operator, which led to much better results. Further improvements have been described by \textcite{werner_informed_2021} with their informed equation learner. By incorporating domain expert knowledge they could limit the search space and find better solutions for particular domains. One drawback of these three implementations is the fact that their neural networks are fixed. An equation learner which can change the network at runtime and therefore evolve over time is proposed by \textcite{dong_evolving_2024}. Their approach further improved the results of neural network equation learners. In their work, \textcite{lemos_rediscovering_2022} also used a neural network for symbolic regression. They were able to find an equivalent to Newton's law of gravitation and rediscovered Newton's second and third law only with trajectory data of bodies of our solar system. Although these laws were already known, this research has shown how neural networks and machine learning in general have great potential. An implementation for an equation learner in the physics domain is proposed by \textcite{sun_symbolic_2023}. Their algorithm was specifically designed for nonlinear dynamics often occurring in physical systems. When compared to other implementations their equation learner was able to create better results but has the main drawback of high computational cost. As seen by these publications, increasing the quality of generated equations and also increasing the speed of finding these equations is a central part in symbolic regression and equation learning in general. As described earlier, the goal of equation learning is to find an expression that fits a given set of data. The data usually consists of a set of inputs that have been applied to the unknown expression and the output after the input has been applied. An example for such data is described by \textcite{werner_informed_2021}. In one instance they want to find the power loss formula for an electric machine. They used four inputs, direct and quadratic current as well as temperature and motor speed, and they have an observed output which is the power loss. Now for an arbitrary problem with different input and outputs, the equation learner tries to find an expression that fits this data \parencite{koza_genetic_1994}. Fitting in this context means that when the input is applied to the expression, the result will be the same as the observed output. In order to avoid overfitting \textcite{bomarito_bayesian_2022} have proposed a way of using Bayesian model selection to combat overfitting and reduce the complexity of the generated expressions. This also helps with making the expressions more generalisable and therefore be applicable to unseen inputs. A survey conducted by \textcite{dabhi_survey_2012} shows how overfitting is not desirable and why more generalisable solutions are preferred. To generate an equation, first the operators need to be defined that make up the equation. It is also possible to define a maximum length for an expression as proposed by \textcite{bartlett_exhaustive_2024}. Expressions also consist of constants as well as variables which represent the inputs. Assuming that a given problem has three variables, the equation learner could generate an expression as seen in \ref{eq:example} where $x_n$ are the variables and $O$ is the output which should correspond to the observed output for the given variables. @@ -15,17 +15,17 @@ As described earlier, the goal of equation learning is to find an expression tha O = 5 - \text{abs}(x_1) * \text{sqrt}(x_2) / 10 + 2 \char`^ x_3 \end{equation} -A typical equation learner generates multiple expressions at once. If the equation learner generates $300$ expressions and each expression needs to be evaluated $50$ times to get the best parametrisation for this expression, the total number of evaluations is $300 * 50 = 15\,000$. However, it is likely that multiple runs or generations in the context of GP need to be performed. The number of generations is dependent to the problem, but assuming a maximum of $100$ generations the total number of evaluations is equal to $300 * 50 * 100 = 1\,500\,000$. These values have been taken from the equation learner for predicting discharge voltage curves of batteries as described by \textcite{kronberger_symbolic_2024}. Their equation learner converged after 54 generations, resulting in evaluating $800\,000$ expressions. Depending on the complexity of the generated expressions, performing all of these evaluations takes up a lot of the runtime. Their results took over two days on an eight core desktop CPU. While they did not provide runtime information for all problems they tested, the voltage curve prediction was the slowest. The other problems were in the range of a few seconds and up to a day. Especially the problems that took several hours to days to finish show, that there is still room for performance improvements. While a better CPU with more cores can be used, it is interesting to determine, if using Graphics cards can yield noticeable better performance or not, which is the goal of this thesis. +A typical equation learner generates multiple expressions at once. If the equation learner generates $300$ expressions and each expression needs to be evaluated $50$ times to get the best parametrisation for each of these expressions, the total number of evaluations is $300 * 50 = 15\,000$. However, it is likely that multiple runs or generations in the context of GP need to be performed. The number of generations is dependent to the problem, but assuming a maximum of $100$ generations, the total number of evaluations is equal to $300 * 50 * 100 = 1\,500\,000$. These values have been taken from the equation learner for predicting discharge voltage curves of batteries as described by \textcite{kronberger_symbolic_2024}. Their equation learner converged after 54 generations, resulting in evaluating $800\,000$ expressions. Depending on the complexity of the generated expressions, performing all of these evaluations takes up a lot of the runtime. Their results took over two days on an eight core desktop CPU. While they did not provide runtime information for all problems they tested, the voltage curve prediction was the slowest. The other problems were in the range of a few seconds and up to a day. Especially the problems that took several hours to days to finish show, that there is still room for performance improvements. While a better CPU with more cores can be used, it is interesting to determine, if using Graphics cards can yield noticeable better performance or not, which is the goal of this thesis. \section[GPGPU]{General Purpose Computation on Graphics Processing Units} \label{sec:gpgpu} -Graphics cards (GPUs) are commonly used to increase the performance of many different applications. Originally they were designed to improve performance and visual quality in games. \textcite{dokken_gpu_2005} first described the usage of GPUs for general purpose programming (GPGPU). They have shown how the graphics pipeline can be used for GPGPU programming. Because this approach also requires the programmer to understand the graphics terminology, this was not a great solution. Therefore, Nvidia released CUDA\footnote{\url{https://developer.nvidia.com/cuda-toolkit}} in 2007 with the goal of allowing developers to program GPUs independent of the graphics pipeline and terminology. A study of the programmability of GPUs with CUDA and the resulting performance has been conducted by \textcite{huang_gpu_2008}. They found that GPGPU programming has potential, even for non-embarassingly parallel problems. Research is also done in making the low level CUDA development simpler. \textcite{han_hicuda_2011} have described a directive-based language to make development simpler and less error-prone, while retaining the performance of handwritten code. To drastically simplify CUDA development, \textcite{besard_effective_2019} showed that it is possible to develop with CUDA in the high level programming language Julia\footnote{\url{https://julialang.org/}} with similar performance to CUDA written in C. In a subsequent study \textcite{lin_comparing_2021} found that high performance computing (HPC) on the CPU and GPU in Julia performs similar to HPC development in C. This means that Julia can be a viable alternative to Fortran, C and C++ in the HPC field and has the additional benefit of developer comfort since it is a high level language with modern features such as garbage-collectors. \textcite{besard_rapid_2019} have also shown how the combination of Julia and CUDA help in rapidly developing HPC software. While this thesis in general revolves around CUDA, there also exist alternatives by AMD called ROCm\footnote{\url{https://www.amd.com/de/products/software/rocm.html}} and a vendor independent alternative called OpenCL\footnote{\url{https://www.khronos.org/opencl/}}. If not specified otherwise, the following section and its subsections use the information presented by \textcite{nvidia_cuda_2025} in their CUDA programming guide. +Graphics cards (GPUs) are commonly used to increase the performance of many different applications. Originally they were designed to improve performance and visual quality in games. \textcite{dokken_gpu_2005} first described the usage of GPUs for general purpose programming (GPGPU). They have shown how the graphics pipeline can be used for GPGPU programming. Because this approach also requires the programmer to understand the graphics terminology, this was not a great solution. Therefore, Nvidia released CUDA\footnote{\url{https://developer.nvidia.com/cuda-toolkit}} in 2007 with the goal of allowing developers to program GPUs independent of the graphics pipeline and terminology. A study of the programmability of GPUs with CUDA and the resulting performance has been conducted by \textcite{huang_gpu_2008}. They found that GPGPU programming has potential, even for non-embarassingly parallel problems. Research is also done in making the low level CUDA development simpler. \textcite{han_hicuda_2011} have described a directive-based language to make development simpler and less error-prone, while retaining the performance of handwritten code. To drastically simplify CUDA development, \textcite{besard_effective_2019} showed that it is possible to develop with CUDA in the high level programming language Julia\footnote{\url{https://julialang.org/}} with similar performance to CUDA written in C. In a subsequent study \textcite{lin_comparing_2021} found, that high performance computing (HPC) on the CPU and GPU in Julia performs similar to HPC development in C. This means that Julia can be a viable alternative to Fortran, C and C++ in the HPC field. Additional Julia has the benefit of developer comfort since it is a high level language with modern features such as a garbage-collector. \textcite{besard_rapid_2019} have also shown how the combination of Julia and CUDA help in rapidly developing HPC software. While this thesis in general revolves around CUDA, there also exist alternatives by AMD called ROCm\footnote{\url{https://www.amd.com/de/products/software/rocm.html}} and a vendor independent alternative called OpenCL\footnote{\url{https://www.khronos.org/opencl/}}. If not specified otherwise, the following section and its subsections use the information presented by \textcite{nvidia_cuda_2025} in their CUDA programming guide. -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 the most compute intensive task of 5 to 20, 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}, but they still can lead to performance improvements nonetheless. +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$ of those complex cores and twice as many threads. A guide for a simple one core 8-bit CPU has been published by \textcite{schuurman_step-by-step_2013}. He describes the different and complex parts of a CPU core. 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. However, as seen in section \ref{sec:gpgpu}, this often isn't 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 $21760$ 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 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 isn't 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 @@ -39,7 +39,7 @@ Despite these drawbacks, the sheer number of cores, makes a GPU a valid choice w \subsubsection{Thread Hierarchy and Tuning} 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 2048 threads but is often configured to be less. Therefore, if more than 2048 threads are required, more blocks must be created. Blocks can also be grouped 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 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 share memory. +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. \begin{figure} \centering @@ -48,9 +48,9 @@ At the lowest level of a GPU exists a Streaming Multiprocessor (SM), which is a \label{fig:thread_hierarchy} \end{figure} -A piece of code that is executed on a GPU is written as a kernel which can be configured. The most important configuration is how threads are grouped into blocks. The GPU allows the kernel to allocate threads and blocks and block clusters in up to three dimensions. This is often useful because of the already mentioned shared memory, which will be explained in more detail in section \ref{sec:memory_model}. Considering the case where an image needs to be blurred, it not only simplifies the development if threads are arranged in a 2D grid, it also helps with optimising memory access. As the threads in a block, need to access a lot of the same data, this data can be loaded in the shared memory of the block. This allows the data to be accessed much quicker compared to when threads are allocated in only one dimension. With one dimensional blocks it is possible that threads assigned to nearby pixels, are part of a different block, leading to a lot of duplicate data transfer. Although the size in each dimension of the blocks can be almost arbitrary, blocks that are too large might lead to other problems which are described in more detail in section \ref{sec:occupancy}. +A piece of code that is executed on a GPU is written as a kernel which can be configured. The most important configuration is how threads are grouped into blocks. The GPU allows the kernel to allocate threads and blocks and block clusters in up to three dimensions. This is often useful because of the already mentioned shared memory, which will be explained in more detail in section \ref{sec:memory_model}. Considering the case where an image needs to be blurred, it not only simplifies the development if threads are arranged in a 2D grid, it also helps with optimising memory access. As the threads in a block, need to access a lot of the same data, this data can be loaded in the shared memory of the block. This allows the data to be accessed much quicker compared to when threads are allocated in only one dimension. With one dimensional blocks it is possible that threads assigned to nearby pixels, are part of a different block, leading to a lot of duplicate data transfer. The size in each dimension of a block can be almost arbitrary within the maximum allowed number of threads. However, blocks that are too large might lead to other problems which are described in more detail in section \ref{sec:occupancy}. -All threads in a warp start at the same point in a program, they have their own instruction address, allowing them to work independently. Because of the SIMD architecture, all threads in a warp must execute the same instructions and if threads start diverging, the SM must pause threads with different instructions and execute them later. Figure \ref{fig:thread_divergence} shows how such divergences can impact performance. The situation described by the figure also shows, that after the divergent thread would reconverge, this does not happen and leads to T2 being executed after T1 and T3 are finished. In situations where a lot of data dependent thread divergence happens, most of the benefits of using a GPU have vanished. +All threads in a warp start at the same point in a program, but with their own instruction address, allowing them to work independently. Because of the SIMD architecture, all threads in a warp must execute the same instructions and if threads start diverging, the SM must pause threads with different instructions and execute them later. Figure \ref{fig:thread_divergence} shows how such divergences can impact performance. The situation described by the figure also shows, that after the divergence the thread could re-converge. On older hardware this does not happen and leads to T2 being executed after T1 and T3 are finished. In situations where a lot of data dependent thread divergence happens, most of the benefits of using a GPU likely have vanished. Threads not executing the same instruction is strictly speaking against the SIMD principle but can happen in reality, due to data dependent branching. Consequently, this leads to bad resource utilisation, which in turn leads to worse performance. Another possibility of threads being paused (inactive threads) is the fact that sometimes, the number of threads started is not divisible by 32. In such cases, the last warp still contains 32 threads but only the threads with work are executed. \begin{figure} \centering @@ -59,9 +59,8 @@ All threads in a warp start at the same point in a program, they have their own \label{fig:thread_divergence} \end{figure} -Threads not executing the same instruction is against the SIMD principle but can happen in reality, due to data dependent branching. Consequently, this leads to bad resource utilisation, which in turn leads to worse performance. Another possibility of threads being paused (inactive threads) is the fact that sometimes, the number of threads started is not divisible by 32. In such cases, the last warp still contains 32 threads but only the threads with work are executed. -Modern GPUs implement the so called Single-Instruction Multiple-Thread (SIMT) architecture. In many cases a developer does not need to know the details of SIMT and can develop fast and correct programs with just the SIMD architecture in mind. However, leveraging the power of SIMT can yield substantial performance gains by re-converging threads once data dependent divergence occurred. A proposal for a re-convergence algorithm was proposed by \textcite{collange_stack-less_2011} where they have shown that these approaches help with hardware occupation, resulting in improved performance as threads are now no longer fully serialised. Another approach for increasing occupancy using the SIMT architecture is proposed by \textcite{fung_thread_2011}. They introduced a technique for compacting thread blocks by moving divergent threads to new warps until they reconverge. This approach resulted in a noticeable speed-up between 17\% and 22\%. Another example where a SIMT aware algorithm can perform better was proposed by \textcite{koster_massively_2020}. While they did not implement techniques for thread re-convergence, they implemented a thread compaction algorithm. On data-dependent divergence it is possible for threads to end early, leaving a warp with only partial active threads. This means the deactivated threads are still occupied and cannot be used for other work. Their thread compaction tackles this problem by moving active threads into a new thread block, releasing the inactive threads to perform other work. With this they were able to gain a speed-up of roughly 4 times compared to previous implementations. Adapting Multiple-Instruction Multiple-Data (MIMD) programs with synchronisation to run on SIMT architecture can be a difficult task, especially if the underlying architecture is not well understood. A static analysis tool and a transformer specifically designed to help avoid deadlocks with MIMD synchronisation is proposed by \textcite{eltantawy_mimd_2016}. In addition, they proposed a hardware re-convergence mechanism that supports MIMD synchronisation. A survey by \textcite{khairy_survey_2019} explores different aspects of improving GPGPU performance architecturally. Specifically, they have compiled a list of different publications discussing algorithms for thread re-convergence, thread compaction and much more. Their main goal was to give a broad overview of many ways to improve the performance of GPGPU programming to help other developers. +Modern GPUs implement the so called Single-Instruction Multiple-Thread (SIMT) architecture. In many cases a developer does not need to know the details of SIMT and can develop fast and correct programs with just the SIMD architecture in mind. However, leveraging the power of SIMT can yield substantial performance gains by re-converging threads after data dependent divergence occurred. A stack-less re-convergence algorithm was proposed by \textcite{collange_stack-less_2011} as an alternative to the default stack-based re-convergence algorithm. Their algorithm was able to achieve higher performance than the default one. Another approach for increasing occupancy using the SIMT architecture is proposed by \textcite{fung_thread_2011}. They introduced a technique for compacting thread blocks by moving divergent threads to new warps until they re-converge. This approach resulted in a noticeable speed-up between 17\% and 22\%. Another example where a SIMT aware algorithm can perform better was proposed by \textcite{koster_massively_2020}. While they did not implement techniques for thread re-convergence, they implemented a thread compaction algorithm. On data-dependent divergence it is possible for threads to end early, leaving a warp with only partial active threads. This means the inactive threads are still occupied and cannot be used for other work. Their thread compaction tackles this problem by moving active threads into a new thread block, releasing the inactive threads to perform other work. With this they were able to gain a speed-up of roughly 4 times compared to previous implementations. Adapting Multiple-Instruction Multiple-Data (MIMD) programs with synchronisation to run on SIMT architecture can be a difficult task, especially if the underlying architecture is not well understood. A static analysis tool and a transformer specifically designed to help avoid deadlocks with MIMD synchronisation is proposed by \textcite{eltantawy_mimd_2016}. In addition, they proposed a hardware re-convergence mechanism that supports MIMD synchronisation. A survey by \textcite{khairy_survey_2019} explores different aspects of improving GPGPU performance architecturally. Specifically, they have compiled a list of different publications discussing algorithms for thread re-convergence, thread compaction and much more. Their main goal was to give a broad overview of many ways to improve the performance of GPGPU programming to help other developers. \subsubsection{Memory Model} \label{sec:memory_model} @@ -78,11 +77,11 @@ On a GPU there are two parts that contribute to the performance of an algorithm. \label{fig:gpu_memory_layout} \end{figure} -On a GPU there are multiple levels and kinds of memory available. All these levels and kinds have different purposes they are optimised for. This means that it is important to know what they are and how they can be best used for specific tasks. On the lowest level threads have registers and local memory available. Registers is the fastest way to access memory but is also the least abundant memory with up to a maximum of 255 32-Bit registers per thread on Nvidia and 256 on AMD \parencite{amd_hardware_2025}. However, using all registers of a thread can lead to other problems which are described in more detail in section \ref{sec:occupancy}. On the other side, the thread local memory is significantly slower than registers. This is due to the fact, that local memory is actually stored in global memory and therefore has the same limitations which are explained later. This means it is important to try and avoid local memory as much as possible. Local memory is usually only used when a thread uses too many registers. The compiler will then spill the remaining data into local memory and loads it into registers once needed, drastically slowing down the application. +On a GPU there are multiple levels and kinds of memory available. All these levels and kinds have different purposes they are optimised for. This means that it is important to know what they are and how they can be best used for specific tasks. On the lowest level threads have registers and local memory available. Registers is the fastest way to access memory but is also the least abundant memory with up to a maximum of 255 32-Bit registers per thread on Nvidia GPUs and 256 on AMD GPUs \parencite{amd_hardware_2025}. However, using all registers of a thread can lead to other problems which are described in more detail in section \ref{sec:occupancy}. On the other side, the thread local memory is significantly slower than registers. This is due to the fact, that local memory is actually stored in global memory and therefore has the same limitations which are explained later. This means it is important to try and avoid local memory as much as possible. Local memory is usually only used when a thread uses too many registers. The compiler will then spill the remaining data into local memory and loads it into registers once needed, drastically slowing down the application. -Shared memory is the next tier of memory on a GPU. Unlike local memory and registers, shared memory is shared between all threads inside a block. The amount of shared memory is depending on the GPU architecture but for Nvidia it hovers at around 100 Kilobyte (KB) per block. While this memory is slower than registers, its primary use-case is communicating and sharing data between threads in a block. It is advised that all threads in a block access a lot of overlapping data, as then data from global memory can be loaded into faster shared memory once and then accessed multiple times further increasing performance. Loading data into shared memory and accessing that data has to be done manually. Because shared memory is part of the unified data cache, it can either be used as a cache or for manual use, meaning a developer can allocate more shared memory towards caching if needed. Another feature of shared memory are the so-called memory banks. Shared memory is always split into 32 equally sized memory modules also called memory banks. All available memory addresses lie in one of these banks. This means if two threads access two different memory addresses which lie in different banks, the access can be performed simultaneously, increasing the throughput. +Shared memory is the next tier of memory on a GPU. Unlike local memory and registers, shared memory is shared between all threads inside a block. The amount of shared memory is depending on the GPU architecture but for Nvidia it hovers at around 100 Kilobyte (KB) per block. While this memory is slower than registers, its primary use-case is communicating and sharing data between threads in a block. If all threads in a block access a lot of overlapping data this data can be loaded from global memory into faster shared memory once. It can then be accessed multiple times, further increasing performance. Loading data into shared memory and accessing that data has to be done manually. Because shared memory is part of the unified data cache, it can either be used as a cache or for manual use, meaning a developer can allocate more shared memory towards caching if needed. Another feature of shared memory are the so-called memory banks. Shared memory is always split into 32 equally sized memory modules also called memory banks. All available memory addresses lie in one of these banks. This means if two threads access two memory addresses which lie in different banks, the access can be performed simultaneously, increasing the throughput. -The most abundant and slowest memory is the global memory and resides in device memory. A key constraint of device memory and therefore global memory is, that is accessed in either 32, 64 or 128 byte chunks. This means if a thread wants to access 8 bytes from global memory, alongside the 8 bytes, the 24 bytes after the requested 8 bytes are also transferred. As a result, the throughput is only a fourth of the theoretical maximum. Therefore, it is important to follow optimal access patterns. What these optimal patterns are, are architecture dependent and are described in the according sections in the CUDA programming guide. +The most abundant and slowest memory is the global memory and resides in device memory. A key constraint of device memory and therefore global memory is, that can only be accessed in either 32, 64 or 128 byte chunks. This means if a thread wants to access 8 bytes from global memory, alongside the 8 bytes, the 24 bytes after the requested 8 bytes are also transferred. As a result, the throughput is only a fourth of the theoretical maximum. Therefore, it is important to follow optimal access patterns. What these optimal patterns are, are architecture dependent and are described in the according sections in the CUDA programming guide. A small portion of device memory is allocated to constant memory. Constant memory is accessible by all threads and as the name implies, can not be written to by threads. It can be initialised by the CPU when starting a kernel if needed. As constant memory has a separate cache, it can be used to speed-up data access for constant and frequently accessed data. @@ -93,7 +92,7 @@ Another special kind of memory is the texture and surface memory. According to \ \label{sec:occupancy} % Describe occupancy, why it is important and what can impact it. Maybe add a simplified version of this table: \url{https://docs.nvidia.com/cuda/cuda-c-programming-guide/#features-and-technical-specifications-technical-specifications-per-compute-capability} to explain the bounds and effects on occupancy -Occupancy describes the utilisation of a GPU. A high occupancy means, that there are Warps executing, or in other words, the cores are occupied with work. This is important, as a low occupancy means that the GPU is waiting for work to be scheduled and is therefore idle. As a result, it is important to achieve high occupancy in order to increase the performance of an algorithm. It needs to be noted, that occupancy is not the only option for improving performance. As it is possible for the GPU to have a high occupancy while performing a lot of unnecessary or redundant work or utilising compute-resources that are slower. An example for the latter would be developing an algorithm that uses 64-bit floating point (FP64) numbers while 32-bit floating point (FP32) numbers would have sufficient accuracy. Because GPUs tend to have fewer FP64 compute-resources than they have FP32 compute-resources, performing FP64 operations will take longer. However, despite these drawbacks, having low occupancy will very likely result in performance degradation while high occupancy will either improve performance or do no harm otherwise. Ways of achieving high occupancy will be outlined in this section as most other performance problems can be solved algorithmically. +Occupancy describes the utilisation of a GPU. A high occupancy means, that there are Warps executing, or in other words, the cores are occupied with work. This is important, as a low occupancy means that the GPU is waiting for work to be scheduled and is therefore idle. As a result, it is desired to achieve high occupancy in order to increase the performance of an algorithm. It needs to be noted, that occupancy is not the only option for improving performance. As it is possible for the GPU to have a high occupancy while performing a lot of unnecessary or redundant work or utilising compute-resources that are slower. An example for the latter would be developing an algorithm that uses 64-bit floating point (FP64) numbers while 32-bit floating point (FP32) numbers would have sufficient accuracy. Because GPUs tend to have fewer FP64 compute-resources than they have FP32 compute-resources, performing FP64 operations will take longer. However, despite these drawbacks, having low occupancy will very likely result in performance degradation while high occupancy will either improve performance or do no harm otherwise. Ways of achieving high occupancy will be outlined in this section as most other performance problems can be solved algorithmically. \begin{table} \centering @@ -115,23 +114,23 @@ Occupancy describes the utilisation of a GPU. A high occupancy means, that there \label{tab:compute_capabilities} \end{table} -When starting a kernel, the most important configuration is the number of threads and thread blocks that need to be started. This is important, as this has other effects on occupancy as well. In table \ref{tab:compute_capabilities} the most notable limitations are presented that can affect occupancy. These limitations need to be considered when choosing a kernel configuration. It is important to note, that depending on the GPU and problem, the occupancy tuning might differ, and the same approach might perform well on one GPU but perform poorly on another GPU. Therefore, the things discussed here are only guidelines and tools like Nvidia Nsight Compute\footnote{\url{https://developer.nvidia.com/nsight-compute}} and Nsight Systems\footnote{\url{https://developer.nvidia.com/nsight-systems}} are essential for performance tuning. Nsight compute also contains an occupancy calculator which takes a kernel and computes how the configuration performs in terms of occupancy and also lets the developer try out different configurations \parencite{nvidia_nsight_2025}. +When starting a kernel, the most important configuration is the number of threads and thread blocks that need to be started. This is important, as this has other effects on occupancy as well. In table \ref{tab:compute_capabilities} the most notable limitations are presented that can affect occupancy. These limitations need to be considered when choosing a kernel configuration. It is important to note, that depending on the GPU and problem, the occupancy tuning might differ, and the same approach might perform well on one GPU but perform poorly on another GPU. Therefore, the things discussed here are only guidelines. Tools like Nvidia Nsight Compute\footnote{\url{https://developer.nvidia.com/nsight-compute}} and Nsight Systems\footnote{\url{https://developer.nvidia.com/nsight-systems}} are essential for performance tuning. Nsight compute also contains an occupancy calculator which takes a kernel and computes how the configuration performs in terms of occupancy and also lets the developer try out different configurations \parencite{nvidia_nsight_2025}. -In general, it is important to have as many warps as possible ready for execution. While this means that a lot of warps could be executed but are not, this is actually desired. A key feature of GPUs is so-called latency hiding, meaning that while a warp waits for data to be retrieved for example, another warp ready for execution can now be run. With low occupancy, and therefore little to no warps waiting for executing, latency hiding does not work, as now the hardware is idle. As a result, the runtime increases which also explains why high occupancy is not guaranteed to result in performance improvements while low occupancy can and often will increase the runtime. +In general, it is important to have as many warps as possible ready for execution. While this means that a lot of warps could be executed but are not, this is actually desired. A key feature of GPUs is so-called latency hiding, meaning that while a warp waits for data to be retrieved for example, another warp ready for execution can now be run. With low occupancy, and therefore little to no warps waiting for execution, latency hiding does not work, as now the hardware is idle. As a result, the runtime increases which also explains why high occupancy is not guaranteed to result in performance improvements while low occupancy can and often will increase the runtime. -As seen in table \ref{tab:compute_capabilities}, there exist different limitations that can impact occupancy. The number of warps per SM is important, as this means this is the degree of parallelism achievable per SM. If due to other limitations, the number of warps per SM is below the maximum, there is idle hardware. One such limitation is the number of registers per block and SM. In the case of compute capability 8.9, one SM can handle $32 * 48 = 1\,536$ threads. This leaves $64\,000 / 1\,536 \approx 41$ registers per thread, which is lower than the theoretical maximum of $255$ registers per thread. Typically, one register is mapped to one variable in the kernel code, meaning a developer can use up to 41 variables in their code. However, if the variable needs 64 bits, the register usage doubles, as all registers on a GPU are 32-bit. On a GPU with compute capability 10.x a developer can use up to $64\,000 / 2\,048 \approx 31$ registers. Of course a developer can use more registers, but this results in less occupancy. However, depending on the algorithm using more registers might be more beneficial to performance than the lower occupancy, in which case occupancy is not as important. If a developer needs more than $255$ registers for their variables the additional variables will spill into local memory which is, as described in section \ref{sec:memory_model}, not desirable. +As seen in table \ref{tab:compute_capabilities}, there exist different limitations that can impact occupancy. The number of warps per SM is important, as this means this is the degree of parallelism achievable per SM. If due to other limitations, the number of warps per SM is below the maximum, there is idle hardware. One such limitation is the number of registers per block and SM. In the case of compute capability 8.9, one SM can handle $32 * 48 = 1\,536$ threads. This leaves $64\,000 / 1\,536 \approx 41$ registers per thread, which is lower than the theoretical maximum of $255$ registers per thread. Typically, one register is mapped to one variable in the kernel code, meaning a developer can use up to 41 variables in their code. However, if the variable needs 64 bits to store its value, the register usage doubles, as all registers on a GPU are 32-bit. On a GPU with compute capability 10.x a developer can use up to $64\,000 / 2\,048 \approx 31$ registers. Of course a developer can use more registers, but this results in less occupancy. However, depending on the algorithm using more registers might be more beneficial to performance than the lower occupancy, in which case occupancy is not as important. If a developer needs more than $255$ registers for their variables the additional variables will spill into local memory which is, as described in section \ref{sec:memory_model}, not desirable. -Additionally, shared memory consumption can also impact the occupancy. If for example a block needs all the available shared memory, which is almost the same as the amount of shared memory per SM, this SM can only serve this block. On compute capability 10.x, this would mean that occupancy would be at maximum $50\%$ as a block can have up to $1\,024$ threads and an SM supports up to $2\,048$ threads. Again, in such cases it needs to be determined, if the performance gain of using this much shared memory is worth the lower occupancy. +Additionally, shared memory consumption can also impact the occupancy. If for example a block needs all the available shared memory, which is almost the same as the amount of shared memory per SM, this SM can only serve this block. On compute capability 10.x, this would mean that occupancy would be at maximum $50\%$ as a block can have up to $1\,024$ threads while an SM supports up to $2\,048$ threads. Again, in such cases it needs to be determined, if the performance gain of using this much shared memory is worth the lower occupancy. -Balancing these limitations and therefore the occupancy and performance often requires a lot of trial and error with help of the aforementioned tools. In cases where occupancy is already high and the amount of warps ready for execution is also high, other areas for performance improvements need to be explored. Algorithmic optimisation is always a good idea. Some performance improvements can be achieved by altering the computations to use different parts of the GPU. One of such optimisations is using FP32 operations wherever possible. Another well suited optimisation is to rewrite the algorithm to use as many Fused Multiply-Add (FMA) instructions. FMA is a special floating point instruction, that multiplies two values and adds a third, all in a single clock cycle \parencite{nvidia_cuda_2025-1}. However, the result might slightly deviate from performing these two operations separately, which means in accuracy sensitive scenarios, this instruction should be avoided. If the compiler detects a floating point operation with the FMA structure, it will automatically be compiled to an FMA instruction. To prevent this, in C++ the developer can call the functions \_\_fadd\_ and \_\_fmul\_ for addition and multiplication respectively. +Balancing these limitations and therefore the occupancy and performance often requires a lot of trial and error with help of the aforementioned tools. In cases where occupancy is already high and the amount of warps ready for execution is also high, other areas for performance improvements need to be explored. Algorithmic optimisation is always a good idea. Some performance improvements can be achieved by altering the computations to use different parts of the GPU. One of such optimisations is using FP32 operations wherever possible. Another well suited optimisation is to rewrite the algorithm to use as many Fused Multiply-Add (FMA) instructions. FMA is a special floating point instruction, that multiplies two values and adds a third, all in a single clock cycle \parencite{nvidia_cuda_2025-1}. However, the result might slightly deviate compared to performing these two operations separately, which means in accuracy sensitive scenarios, this instruction should be avoided. If the compiler detects a floating point operation with the FMA structure, it will automatically be compiled to an FMA instruction. To prevent this, in C++ the developer can call the functions \_\_fadd\_ and \_\_fmul\_ for addition and multiplication respectively. \subsection[PTX]{Parallel Thread Execution} % https://docs.nvidia.com/cuda/parallel-thread-execution/ -While in most cases a GPU in a higher level language like C++ or even Julia\footnote{\url{https://juliagpu.org/}}, it is also possible to program GPUs with the low level language Parallel Thread Execution (PTX) developed by Nvidia. A brief overview of what PTX is and how it can be used to program GPUs is given in this section. Information in this section is taken from the PTX documentation \parencite{nvidia_parallel_2025} if not stated otherwise. +While in most cases a GPU can be programmed in a higher level language like C++ or even Julia\footnote{\url{https://juliagpu.org/}}, it is also possible to program GPUs with the low level language Parallel Thread Execution (PTX) developed by Nvidia. A brief overview of what PTX is and how it can be used to program GPUs is given in this section. Information in this section is taken from the PTX documentation \parencite{nvidia_parallel_2025} if not stated otherwise. -PTX defines a virtual machine with an own instruction set architecture (ISA) and is designed for data-parallel processing on a GPU. It is an abstraction of the underlying hardware instruction set, allowing PTX code to be portable across Nvidia GPUs. In order for PTX code to be usable for the GPU, the compiler is responsible for compiling the code to the hardware instruction set of the GPU it is run on. A developer typically writes a kernel in CUDA using C++, for example, and the Nvidia compiler generates the PTX code for that kernel. The concepts for programming the GPU with PTX and CUDA are the same, apart from the terminology which is slightly different. For consistency, the CUDA terminology will continue to be used. +PTX defines a virtual machine with an own instruction set architecture (ISA) and is designed for data-parallel processing on a GPU. It is an abstraction of the underlying hardware instruction set, allowing PTX code to be portable across Nvidia GPUs. In order for PTX code to be usable for the GPU, the driver is responsible for compiling the code to the hardware instruction set of the GPU it is run on. A developer typically writes a kernel in CUDA using C++, for example, and the Nvidia compiler generates the PTX code for that kernel. This PTX code is then compiled by the driver once it is executed. The concepts for programming the GPU with PTX and CUDA are the same, apart from the terminology which is slightly different. For consistency, the CUDA terminology will continue to be used. -Syntactically PTX resembles Assembly style code. Every PTX code must have a .version directive which indicates the PTX version and an optional .target directive which indicates the compute capability. If the program works in 64 bit addresses, the optional .address\_size directive can be used to indicate that, which simplifies the code for such applications. After these directives, the actual code is written. As each PTX code needs an entry point (the kernel) the .entry directive indicates the name of the kernel and the parameters needed. It is also possible to write helper functions with the .func directive. Inside the kernel or a helper function, normal PTX code can be written. Because PTX is very low level, it assumes an underlying register machine, therefore a developer needs to think about register management. This includes loading data from global or shared memory into registers if needed. Code for manipulating data like addition and subtraction generally follow the structure operation.datatype followed by three parameters for that operation. For adding two FP32 values together and storing them in the register \%n, the code looks like the following: +Syntactically PTX resembles Assembly style code. Every PTX code must have a \verb|.version| directive which indicates the PTX version and an optional \verb|.target| directive which indicates the compute capability. If the program works in 64 bit addresses, the optional \verb|.address_size| directive can be used to indicate that, which simplifies the code for such applications. After these directives, the actual code is written. As each PTX code needs an entry point (the kernel) the \verb|.entry| directive indicates the name of the kernel and the parameters needed. It is also possible to write helper functions with the \verb|.func| directive. Inside the kernel or a helper function, normal PTX code can be written. Because PTX is very low level, it assumes an underlying register machine, therefore a developer needs to think about register management. This includes loading data from global or shared memory into registers if needed. Code for manipulating data like addition and subtraction generally follow the structure \verb|operation.datatype| followed by up to four parameters for that operation. For adding two FP32 values together and storing them in the register \%n, the code looks like the following: \begin{GenericCode}[numbers=none] add.f32 \%n, 0.1, 0.2; \end{GenericCode} @@ -181,4 +180,4 @@ With the concepts already mentioned, it is possible to generate executable code \subsection{Interpreters} % What are interpreters; how they work; should mostly contain/reference gpu interpreters -Interpreters are a different kind of program for executing source code. Rather than compiling the code and running the result, an interpreter executes the source code directly. Languages like Python and JavaScript are prominent examples of interpreted languages, but also Java, or more precise Java-Bytecode, is also interpreted before it gets compiled \parencite{lindholm_java_2025}. However, interpreters can not only be used for interpreting programming languages. It is also possible for them to be used in GP. \textcite{langdon_simd_2008} have shown how a SIMD interpreter can be efficiently used for evaluating entire GP populations on the GPU directly. In a later work \textcite{cano_gpu-parallel_2014} further improved this interpreter. They used the fact that a GP individual represents a tree which can be split into independent subtrees. These can be evaluated concurrently and with the help of communication via shared memory, they could therefore evaluate the entire tree. With this they achieved a significant performance improvement over previous implementations. As shown by \textcite{dietz_mimd_2010}, it is even possible to develop an interpreter that can execute Multiple-Instruction Multiple-Data (MIMD) programs on a SIMD GPU. However, as noted by the authors, any kind interpretation comes with an overhead. This means that With the additional challenges of executing MIMD programs on SIMD hardware, their interpreter, while achieving reasonable efficiency, still suffers from performance problems. Another field where interpreters can be useful are rule-based simulations. \textcite{koster_massively_2020} has shown how they implemented a GPU interpreter. In addition with other novel performance improvements in running programs on a GPU, they were able to gain a speed-up of 4 over non-interpreted implementations. While publications like \textcite{fua_comparing_2020} and \textcite{gherardi_java_2012} have shown, interpreted languages often trail behind in terms of performance compared to compiled languages, interpreters per se are not slow. And while they come with performance overhead as demonstrated by \textcite{dietz_mimd_2010} and \textcite{romer_structure_1996}, they can still be a very fast and easy alternative for certain tasks. +Interpreters are a different kind of program for executing source code. Rather than compiling the code and running the result, an interpreter executes the source code directly. Languages like Python and JavaScript are prominent examples of interpreted languages, but also Java, or more precise Java-Bytecode, is also interpreted before it gets compiled \parencite{lindholm_java_2025}. However, interpreters can not only be used for interpreting programming languages. It is also possible for them to be used in GP. \textcite{langdon_simd_2008} have shown how a SIMD interpreter can be efficiently used for evaluating entire GP populations on the GPU directly. In a later work \textcite{cano_gpu-parallel_2014} further improved this interpreter. They used the fact that a GP individual represents a tree which can be split into independent subtrees. These can be evaluated concurrently and with the help of communication via shared memory, they could therefore evaluate the entire tree. With this they achieved a significant performance improvement over previous implementations. As shown by \textcite{dietz_mimd_2010}, it is even possible to develop an interpreter that can execute MIMD programs on a SIMD GPU. However, as noted by the authors, any kind interpretation comes with an overhead. This means that With the additional challenges of executing MIMD programs on SIMD hardware, their interpreter, while achieving reasonable efficiency, still suffers from performance problems. Another field where interpreters can be useful are rule-based simulations. \textcite{koster_massively_2020} has shown how they implemented a GPU interpreter. In addition with other novel performance improvements in running programs on a GPU, they were able to gain a speed-up of 4 over non-interpreted implementations. While publications like \textcite{fua_comparing_2020} and \textcite{gherardi_java_2012} have shown, interpreted languages often trail behind in terms of performance compared to compiled languages, interpreters per se are not slow. And while they come with performance overhead as demonstrated by \textcite{dietz_mimd_2010} and \textcite{romer_structure_1996}, they can still be a very fast and easy alternative for certain tasks. diff --git a/thesis/main.pdf b/thesis/main.pdf index 78116c4ff156431e32e946570fd5f09fac41b8a9..d1cedd3d637a762c82f49910853d2d7ae9736a51 100644 GIT binary patch delta 100162 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�+Q{5acx= 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 delta 76911 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�mw!Yg(&;J=ppK|nPxd>_Vu0U4co!8x+R1$^D)i4{T ztBI>{hNqDw=TbSDhzU!vq8anSB2N)^eKON=R~+>ba+Kh{!rF!Et?v7 zVJ$arBLfyK{#sF_HK)wB^L!u1uEJlNpKtbjO+;_B7>rWUbwd4t5yhApBVzr0fVtVS zpmIGNMt*CnvT@I0^w^Q(DLHxk-i3R{6PoL+^a42JgRget2^^?;6$wXIIOeMUL5*2m zkui@*(r&@hw5_lmq9n8>lhw;OKJVI2FRe3J{I;wKIf?ms#WkQJI84HBYfg4%ng)+bQsbURnG^xL4F5>pvw zd>vq?zdJK{wxc*`j&2WHo)oe0FGenhZ6uu<#Fn=TmRz@fEopQ^3PzK!#@6|9s~=;N z#ErL-qU^k-Fqpi!;OsDB!|non>Vj)BMl7y5n{`YDP)l#BTU%eR zrM2mCd8*WT@2R3-3&^=F4JhzEQ+AraF*BbJA%WWN|5cw#4aLDeLIvzwR;N%{sjh-% z>;tt27Yc#Wj<&xLKYus2VeucUM?+v(h`i)(_d!)ix&R>%79j zi9b)`v^l|VJMXD~->LB$r6#_(&#U)DWt?Tie=^i~j;W>qH=NM`bl0ZN*A=e>8g6np z6NI>2Yp9^6htg%rYrya;7*P8n$OLbL%M3Tc%A8I|sR_y=ez4|Iup5Np>gxI67trT;y{2g?V|}>L@EF<>-0I|KhWJF!Iv>Io*%2=RVvwKPwB^ zf9v63uHDa^6fbFnh%vBwmVeXgqs+WrV(AluY_oRn-mKQE;s6N|Qu zbkQ|QH5v>k=6M zVF{s%^W!C}s%qV*00D!L;>v_x<>WvT1yu{BY$V7azCQj*rPgK-aGaWqtUOyP(CT^L z98UC1HxqrP6>ogX=E#WdnjPX1$qEQ`vWWep})tE^pQ4IM&>ywrzC23PoFD~ z`$Mn9GKWBsE3f=9&53tA9&1I$m{#9Xm3w^8`Y`xkrI_x2?~N$QB2cEe+TW5#i!@VG zJrZ3-b?b|KcNzv<)Q#1-BfV*}OUC9Bmftg7lU?t-`v1f@b2mZpn~PlvN9m{M@H-j`HnAMURD+==HF=Z}Y-a3xCZA{PTh+YD)I z=ODZsOwhPY?aYc6`P5?~TC5{FRa5utyw)15+3TCHX|zg5a^V1XEp!#w1cvX!AHPos z8^rz2mzbRoa&rJM#QxEJ>9LzDryZv6hRp4?u!~LogTBqDJTZ72(f~Tr?oT#IAE-Z1u z94y)RuM*KS6qk9aonp?wjpyKAj7kaApPS3KG*%U5!zKYZGqHAV1HhO7G*!L+gm~l9 zAJVqT0`&sFru zz0gaLapia?(-?iqdkStR$;=yfM1OzoGF{0yWyup07jOk_Q(YdYkKeF#sF4|%7AyjP z+aVW_Q(pi@Q5pd?j-tbxS=I!OAG>56CFT_Bm;}8~o)uQXzl5@JHi1PU9*N)?J6Agt zJAe>XDyS-|G*ToiSB^Rh5R}*y>>AAzP)yy$P#06k?Z{^(&3OU!?xOW*NY;d=`i%uc z@ytS-34IBKVSEcUVNI~PbFYHEiCYX7xcqq}Wx;?Baq*T)`|NbKIYjb22I?o{h0L*7 zke7rdAJrg?@`9)AV$1y=J=K2QHa)(gKY3cb%4wXK11bn@ZB?0jvtd)hW6>~Z*M z1z3RAF-@XfjNdpL0ay-RzRp86o9`~&ghAyRz=(i99zWj-@wDt^nCLHEC_?O#nS}IBIRU15 zhRYT0U)msFlVP#ze2bIp!)m=w{Ke<0y-?3abW@qGIa|F1q|fqYol-pdG+epH*;pW|2e5|}I12EzIMCQ@z*-1&#K};Lo^UxiSmEw0t|mLkzlAE( zCG_vi1fwhg?_JnP_8oax8x-Aon0xIU@~`!G33|PA@uV=(D1i>{Y(0=bH4MCXT}`}D zFU5-FK8{O z_r%!cx~}UFi2dxw>l1evY_I$q;$enbO(q043$s7#{nI)vOziC38f=qL+z^0Rc?S;* zsXx|hzZj8ZJH1c0b}!6ZgSn-z?_1JTb&fmzq_k<5^!qD8p%%^HRxxoq@u8<8UfJKg z7tAM(b`elyQc*{uxnpV+MaK7&G+ zKuO>DKQmd~YCA@Xcdm(TMEq#(?={o@iVBr6R&Q6oq!1f1|6TzzzR$em-Z5%iqPi5T z-iLdK)*NlKCf)j8l9Ms%e*JP@@mg{JR?WqHQEuKMaXdFIp~9a%All)sb; zy~pLBd4jNX_|Yna<2|r3tato!^+4bv4a=s{0ntJBtoL=t6}v#(%>$*Eb3)jVeQq|W zH{4=#6$<*TloUl_VU~E2s^7-V*U7v0OQW*O%66sC%x0&VKur}evfEHn1dPI-)xfIe zKJFCauq0%1Pr_E{Gdg8t$3PTQp1HxM4fNWutJ=_Id#?ULcPT`O36Y7LppuolgNyRU zkLJKAlF{#TxE{`?f&yP0uOJgT_}A`NIEChXUW=00LTh4!@a!d4N=@ddt6t$*{z)Hg z&`B-o9k;XG3(tf{d~={Biu=>c{hAmKuT8A8m(ty!lM{u-%q#kyvaMl(hlUNuCA>O-9xPvXTZvBug-^UWF zWYplfjcOWwq!he4{`*lPL@|F%Y+TE-`1B`KnspV6V;@OiBkhqo!_((?h{*iX`@ z@(wi$$YPk_W;eu&YwLkq%1=YA(d%ITU0M)#WJi*elwZStLnD_<1LP*Xh1QY_WVD0u zeQF6n4Nv3WXC}07-6S+f&>+S6#m)hMHltyyb> z#gjp(|0{MDvYME@%q)-TT<+#ROuo)HLp>QD0A?mOf@}N>(yU*$09Y%@!f#HC^L;Ui z7}l-|)Y2wPHLdRNb-QU{pb#~cY>82#qWfcS`Es{AbVwg8(HeG}1AwCN<`4b{ffynh z<<7OY?ZaSHlZnpgBV zU?LMXrJ)saPBQ`+eTg0LtuRkc_V*#V31roE2g`gBBPbA?L%zlr&(+L$M@(Sl-JS^D zsRekGh?!ht7TOG_&U(2qcq*Tk`>$o;!gNpQtV?5VwXzTC^Wj!U&)BT^B&x`%6Ip@6 zb;(5hZeX|aVGksK0Lm{cs)#RjHU1tCoM(bF_qOr>N1D#U^|8a?Bl!yZ#O}O^E$;No~`}I5Aa5C+1==zWX ziBFq0y<5s4Hh&i86t$yEfALTZXbnnM3r#x~^ygj!_0_8Ccw0oF0?e| zidiwaVM$~Ec1hdllcsu!MSlz#Hm>M65=++%n9d|39m}EN;Td;TOwGTv!#f2=dsG=a z?72~5^jM4yk&Ak1QnJ7=`~h;cYhX6hsqfShG;p@~(ZMne)+Zs}7^V1{u}2r-2;Ey$Ew z*p-PuLD+$`7E|U=Rur_gVdq#LV9^}1pqnv(Mu)e6z8G_~V6B#I_C>4Uam2$zW;V3Q z0nN53^_NLF9NIy&Ppl$mDzi#z8JnFPIC>w?n;Y=@db)Hejk_100x6eY47Igihar%W z=j!*?&&&p>kOb44H_bRX9lJywT`qwpI@1xg zZT!XL)@V0G{3_B7Q()Ss>6IYHlYln_Z%ol>W3Ey#7Wdy9ha>xo!tILTF(gAD;1^bs zH~T#DqPjLg4L-RUpwDmqVfI4E9BzF-(0k~G-Qa}P;A6}3@&uHAGZEXbv*ZzSZ&B?% z@Y}tAR}`YEVAcCY72X4^1J_q@~@VBbtBy-QTzO^zBbC3)C0cT94@Apy2vA@OY=!3lJu zu9`b4c-W7`xsVb=XgXFrfz4M0I18yOokVENB*8JpYsel*5B^s+6U)1e>j(2*OOU%N>Lkc0n?e&&FP^d%dpiV$8Zrna8kD(G1JzIu>|1P|F#aHZQ%W+<79P2Lkpz-k z00CPpNWx4%ZakoXE(z@cbJhG~q=%RWA3GLGlcfiq=+ywIfNX?OM+flzwv9h;-X=vl z#gngeTfc%Wn`i}^py5pofZTH+AFB@uclg5s7N>qdM~>O>{Md*CIdvH`-S26TcU6ZUAkpB$17Hwb?^vebDTfXd8+UN3l9-(H*m9PI@v_a6l zfLdFxe{6%M606Oa0>lc3IldE_)&={Qhj6qidz0x~Z55Ww&1h}h{8P|6fZrwo8l%>D zyL)|>?+qjq5;q8Ih>l-j5{5^`i4wG#b@HWksxm}byXz~&*r-g-^R98}#nVJ|!Gp{VT${7>>Fjk7Y$?~#I3k~yQ|~j? zkZg6gC-u8~-0NQI)->wH>`iayE+|_@Plwq;9H=HDx-S3WFt#$c$&Od-R9frl-dAi( z?Nq*h@y1R|_trRDEM6}rza_t`zBR`xk2vyd&yCXg05*Qc=K06t=2-pmXScVt*M+H4 zSN@;b=(G9*BpR9kpO3SrnYarhsv-(;+vN`aX#(0ip)fLQxU!mj|JhUZP5WqB^@=87 zjWHxUi5h35760U_nJ|CRCZ?toeHV79XS>Z>3lg*3oZgCxg;!$>8Vw1lil2!4;Otsg z=>m}A#|2a4_)TU24Q)kZJ>qI%uYbLvYQ@#xDskdvfnZI!cuwu&9K;jL8BoQ*%YXC@DC^;G60J&v5}?C?}qLt;N>kCaZQgl zmULWFLTL4R5@BqfZ%Z-{+QmQ|*OF}^5a4m`*k3DC11fl7{Wy}TDPRphKGT4w&<@Ky z@`2yTn-p@S>enUdXpN3r6iA&il5@-=+prJ$8bDLN(NnI&P{$Q(yJW+uOcbY*IPRpD ze@(e4_r-cUqdKxTz=UY|-Z?#8{R)$g&*2?w2!Ma#bieT`P4%LtlD)ak9C$IL7! z`PXAn_0_-r>sA+{i*6#IjE+)8&PsK5Lw}gzub2TUoRG+(I-=#l?;!l$45*+8Kn^Zs zoxmJdv<&X_85!#@&BGZ1SB(2SF*o6b?~2`!mewv&V`#B>-*px18dfEr{ZS>ohKtr#}t1;whI0FN{m4hh{wqJ}3=F}!nRV}a-QE%|(XFQ0(7 zKgqrVdd<(z++ihK+t=mW)>qH_&G*Gqu{;8opBt}tV{S#~-tG6%pL|yzZTI_Ap`*8N z?{lZd1o|V^$MdPI(ggZ%ZI0eKUnd=~K#xnkS~^=Vk*&2KhkKVd23MZ9@@YqzyXU2) zgCADzpitYiq35sifBJTv_&=N+KhFgGMq&m2F{E7A9&>!99FfsivTZ5e?byoDpy8BYg z)_#2q`Kw01Uak<-UB%;Cc&dHZ60Ph9z3>JiIEBoIzjT34Q#kb z4MLYKQB61wsf!Ub78bi|kYpmM34mpat2_es(2r+d#&Q)T;ln$xZ-eX8F*k|!ss6$`->2@Y&yWCx3hArfTD zi-HJABIe2+1uhaL>1Im!25^mm*nC=c&N zG`WH~oLf*wEK(klME!|jH=@EBi6B@P6Br1x6p1Jzrc#(-Hz+C9V_&EQSaBUFsKgLc zRLJl8D1)LIva7OFJ5fk@J{@foek)2^GZ;@dfPfG_IoJi(eVLVA6;GwIICRV0{( z(t5pneph%nFSRrtF#t5x)Q7nUR7D5x?~xfQ?rqf636y5pSLNR!HK`jdw@OO>ojGTm zsbEm?Oq|b}>Xq)#C$-*lvwc+Y<$m?$@EQhQu!S_ZDQU`?4ror(jg>U-LxtZ5kSNDO z$meYAU+pZncg|E69%8h&%~=25f$&(RxpFwobJy%H*Lcd}%K#ki4;2%?U$>t34>B_3 zcU#^&{pK5S@%81W8XY}eq?ElL5%QRb_oFB zloN}KUB$SIxyvCPWlWz@QT0A$ajgQg&T^OLQ=49UUtt?up)?E98{6>h4 z>M<1H(yMu7mZKZfYg-Zf%`fe; zrR2ZPklB*sR*|_sU%_8;8uI==YL8RK?VG&J??kC>N}zFEKGliPlH-GM?w9yCQ zT6xifNfxkKb0p#$&p~Bv2HpHLIP8(gCYc_^PTz`w5E&d8Q&4d4ASp@K9>06yb}|>h zNB#@nQKzV&#u2VBB}k)beG_Z0OCrRJz3<8o3~EWyKZF$sISZi$Y^C0znsjb+lUbRe_b0+1eEQ)L8o?HDpT^FtK zF#(9V$kAh)f=PXfubOO4UCcNHfBU$N1kR?}cQ6*aGY>D)q1 z!c3ecy>@C%i@mGC#u!XoXd1-ESaww^GULpV7lR&)ohxPY9(dJ-8FfCvy?QN*9~xON z-0ls9wX>{kS4bHTvqs&iKU8eTbBg?n5(7Ag9ga9d5$aUvir2n+KU|7_HeIf(4X{Ob z!{}_75`7CA05`M;MWnt!u(pH?)r!;fk|&6BFJcg46nSO1U~}zcOI&gc{k54H3<~7~ z+`e43c{N!Co7FS+XqLaiZG6RXp1+;Ed1SgOGh%*;v}dzba$&!Dxb?W$@avijbHaEJaiS;_GI#NY}lKGJ;x4Zkw_hf`YY-${}N>bE8od zx1;(39fzu|AT|be7-!tPcd&qS;@q2CcHYoSt<;-UCRd56RMJjW)aF@sK?9hZ;*^FK z5rxoQJ~zcx7X$q-Q8!NN3IomzZX^IHRtWG8@~{Xl;kdgwM;}W<3^V)b%J&hu>bUqL zz>Lq$m7x&b>VEqhQ9*me<}?1miyO_afKY=EYB|giPqoOkvW!`bhq&vnpYNM2?(-@5 z_RF@wm!S%^1ddI6tylMLt=>zm$zzrT~s=yO= z%Fl8+-;ifPCdi(ig~l6TtSBzcC0!cF(kGvCn8O1`YjUSYN*g`B2eyEVT4dQ^&hDN4 z=a0`*r(-(wu2<0gV<1}33`<1Qa$^e#c<0*gKq}CZGEv}|s)UA#_dB2N~nsVz;Gi#(J|G5_ixWrvN z@28Bo=ES~fMqWBtDz!d2w#)r%R7K)<4XL5l@ti65Wr#X~-0c3WAZTs6*i--QXj$E1 zeR-ZkA5- z<7U4fck@Y)9Qcs4X$RScUpTXAoXRZ&o>pAwy*J?Uv_{(q%3tNLe`*CAKkfpkrw!M= zRE;U*RsFYQY><_6>ui4}zk{b=eqE^#CrC|DSDxknW~h3b3(WC#5T3bQXBuJP_-OcHga9|K&h-AJDw#s zX`3wHvppJl%Rg$uo-@m)VzX+xxaiVZ^b{Sn`aed_&Y#a8pJvSQX=b~L%zhA1Z!rO< z*6Tx}f-rKW5*>k}wzgP<=9&K(BmPX#TCL|nn@~WQSXzH(JFp;3Z2x@^#vQ0dDhLxt zs^bDAdTVkx7^e;h(|@f;Yu!HtW6}8k*3eo^$n`w8^C4t<(yYiY}@rjTV-M zE>o@<6jDc-cxFuTsoLCDRzC-6k1>qUgY91&P@GdIfF_p$TCRtmV4DeayBnc$0cFEsQ8j{c0oB?ufzR9Z+Iu0JYst z+APK!gi#9(dzoGEs!$f*t4Ocic8KX4uYM3yb+kp+bz!Om|UL{@RwY(EkN9?sFgF)&vnV3`$S7+{A%enp8s9H3ZX z^dog4-KfX%%oB^@oD=I7ABW6+mprdV90M)BjgJPpAll9n! zEVg4ER!`Zi=Kt&oRj(($pr12Q!}=o4woMzaCGQ;D2cODLqj3;Q1`}8_9r&*XJZ7^Pt*1)2JpRDR>e=v!!QZf5{wgJ)(out%KKDxW3C`%_h55s@y*n$$HjbKEOM1 zo#pgcy=Wsywl{;VIG~CEqRTo*%XnObTpL@xR|q$M9h7moY~XT|K4}$hv{aWypEg@H zw>68k%YtxPuxq)+{GYbIGAQrZ%NlozYjKJecXuAVxVsiB?gf6hI}~@<2Y2`4?(Qzd zwQT=8yR$Rzyx;E0y_x$VnPifj+|z2;`QxGFJLzj^6c}87a`N;-`l@0#mkHE^Q!AKs zxm%Ezy#pQ4xLaO5mv)<8-z;uXoqSf%d8}g69?fI)> z9k<@P9&PR%4Mn|TMnVHB-5jv20A`XHVezO5Gx7=l?W z+VCW4RMAqq^!`0_$cqA$O@+ug^O5xq4JGg@qfN-kB?>BB@1`oFuIG_gWQ|Orsx5%D zj;WM66;mNERU<7j()MB)%af8@_LdrI2$3e<{W$RZ?Tq?~&d|BP3Obk=Ws`4S%l>;! zl)$cXq@}&<4TElDl>77>QPNpHJ-SHXTmmCvc-kCEfKlh}d^8_`VH9$WSPTg4E8)SE zu4^$6kMdi=9fiMJGU-(Qt!X{ucy%+n^kNa(^u19;vLrIV&zcdEKR0^b5MIS9nos7E zA3YhA7zpoma)T6)i0?yTN!bFE=SX^ph)TZ8Zf})c*n*4hj^_YJ`B?@t3?Wzc=ZYDC_znaRjh0`Te_d!L6&4iM@WZs>Q6^@UY$7DTtSGFE_6r?!I1*R`U45w?SU8zza;%@(Z;$SQ4{2$P2dgz`gp9_%AFSXL9%IaKqb zY&kqW$*iiJd62@l5lsimP$`{2(?!G{JLxxM3Q*+1MXw=_X`>{R{LZ8**F^Eg=KaS5 zx!xY-kpI*~U^a4bw@Ub~x1sK2C8`RSRHi93X7PKDJ-xHN|96%ocwnf2r$s?bG?YB` zC!y;x!whOJ;DJsvbqINzFyj#P-B|1s2BOVs=&Mnc(I2?g^+48L*Dk0Vt@22enH z04Vo&A*xWuM|9N(z7EGmnbd*31VL1!U#ZqG=0vLS00fUQ`%?@-fdZ0ntGOf&XHxXR zAf4g`f%KZ~Wh(C%BE|@TDx1Sy=e>A)(=yI%`t&;#Gh>10MPgmaMzm&ESgH(bq-Zz~ z2xf>9+B)Z$W~f9Cc#;i15rfZO-|C6HTqTPF{k>s94C)F{Qcw=~vqX4w2@+8x>+S(J zlo7j=fKpIE3;yf~`SeIQ(v1L#B%HZ2+tj?Ny%c*Yv*`>@nx6^xZ1uf*PXx2E*q*Gi zj%^scT!<{?rj`q12Uo^al}73>%TVfK&ZVk5HC1AnHwWQH%T+RN7H&x@-cLO$qByBW zu^~c3e3FpFh@$M*jkR$Bf8;4yWKioKKcx9%{TC0qFHvJpY)nE&&wvUr^={1rk^B zp%=(55KOb=*TCb-Y~Q9U-jk;7hMX82)N03!WNOXW_br8~{s~?yu)B1w@n41&SXxNE5fJJkqMdVe0H;mt*ONi)lBRDjBDJ)sMf-u_h0!-BnSBmx zNNPXt@-L3Ja*k2x=00rm=h)(Kb>hWEOl92be2e)xRxy&Tcck-cHdX`z2P#V|UwRSX*hcI+V3^bf>$ps!31tcSsm7*Az0E`zazxZrYp_ z2dB}rh<4x>%KBHnFdY8pvhAX@2mlFIoRWiPM2~J%u(VpT?Z_Sc*Aym)$Xp)#>E#NJ zocA*KOk&Xk6vQM|spP^d0r38Q$?7JaZkbJup_kLNBf-)n`6JQ{Ub47t9rT8_*ZTw3 zP|b_CAXFR?T%)}ElRlMi+uXhU=$L`Tzgs?Oguy+vLu*L}juFLr@2@+doi|To>gq}G z^(QyVjXY_w)yehGBtE{ZZ9ovsRE{9<@st9P2nna_#}uoq|76L?>_EyHve%|gq zZ+p7WMg+H%P=IhsC5q;i+L9jeXck<;HLrdi^v^6LT6_D(3+?(poo7eY%*-8FvI(^c z3+AW=FMl;;tQg~dVgz^I=Ck)lccH3`^pG&>{n-*`~m{GI? z8Bey1@!|t3?O)&brl!X=Zf`m|XonAmom32x=bSVqi`6~V4b*S{oHt~qL^`o{F{K>b zm>8%Z+{9|P(hCDq2>DsnmM-NOW)^QZ{;qDf${@{TrGJ}WaLd-e|=K> z_1k&Mk$r3|pFrpZ!`DQuWR*8bhM%0jZyLrjHiMgwuC}@b1%5{veKiCjH$aPS5x`s~ z+4ExY8s;C!qTu^Q>Y8h<^(Y=-)dT{+rbhd3;>@2jVcwjd0ehAhO(T-(F>WJ@tI@{; zX0nHwW3$G}QH;0te`mF*;*tYP-t0^bBXQEhg2dPbCzUM5v%f@iw8E9tiPqs%bgfOwexnhtKJI?>P}3`~O*Ugxr` zsq%X!!6!E)k61L4ZjTpwWRLOvINV_DD;EbFoqtk5DZvhBZZRINrMhS?1q>~sYM&=Q zuh%>L8ZN8nqF&J6i%!4~tJpq0rzMSo%ph!&SdG80QzoWWh&1d*A{%t}6_9=eY*53CWF3%35=>Dug zr*2zrQa`HScWl~OhIc?{wmU6wM{-mAM^$io0ykbTQneM#!T?``y44b2);N_>1<{imEy{;;YN{~jd|AN6&frsCbg59VndT%0C44v zhvRn2RK7YDPi^$ew=Q1d*q#D{{x2?GpIV}(Cdtkf70V_6RJiEMPKu2bTNkevDrKJ@ zvi=(Tz9)93riQa>G3b!z(=V3sZU%c!T`UTfnZ=?r@=61P@3Ws|BtAp{#iq%oH)=q; z>{MFpr>FTFv9<4{X%TK_Gim$>(AIn`-Cls-xE^U)Z_*ytwP(Ie^--ew(^q!kd$x^v zIb6tM`Dcrk6JJ;$D&vw8smQiX$servNb8Ye5Ob|i!XGb2u(YX$JzD+{0#WT=e-^uC zUm_X-zCxnWmR5?Vtc-Ia4;c{Pp;!LKO2=G%jqHAKf6;_{Zh*A$haZ*=Sbh2OhR8(W z($1(m2$RyRj*5)sw!|&rUlu{#p3_E^uv#=$CDyiFobx2N%An6|Hf^K*e&yqi%w%_O zEJNyu?!6W`lix?vzjQ*(tRU;BxR&E^Z*!>R$FOhNGShn1or!4=RRh zz5RL9N9XreZ3I=E+KB$PZ0w@q+>FLV*`lsWEVolEZ^KdvwfA0>;S@v-BSwuQsM@u& zBGQ zav|Zg)*H}JsZ2D%Hz*FQZ-8!4fnEKQmXc3#k!}g8nPxw^zieskReuFd?YK$fGEugc z;IZCGYXJ7U3p2Z)Q{h8>$>s!22DdWE_9uG}MVBtb&H%_J-@;%2x%;DTE=)ssfr8>- zZO+X^K!Hx#8-~Yf?#@AYg@WX1-mF6ig@)x|=lmxlZQX=G@;_#D6G99mdt$dO5#fKT z9)hf#oL$Ixxc^Tgg`Jm;{XaZTph)*e;#w2NU*GNk(mj{S(8m;l*b*zuW-B6^=)~f* z7^(h54@_swvbcHP6vHij2y8^m`ISp~B9)#lf%av62C^)TFO&r8Yz67&I$=@BiH;dE zL+l_na|ICWM1%SDj0IeFX8m}dDoe656m!B&l*$-5DdeAYkwy>l5|RN7aNUllM9$kq z>%mGks-z~*Rv;Q$jADQuf_n{>@F!833%d7hlos}-)gPlr643$D2_#w<&u5BKQurGm z{v0$Lg($`j-NYi}57)qs=oJOQkBv^4YnopE6*@I_M`T>Iu9nC^qz-l>K9;XAp`%n64NSE|~5P2+L!k3YtWLgqJm`Mu{iT?6F4RQ6PXdXdqaEkk$R=NXgLQ zaLpwNkL3aRVO78`iZYEKkBIblW}6l=mmL)jVcM&xms1R#3{DEsUll@A8hT)x79T=? zn>Np}3?gybZzaIQxG@+{%dp%Crcmw^vPrKgX7Zm=S*>qX98uTufHKpLq!|)SZ{&E= zA`k3rILIx_>T(}n4JCmp-OLYP1AZNT6{iI))4?34{}@sqVw|nVgqVhBEdWwO?n{W( zqp*kwA}o7Vz&6=>yf_0o;+S>sRT8a;CFcM-tAxJxMF2)mJ{DaE6ueO(w&sY5nKGoC zZWz8SjuhXtsN*vu07piNbRq(8YLp9Ws4_HT7o|$A912N{qKT~l(~I(56rTN3!Q@)p zQb)^r6tS``crb_?VH=MbZ0GAGfV(nL(RK>9+swA(f5d=4S(wXw9Y*XD%m!9;tSlI?b*rkdQx;?f(W#vQi6>gAaJrdglfM#p47Jgf>p z$Grg#Rzof{)I9T2)zHP?@!cn&^)Hy9EM3RDPlWaqk)l0rZF&Eh zBK-^NuyqKi{~T!_AK#|u4~fiy(vuqq?J;+55#C?R?`(Un6N2Q?0+Zep`*AZo#JsOL z%~^c7W(T&NkbZMIq{~HbgWtyy+VY8T8I4ZCkWd+UQw=UD{%dtibLOYAZN@@sQe&+3 z(a=k~TebTUN}TDLwmuAdiT}6E!$A+9I|nTO^eY62?tO*hMtW@cTmR)<)u-;$$r#)@ z4VyrxzKX}jYzj#!=z)&dq)=P}gQ`w9kb+X*ExlZy=C&W(@{Y0W@Hc*y8Jc;iHS`k9SWZMF- zbp*dgg--j9L2k97vL{Q7Vxp&tdY!{5D=ZUOfWDnX>hb#irwo&qcE^f}!~{ZMhonzG zL9Sx#hnXFbpP(;V%j38hLu$NyF z$XTBT2gs;(;0Rm4NrYn95^2IqGC{wT#3V%(dCMJr;>X!kcLYiC%49$y}i6s`n)L#0mE*8XD zq~C}VjYU+NXemblEtB*tVL+e0dMX;8 zDe@&gL85CXdMGWUs5Q&qV<}-<=%|hBA;BLcRhNH%?(gaRQ&R4bkiAsR>X#^@3b=} zCoQA#+1J+Cj!8IF@TJ|3x>?b@e|h53Db^YA)#i$rK92s!xwj`0fDl ztKK-G-`P5(-+6{8G+G#cqk{e3ENLV`{9QBsfQkL;XRtxlS%2+1o2xHJ~*KwQrpJ689M*ZjQe?@*(YK>?KufKe(zhpy(ae214@#83HHdKH| zDi#SmQJn|jR#-p!E;itS>&EZ6g!R~rEf(tQ8#reWQ99$SX%sd$rmeh*1412DXr8KW z_orL{!zx>~5@j)0hDUuF_lD2LI=G3~Vq=_wxl;BzGIj@7cjT;O*aHbp~{TTBkxf;PC1_x~CtIOy~ZlpHWV zpIs)k^CdrmUH^s=ySWFH*)3r|A9mc;60hBR1%G%GU@^pO{7~jz%h%5dkn@=wyj;DE zfWz$6drubL@1-}U;V8kR_)v1MxbG6!*T>k6OfPzp)dn7e8mOc$a={{EIb5FCkcp1@ zWW5+Fg~zM#E-3{FbsYyR7XqJu*F z|v-!9oUMxki#mP5P*6)=1ep5|f}c-*@Td05)1gfm%;_i&Z*?y(}ofzpxU(6(X~~ z9}Wm-bcOoYs{y@Zb;$zF%n=L4ErRNg#=|1)3LP)0YZv8oyPbpFaJAwO=)20ldbDP( zLC_OwTjTO3@D|+dUchlhN_7A`;+i_NzE=0w(;}#xIy=$Pguq-%9Xt`;9RB1Px5_Y_G8o%W30Rx4@w?6wu&eUVF>^^8h7GR&zp|w@*FdV#5EG%gp&mtEir}G9$ks|N}kYxD3 z&G#w~S2GO~%{by6hD8W+{8ic^#_0|5#Zum}j_S2^HJ<{sO`xq}hj!Bc}z*1${dywa^ zFQ$p4j>8OmB)z9!o+QV$%)NFAw1goy4|b$PjA7PC)eF}y#JvRqc+DsX?~I-t)$m1M z56)@b7QKpfAP$*GhYb1(vIu{UkbWz`h*;C)=yMo|k`ieyWQZOU`dm8OQp1`&bGjo$ zyW(Mmf0=J`jskZXPfZ93JeH;+Cw-Mn>`^*Pqen$ioSC6;bcm&%L1>W*H3SD^ge-NL z+N?X8j0gR4F&OarC8$7%)f8nyq({hKP&?CdyT%HeefdIo2sa8JRWJkL&2@61IyL#l zN&t<@;0V+wOBCS^C2m(qV{`f=ku*E>hR}Oq*GEU+=W;ggL8`$Rz}5_`_#z8~p*&d= zBGVm9h&2)-+Tq_kC)xo?^Cwq)o!=dQ;LKTwSmJ?T9YIQ>10k*51Vk;}BDZ<{xpRir zD}12qCsQVjY;ggt|Lh5^Y$}a&5Oux*3{#d4E;Dmfz7Cf*)Pd#e>*RwAzZ3YjReCaa z&)j4v?~eG#D8flJkm@wf7*3~@k!H0=LQciNdypJXQ?jlTKA@)M^efW|>Zo`kck-EO zW%zYD?K5ql|2TDtUQ@z;lH3Zqk-l#`sSZb_%q=tQp@)U-_s=h+PN&!6->|Yt3QbMwonZp7XYtV2aq@yf|F&xxDwR`!y@Mk^ue>%=^G<;DA|g;f^ezXlLBKe+h|e z9bxr)&7xvpcs+pOVM5f#(zFt(IK;OvL{96o9nSgNrTOCcB-d6h#kmEScZNwnu5G{Z zcnEV%rADOgv6J;9AC&D6A+q@Fh+YRx^L}?XEW?$2GD_6E;eylBGVmq4$;OP;@+=h_D@970UV-!s%Dzh&cL8rw@ST)&y@S5pJ?6#LSNDAFd@wSDyF~oe5Q^E}K0Spw z`sefM!I(P)$=_E}B7@q~|7P<*@}yw2Lt+6c<`ziIGInO>9%Q;KWW2mA`bf;GR$k`+ zF_D=6rDr8$Cu9BBsA6yLLdMI(O~yi|@}C|S_Wuyi{~!r6T>()sQC3k-5QvSJgHw!~ zmq(IQ^q*!rrv#^@C`g=>Q%s2L{}V#||HS-DByVo_-NllOjh+3!e|ZALsWP_2+BhLs zWkp#$GCduxel95KJw?4|V9?(t@ucJlSgbKEpQxSJt@x%Y3;U{v6y30hE zo*z zp2z~_`K3EraIzwEI!f@T6R5t;ZKIajOP7!eht#q$u$TS{N0n!s!spP8M%Aq&I^XDI zGZUOE35X!74vYU5+^_cde)AkJg(iXt6`|oliSaAg#y^G{7Uc$xAv?EWj-hFK=^O~} z0@=42c;MlBJRKnQU{ZR>@S!w&IhEip4lTHGp3GU~x7`UgpdyWMD*aKf(FH0f9JI-1 zmGq}>gjf(SH8CCo1GmwSVM2Q`9I%O?^>gtuAxcDrd7vAb&x~N!AqtF8)?xOHpyUIr z90u3LVw*Sz>G6ObNe4uf0CEQcJy=_EaNy|!`$v$?QBPEBkuoD^S@rjbg6MPOm*$&?`doe5EGDl1q9COjclG5yQ0T z(VmSFZ2f-3WSP5=>}NKQsLX5RHbFJwl$MJ4!y+*#3HqNR_WNNXB`M_wK{cXZ>xlS? zu)@+as{vRf<*Z84kd06a_@zVtPz00F zHVd+YW6z*5l2Ra~a43P_m3U5TwYLJK@`(Q|LK3J&l)_1cq5w<1O`hS)_+I8HbWOiY z&wBe(dFK+->>-pZHj6_GYK=QS`{RW0DJV%4NQK82{8t&d<3cM~1KkqMc*6G3G|RiX z?HG)!{)q)p0@Fs<*mB)TX1RxI!D+#^COQRQLC2tewqV|x_gv<;g_I}Go-w=&wq+^^LVaWO)L0h)?z>?*zU;!YfuCa3-! z(9AKL!(mIC{L^nRjc_`?`O}bQNtbK=@agA-3z{W#Lx1MCR8okB{tn^>Kk6~iVndJ6 zGzuRCDu?hV%Vf_A^LpV$&xYAdjdW6~Tw~CNpGNwlU%g2Dtl}-x*rMU74&e`9%*?)? zwI~*c{85#(69^u(<1F6f(UYualvLPepogf`&r_s%VoIy&-QP~4V8W__H=0W`PUkOD z?$x1}iyk~B1m4mA&Ry8g4ox~+bQDF9UxJ$;aC9f-{Ys4Rw%dM>DF48(kkB^AlGlBBtJgUt@qpm!5zkE!kSa_85IWFGtri0K zzImFheD^Isuwi%|1ZuSj_u0VLQS>xCAwN3PIe4#ilRH}ct%3`yRO6I2f zu*6E-AB6ESn3(*2kq~1Hw1_DihwvD!go?jFR!e%Lk0rnFnG*L?Df^&GNf2SMif2M} zSW5_QmOu_g;j^2Jhp|#-M|n`1M20a^2!%b7nXHAaW3*D@hEXQ_+#zldy-K{{{ZSu~ zc0@J$7qZK)l3#2@22G`e>`|^h?@TC)wT%4WZ!rxe?Pe~_1F;J9iaH>;1oUqsiMb_xG$pNbX_Ng8VlOTF|F&UMEU_Jub>nw99suBFu?V0xP!RQX!gqph}Izp0lHV zvR#g}Ed7Kbcr*jn6CI~~1^-#=_0G&c6Kxgi1VOI1S^g$zO*Slf!zQkG&CA$IDuvcxnjVJHn#R4k2S1Uu!+zRaAw<2QHGP;Ye@>ahQ8RzKdBBRhb)KhPIq)XEm(@s4{j>LD_ zo3}5%{)x!C3(otFZC`ytu4*0~3TUpHl@FY59I>jBAX*{Yva4TuA{Eid7r{TscpqcW zN^kK@5;AoZRa-_GT->Rf$t$wVrnsW2c4{pJ@D&S2o%#>V>3UFFns{Z-kkq7D;T8Dg zrk${Y7;}G}D1&~8tKzLQTu)IkyEGX z#qckv0H@;Py%^M7W$apfS~1eC#(FzNfB2UsbSF$KrUxZ>yoU+dO}l0+Kp*$K&L{=8 zok6YJYfbIs8>IRLic;?;RQZBuE}K3~`LucN?!Icbl0GYiNM3?Ouh@bIUMc#5s9K=6 z4laE+QR&T{Fe47}$1c5^J^x~jn(oG_Th^;^)!!rUl=40VViXP@c1|87Dk@1u5Ym4E D$5kks diff --git a/thesis/references.bib b/thesis/references.bib index b1afdd6..fc3d304 100644 --- a/thesis/references.bib +++ b/thesis/references.bib @@ -951,7 +951,7 @@ author = {Bastidas Fuertes, Andrés and Pérez, María and Meza Hormaza, Jaime}, date = {2023-01}, langid = {english}, - keywords = {cross compiler, software architecture, source-to-source compiler, systematic literature review, transcompiler, transpiler}, + keywords = {software architecture, transpiler, cross compiler, source-to-source compiler, systematic literature review, transcompiler}, file = {Full Text PDF:C\:\\Users\\danwi\\Zotero\\storage\\7IRRHZJG\\Bastidas Fuertes et al. - 2023 - Transpilers A Systematic Mapping Review of Their Usage in Research and Industry.pdf:application/pdf}, } @@ -1033,7 +1033,7 @@ author = {Chaber, Patryk and Ławryńczuk, Maciej}, urldate = {2025-03-21}, date = {2016-09}, - keywords = {Fans, Hardware, Heating, {MATLAB}, Microcontrollers, Process control, Standards}, + keywords = {Standards, Hardware, Fans, Heating, {MATLAB}, Microcontrollers, Process control}, } @inproceedings{moses_high-performance_2023, @@ -1154,6 +1154,13 @@ booktitle = {2016 49th Annual {IEEE}/{ACM} International Symposium on Microarchitecture ({MICRO})}, author = {{ElTantawy}, Ahmed and Aamodt, Tor M.}, date = {2016-10}, - keywords = {Graphics processing units, Hardware, Instruction sets, Manuals, Programming, Synchronization, System recovery}, + keywords = {Graphics processing units, Hardware, Programming, Instruction sets, Manuals, Synchronization, System recovery}, file = {Full Text PDF:C\:\\Users\\danwi\\Zotero\\storage\\EKKWUQQM\\ElTantawy and Aamodt - 2016 - MIMD synchronization on SIMT architectures.pdf:application/pdf}, } + +@inproceedings{palacios_comparison_2011, + title = {A Comparison of Modern {GPU} and {CPU} Architectures: And the Common Convergence of Both}, + url = {https://api.semanticscholar.org/CorpusID:61428375}, + author = {Palacios, Jonathan and Triska, Josh}, + date = {2011}, +}