From 5c7cf02fd7433c28ad2503e624215c18e944246b Mon Sep 17 00:00:00 2001 From: Brett Weiland Date: Wed, 17 Apr 2024 18:49:39 -0500 Subject: [PATCH] possible forgot to push; done --- report/report.log | 4 ++-- report/report.pdf | Bin 232746 -> 232799 bytes report/report.tex | 29 +++++++++++++++-------------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/report/report.log b/report/report.log index 2484a5d..1edf67e 100644 --- a/report/report.log +++ b/report/report.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/Arch Linux) (preloaded format=pdflatex 2024.4.11) 12 APR 2024 16:13 +This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/Arch Linux) (preloaded format=pdflatex 2024.4.11) 12 APR 2024 16:27 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -671,7 +671,7 @@ tt12.pfb> -Output written on report.pdf (11 pages, 232746 bytes). +Output written on report.pdf (11 pages, 232799 bytes). PDF statistics: 90 PDF objects out of 1000 (max. 8388607) 58 compressed objects within 1 object stream diff --git a/report/report.pdf b/report/report.pdf index 99444656233045409f2d8f92dbaee4c50824ad8a..c13261019aab0250011e7aaf03c077423c0cb2d6 100644 GIT binary patch delta 9724 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 ch;?+eTwHwr$&a?(6*n?}vS6o7uOI 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 E2UhH$egFUf diff --git a/report/report.tex b/report/report.tex index 5699bab..27b8f8b 100644 --- a/report/report.tex +++ b/report/report.tex @@ -40,12 +40,12 @@ Analyzing Performance of Booth’s Algorithm and Modified Booth’s Algorithm} \begin{document} \maketitle \begin{abstract} -In this paper, the performance of Booth’s algorithm is compared to modified Booth's algorithm. Each multiplier is simulated in Python. The multipliers are benchmarked by counting the number of add and subtract operations for inputs of various lengths. Results are analyzed and discussed to highlight the potential tradeoffs one should consider when deciding what multiplier is to be used. +In this paper, the performance of Booth’s algorithm is compared to modified Booth's algorithm. Each multiplier is simulated in Python. The multipliers are bench marked by counting the number of add and subtract operations for inputs of various lengths. Results are analyzed and discussed to highlight the potential tradeoffs one should consider when deciding what multiplier is to be used. \end{abstract} \section*{Introduction} Multiplication is among the most time consuming mathematical operations for processors. In many applications, the time it takes to multiply dramatically influences the speed of the program. Applications of digital signal processing (such as audio modification and image processing) require constant multiply and accumulate operations for functions such as fast fourier transformations and convolutions. Other applications are heavily dependent on multiplying large matrices, such as machine learning, 3D graphics and data analysis. In such scenarios, the speed of multiplication is vital. Consequently, most modern processors implement hardware multiplication. However, not all hardware multiplication schemes are equal; there is often a stark contrast between performance and hardware complexity. To further complicate things, multiplication circuits perform differently depending on what numbers are being multiplied. \section*{Algorithm Description} -Booth's algorithim computes the product of two signed numbers in two's compliment format. To avoid overflow, the result is placed into a register two times the size of the operands (or two registers the size of a single operand). Additionally, the algorithim must work with a space that is exended one bit more then the result. For the purpose of brevity, the result register and extra bit will be refered to as the workspace, as the algorithim uses this space for its computations. First, the multiplier is placed into the workspace and shifted left by 1. From there, the multiplicand is used to either add or subtract from the upper half of the workspace. The specific action is dependent on the last two bits of the workspace. +Booth's algorithm computes the product of two signed numbers in two's compliment format. To avoid overflow, the result is placed into a register two times the size of the operands (or two registers the size of a single operand). Additionally, the algorithm must work with a space that is extended one bit more then the result. For the purpose of brevity, the result register and extra bit will be referred to as the workspace, as the algorithm uses this space for its computations. First, the multiplier is placed into the workspace and shifted left by 1. From there, the multiplicand is used to either add or subtract from the upper half of the workspace. The specific action is dependent on the last two bits of the workspace. \begin{table}[H] \centering \begin{tabular}{lll} @@ -59,9 +59,9 @@ Bit 1 & Bit 0 & Action \\ \bottomrule \end{tabular} \end{table} -After all iterations are complete, the result is arithmaticlly shifted once to the right, and the process repeats for the number of bits in an operand. +After all iterations are complete, the result is arithmetically shifted once to the right, and the process repeats for the number of bits in an operand. \par -Modified booth's algorithim functions similar to Booth's algorithim, but checks the last \textit{three} bits instead. As such, there are a larger selection of actions for each iteration: +Modified Booth's algorithm functions similar to Booth's algorithm, but checks the last \textit{three} bits instead. As such, there are a larger selection of actions for each iteration: \begin{table}[H] \centering \begin{tabular}{llll} @@ -79,17 +79,17 @@ Bit 2 & Bit 1 & Bit 0 & Action \\ \bottomrule \end{tabular} \end{table} -Because some operations require doubling the multiplicand, an additional extra bit is added to the most significant side of the workspace to avoid overflow. After each iteration, the result is arithmaticlly shifted right twice. The number of iterations is only half of the length of the operands. After all iterations, the workspace is shifted right once, and the second most significant bit is set to the first most significant bit as the result register does not include the extra bit. +Because some operations require doubling the multiplicand, an additional extra bit is added to the most significant side of the workspace to avoid overflow. After each iteration, the result is arithmetically shifted right twice. The number of iterations is only half of the length of the operands. After all iterations, the workspace is shifted right once, and the second most significant bit is set to the first most significant bit as the result register does not include the extra bit. \par -\section*{Simulation Implimentation} -Both algorithims were simulated in Python in attempts to utalize its high level nature for rapid development. The table for Booth's algorithim was preformed with a simple if-then, while a switch case was used in modified booth's algorithim. Simple integers were used to represent registers. +\section*{Simulation Implementation} +Both algorithms were simulated in Python in attempts to utilize its high level nature for rapid development. The table for Booth's algorithm was preformed with a simple if-then, while a switch case was used in modified Booth's algorithm. Simple integers were used to represent registers. \par -One objective of this paper is to analyze and compare the peformance of these two algorithms for various operand lengths. As such, the length of operands had to be constantly accounted for. Aritmatic bitwise operations, including finding two's compliment, were all implimented using functions that took length as an input. Further more, extra bits were cleared after each iteration. +One objective of this paper is to analyze and compare the performance of these two algorithms for various operand lengths. As such, the length of operands had to be constantly accounted for. Arithmetic bitwise operations, including finding two's compliment, were all implemented using functions that took length as an input. Further more, extra bits were cleared after each iteration. \par -To track down issues and test the validity of the multipliers, a debug function was written. To allow Python to natively work with the operands, each value is calculated from its two's compliment format. The converted numbers are then multiplied, and the result is used to verify both Booth's Algorithim and Modified Booth's Algorithim. To ensure that the debugging function itself doesn't malfunction, all converted operands and expected results are put into a single large table for checking. The exported version of this table can be seen on the last page in table \ref{debug_table}. % TODO +To track down issues and test the validity of the multipliers, a debug function was written. To allow Python to natively work with the operands, each value is calculated from its two's compliment format. The converted numbers are then multiplied, and the result is used to verify both Booth's Algorithm and Modified Booth's Algorithm. To ensure that the debugging function itself doesn't malfunction, all converted operands and expected results are put into a single large table for checking. The exported version of this table can be seen on the last page in table \ref{debug_table}. % TODO -The pseudo code below illustrates how each algorithim was implimented in software. For the full code, refer to the listing at the end of the document.\\ +The pseudo code below illustrates how each algorithm was implemented in software. For the full code, refer to the listing at the end of the document.\\ \begin{verbatim} Booth: result = multiplier << 1 @@ -123,7 +123,7 @@ Modified booth: \end{verbatim} \section*{Analysis} -Modified Booth's algorithim only requires half the iterations of Booth's algorithim. As such, it can be expected that the benifit of modified Booth's algorithim increases two fold with bit length. This can be shown by comparing the two curves in figure \ref{igraph}. +Modified Booth's algorithm only requires half the iterations of Booth's algorithm. As such, it can be expected that the benefit of modified Booth's algorithm increases two fold with bit length. This can be shown by comparing the two curves in figure \ref{igraph}. \begin{figure}[h] \centering \input{iterations.pgf}\\ @@ -132,7 +132,7 @@ Modified Booth's algorithim only requires half the iterations of Booth's algorit \end{figure} \par -Despite this, the nature of both algorithims dictate that modified booth's algorithim is not explicitly faster. Iteration count translates to the \textit{maxiumum} number of additions and subtractions. Figure \ref{pgraph} shows the performance of the two algorithims given different input lengths, while table \ref{speed_table} shows the actual data used to generate the plot. There are some interesting things to note. When operands contain repeating zeros or ones, both operations preform similarly, as only shifting is required. Operands containing entirely ones or zeros result in idential preformance. On the contrary, alternating bits within operands demonstrate where the two algorithims differ, as almost no bits can be skipped over. Operands made entirely of alternating bits result in the maximum performance diffrence, in which modified booth's algorithim is up to two times faster. +Despite this, the nature of both algorithms dictate that modified Booth's algorithm is not explicitly faster. Iteration count translates to the \textit{maximum} number of additions and subtractions. Figure \ref{pgraph} shows the performance of the two algorithms given different input lengths, while table \ref{speed_table} shows the actual data used to generate the plot. There are some interesting things to note. When operands contain repeating zeros or ones, both operations preform similarly, as only shifting is required. Operands containing entirely ones or zeros result in identical performance. On the contrary, alternating bits within operands demonstrate where the two algorithms differ, as almost no bits can be skipped over. Operands made entirely of alternating bits result in the maximum performance difference, in which modified Booth's algorithm is up to two times faster. \begin{figure}[H] \centering \input{performance.pgf}\\ @@ -140,9 +140,9 @@ Despite this, the nature of both algorithims dictate that modified booth's algor \label{pgraph} \end{figure} \par -All of this needs to be considered when deciding between the two algorithims. Modified booth's algorithim may improve speed, but requires substantially more hardware to impliment. One must consider if it's worth the cost to optimize multiplication. In many applications, fast multiplication is unnessesary; many early single-chip processors and microcontrollers didn't impliment multiplication, as they were intended for simple embeded applications. +All of this needs to be considered when deciding between the two algorithms. Modified Booth's algorithm may improve speed, but requires substantially more hardware to implement. One must consider if it's worth the cost to optimize multiplication. In many applications, fast multiplication is unnecessary; many early single-chip processors and microcontrollers didn't implement multiplication, as they were intended for simple embedded applications. \section*{Conclusion} -Hardware multipliers can help accellerate applications in which multiplication is frequent. When implimenting hardware multipliers, it's important to consider the advantages and disadvantages of various multiplier schemes. Modified Booth's algorithim gives diminishing returns for smaller operands and requires significantly more logic. In applications that depend heavily on fast multiplication of large numbers, modified booth's algorithim is optimal. +Hardware multipliers can help accelerate applications in which multiplication is frequent. When implementing hardware multipliers, it's important to consider the advantages and disadvantages of various multiplier schemes. Modified Booth's algorithm gives diminishing returns for smaller operands and requires significantly more logic. In applications that depend heavily on fast multiplication of large numbers, modified Booth's algorithm is optimal. % mba generally but not always faster % application should be considered % @@ -198,3 +198,4 @@ Hardware multipliers can help accellerate applications in which multiplication i \end{document} +