Changes in / [f4fe7fd:ed49dbd]


Ignore:
Location:
doc
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • doc/LaTeXmacros/common.tex

    rf4fe7fd red49dbd  
    1111%% Created On       : Sat Apr  9 10:06:17 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Tue Apr 26 16:02:48 2022
    14 %% Update Count     : 558
     13%% Last Modified On : Sat Apr  2 16:42:31 2022
     14%% Update Count     : 553
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    3030\setlist[itemize,1]{label=\textbullet}% local
    3131%\renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}}
    32 \setlist[enumerate]{topsep=0.5ex,parsep=0.25ex,itemsep=0.25ex,listparindent=\parindent}% global
     32\setlist[enumerate]{listparindent=\parindent}% global
    3333\setlist[enumerate,2]{leftmargin=\parindent,labelsep=*,align=parleft,label=\alph*.}% local
    3434\setlist[description]{topsep=0.5ex,itemsep=0pt,listparindent=\parindent,leftmargin=\parindent,labelsep=1.5ex}
     
    247247\renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}}
    248248\newcommand{\VRef}[2][Section]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vref{#2}}
    249 \newcommand{\VRefrange}[3][Sections]{\ifx#1\@empty\else{#1}\nobreakspace\fi\vrefrange{#2}{#3}}
    250249\newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}}
    251 \newcommand{\VPagerefrange}[3][pages]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}{#3}}
    252250
    253251\let\Oldthebibliography\thebibliography
  • doc/theses/mubeen_zulfiqar_MMath/allocator.tex

    rf4fe7fd red49dbd  
    11\chapter{Allocator}
    2 \label{c:Allocator}
    32
    43This chapter presents a new stand-alone concurrent low-latency memory-allocator ($\approx$1,200 lines of code), called llheap (low-latency heap), for C/\CC programs using kernel threads (1:1 threading), and specialized versions of the allocator for the programming languages \uC and \CFA using user-level threads running over multiple kernel threads (M:N threading).
  • doc/theses/mubeen_zulfiqar_MMath/benchmarks.tex

    rf4fe7fd red49dbd  
    6969
    7070The following new benchmarks were created to assess multi-threaded programs at the KT and UT level.
    71 For generating random values, two generators are supported: uniform~\cite{uniformPRNG} and fisher~\cite{fisherPRNG}.
    7271
    7372
     
    8079
    8180\VRef[Figure]{fig:ChurnBenchFig} shows the pseudo code for the churn micro-benchmark.
    82 This benchmark creates a buffer with M spots and an allocation in each spot, and then starts K threads.
     81This benchmark creates a buffer with M spots and starts K threads.
    8382Each thread picks a random spot in M, frees the object currently at that spot, and allocates a new object for that spot.
    8483Each thread repeats this cycle N times.
  • doc/theses/mubeen_zulfiqar_MMath/performance.tex

    rf4fe7fd red49dbd  
    88\section{Machine Specification}
    99
    10 The performance experiments were run on two different multi-core architectures (x64 and ARM) to determine if there is consistency across platforms:
     10The performance experiments were run on two different multi-core architectures (x86 and ARM) to determine if there is consistency across platforms:
    1111\begin{itemize}
    1212\item
     
    2121
    2222With dynamic allocation being an important feature of C, there are many stand-alone memory allocators that have been designed for different purposes.
    23 For this thesis, 7 of the most popular and widely used memory allocators were selected for comparison, along with llheap.
    24 
    25 \paragraph{llheap (\textsf{llh})}
    26 is the thread-safe allocator from \VRef[Chapter]{c:Allocator}
    27 \\
    28 \textbf{Version:} 1.0
    29 \textbf{Configuration:} Compiled with dynamic linking, but without statistics or debugging.\\
    30 \textbf{Compilation command:} @make@
    31 
    32 \paragraph{glibc (\textsf{glc})}
    33 \cite{glibc} is the default gcc thread-safe allocator.
     23For this thesis, 7 of the most popular and widely used memory allocators were selected for comparison.
     24
     25\subsection{glibc}
     26glibc~\cite{glibc} is the default gcc thread-safe allocator.
    3427\\
    3528\textbf{Version:} Ubuntu GLIBC 2.31-0ubuntu9.7 2.31\\
     
    3730\textbf{Compilation command:} N/A
    3831
    39 \paragraph{dlmalloc (\textsf{dl})}
    40 \cite{dlmalloc} is a thread-safe allocator that is single threaded and single heap.
     32\subsection{dlmalloc}
     33dlmalloc~\cite{dlmalloc} is a thread-safe allocator that is single threaded and single heap.
    4134It maintains free-lists of different sizes to store freed dynamic memory.
    4235\\
     
    4538\textbf{Compilation command:} @gcc -g3 -O3 -Wall -Wextra -fno-builtin-malloc -fno-builtin-calloc@ @-fno-builtin-realloc -fno-builtin-free -fPIC -shared -DUSE_LOCKS -o libdlmalloc.so malloc-2.8.6.c@
    4639
    47 \paragraph{hoard (\textsf{hrd})}
    48 \cite{hoard} is a thread-safe allocator that is multi-threaded and using a heap layer framework. It has per-thread heaps that have thread-local free-lists, and a global shared heap.
     40\subsection{hoard}
     41Hoard~\cite{hoard} is a thread-safe allocator that is multi-threaded and using a heap layer framework. It has per-thread heaps that have thread-local free-lists, and a global shared heap.
    4942\\
    5043\textbf{Version:} 3.13\\
     
    5245\textbf{Compilation command:} @make all@
    5346
    54 \paragraph{jemalloc (\textsf{je})}
    55 \cite{jemalloc} is a thread-safe allocator that uses multiple arenas. Each thread is assigned an arena.
    56 Each arena has chunks that contain contagious memory regions of same size. An arena has multiple chunks that contain regions of multiple sizes.
     47\subsection{jemalloc}
     48jemalloc~\cite{jemalloc} is a thread-safe allocator that uses multiple arenas. Each thread is assigned an arena. Each arena has chunks that contain contagious memory regions of same size. An arena has multiple chunks that contain regions of multiple sizes.
    5749\\
    5850\textbf{Version:} 5.2.1\\
     
    6052\textbf{Compilation command:} @autogen.sh; configure; make; make install@
    6153
    62 \paragraph{pt3malloc (\textsf{pt3})}
    63 \cite{pt3malloc} is a modification of dlmalloc.
    64 It is a thread-safe multi-threaded memory allocator that uses multiple heaps.
    65 pt3malloc heap has similar design to dlmalloc's heap.
     54\subsection{pt3malloc}
     55pt3malloc~\cite{pt3malloc} is a modification of dlmalloc.
     56It is a thread-safe multi-threaded memory allocator that uses multiple heaps. pt3malloc heap has similar design to dlmalloc's heap.
    6657\\
    6758\textbf{Version:} 1.8\\
     
    6960\textbf{Compilation command:} @make linux-shared@
    7061
    71 \paragraph{rpmalloc (\textsf{rp})}
    72 \cite{rpmalloc} is a thread-safe allocator that is multi-threaded and uses per-thread heap.
    73 Each heap has multiple size-classes and each size-class contains memory regions of the relevant size.
     62\subsection{rpmalloc}
     63rpmalloc~\cite{rpmalloc} is a thread-safe allocator that is multi-threaded and uses per-thread heap. Each heap has multiple size-classes and each size-class contains memory regions of the relevant size.
    7464\\
    7565\textbf{Version:} 1.4.1\\
     
    7767\textbf{Compilation command:} @python3 configure.py; ninja@
    7868
    79 \paragraph{tbb malloc (\textsf{tbb})}
    80 \cite{tbbmalloc} is a thread-safe allocator that is multi-threaded and uses private heap for each thread.
    81 Each private-heap has multiple bins of different sizes. Each bin contains free regions of the same size.
     69\subsection{tbb malloc}
     70tbb malloc~\cite{tbbmallocmail
     71} is a thread-safe allocator that is multi-threaded and uses private heap for each thread. Each private-heap has multiple bins of different sizes. Each bin contains free regions of the same size.
    8272\\
    8373\textbf{Version:} intel tbb 2020 update 2, tbb\_interface\_version == 11102\\
     
    8979
    9080\section{Experiments}
    91 
    92 The each micro-benchmark is configured and run with each of the allocators,
    93 The less time an allocator takes to complete a benchmark the better, so lower in the graphs is better.
     81% FIX ME: add experiment, knobs, graphs, description+analysis
    9482
    9583%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    127115
    128116\VRef[Figure]{fig:churn} shows the results for algol and nasus.
    129 The X-axis shows the number of threads;
    130 the Y-axis shows the total experiment time.
     117The X-axis shows the number of threads.
    131118Each allocator's performance for each thread is shown in different colors.
    132 
    133 \begin{figure}
    134 \centering
    135     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/churn} }
    136     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/churn} }
     119The Y-axis shows the total experiment time.
     120
     121\begin{figure}
     122\centering
     123    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/churn} }
     124    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/churn} }
    137125\caption{Churn}
    138126\label{fig:churn}
    139127\end{figure}
    140128
    141 All allocators did well in this micro-benchmark, except for \textsf{dl} on the ARM.
    142 llheap is slightly slower because it uses ownership, where many of the allocations have remote frees, which requires locking.
    143 When llheap is compiled without ownership, its performance is the same as the other allocators (not shown).
     129All allocators did well in this micro-benchmark, except for dmalloc on the ARM,
    144130
    145131
     
    151137
    152138Thrash tests memory allocators for active false sharing (see \VRef{sec:benchThrashSec}).
     139This experiment was run with following configurations:
     140\begin{description}[itemsep=0pt,parsep=0pt]
     141\item[thread:]
     1421, 2, 4, 8, 16
     143\item[iterations:]
     1441,000
     145\item[cacheRW:]
     1461,000,000
     147\item[size:]
     1481
     149\end{description}
     150
     151% * Each allocator was tested for its performance across different number of threads.
     152% Experiment was repeated for each allocator for 1, 2, 4, 8, and 16 threads by setting the configuration -threadN.
     153
     154Results are shown in figure \ref{fig:cacheThrash} for both algol and nasus.
     155X-axis shows number of threads. Each allocator's performance for each thread is shown in different colors.
     156Y-axis shows the total time experiment took to finish.
     157
     158\begin{figure}
     159\centering
     160    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/cache-time-0-thrash} }
     161    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/cache-time-0-thrash} }
     162\caption{Cache Thrash}
     163\label{fig:cacheThrash}
     164\end{figure}
     165
     166%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     167%% SCRATCH
     168%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     169
     170\subsection{Cache Scratch}
     171\label{s:CacheScratch}
     172
     173Scratch tests memory allocators for program-induced allocator-preserved passive false-sharing.
    153174This experiment was run with following configurations:
    154175\begin{description}[itemsep=0pt,parsep=0pt]
     
    166187% Experiment was repeated for each allocator for 1, 2, 4, 8, and 16 threads by setting the configuration -threadN.
    167188
    168 \VRef[Figure]{fig:cacheThrash} shows the results for algol and nasus.
    169 The X-axis shows the number of threads;
    170 the Y-axis shows the total experiment time.
    171 Each allocator's performance for each thread is shown in different colors.
    172 
    173 \begin{figure}
    174 \centering
    175     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/cache-time-0-thrash} }
    176     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/cache-time-0-thrash} }
    177 \caption{Cache Thrash}
    178 \label{fig:cacheThrash}
    179 \end{figure}
    180 
    181 All allocators did well in this micro-benchmark, except for \textsf{dl} and \textsf{pt3} on the x64.
    182 Either the memory allocators generate little active false-sharing or the micro-benchmark is not generating scenarios that cause active false-sharing.
    183 
    184 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    185 %% SCRATCH
    186 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    187 
    188 \subsection{Cache Scratch}
    189 
    190 Scratch tests memory allocators for program-induced allocator-preserved passive false-sharing (see \VRef{s:CacheScratch}).
    191 This experiment was run with following configurations:
    192 \begin{description}[itemsep=0pt,parsep=0pt]
    193 \item[threads:]
    194 1, 2, 4, 8, 16
    195 \item[iterations:]
    196 1,000
    197 \item[cacheRW:]
    198 1,000,000
    199 \item[size:]
    200 1
    201 \end{description}
    202 
    203 % * Each allocator was tested for its performance across different number of threads.
    204 % Experiment was repeated for each allocator for 1, 2, 4, 8, and 16 threads by setting the configuration -threadN.
    205 
    206 \VRef[Figure]{fig:cacheScratch} shows the results for algol and nasus.
    207 The X-axis shows the number of threads;
    208 the Y-axis shows the total experiment time.
    209 Each allocator's performance for each thread is shown in different colors.
    210 
    211 \begin{figure}
    212 \centering
    213     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/cache-time-0-scratch} }
    214     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/cache-time-0-scratch} }
     189Results are shown in figure \ref{fig:cacheScratch} for both algol and nasus.
     190X-axis shows number of threads. Each allocator's performance for each thread is shown in different colors.
     191Y-axis shows the total time experiment took to finish.
     192
     193\begin{figure}
     194\centering
     195    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/cache-time-0-scratch} }
     196    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/cache-time-0-scratch} }
    215197\caption{Cache Scratch}
    216198\label{fig:cacheScratch}
    217199\end{figure}
    218200
    219 All allocators did well in this micro-benchmark on the ARM.
    220 Allocators \textsf{llh}, \textsf{je}, and \textsf{rp} did well on the x64, while the remaining allocators experienced significant slowdowns from the false sharing.
    221 
    222201%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    223202%% SPEED
     
    226205\subsection{Speed Micro-Benchmark}
    227206
    228 Speed tests memory allocators for runtime latency (see \VRef{s:SpeedMicroBenchmark}).
     207Speed testa memory allocators for runtime latency (see \VRef{s:SpeedMicroBenchmark}).
    229208This experiment was run with following configurations:
    230209\begin{description}[itemsep=0pt,parsep=0pt]
     
    253232%Experiment was repeated for each allocator for 1, 2, 4, 8, and 16 threads by setting the configuration -threadN.
    254233
    255 \VRefrange[Figures]{fig:speed-3-malloc}{fig:speed-14-malloc-calloc-realloc-free} show 12 figures, one figure for each chain of the speed benchmark.
    256 The X-axis shows the number of threads;
    257 the Y-axis shows the total experiment time.
    258 Each allocator's performance for each thread is shown in different colors.
     234Results for speed benchmark are shown in 12 figures, one figure for each chain of speed benchmark.
     235X-axis shows number of threads. Each allocator's performance for each thread is shown in different colors.
     236Y-axis shows the total time experiment took to finish. Less time an allocator takes to complete allocation, better it is so lower the better.
    259237
    260238\begin{itemize}
    261 \item \VRef[Figure]{fig:speed-3-malloc} shows results for chain: malloc
    262 \item \VRef[Figure]{fig:speed-4-realloc} shows results for chain: realloc
    263 \item \VRef[Figure]{fig:speed-5-free} shows results for chain: free
    264 \item \VRef[Figure]{fig:speed-6-calloc} shows results for chain: calloc
    265 \item \VRef[Figure]{fig:speed-7-malloc-free} shows results for chain: malloc-free
    266 \item \VRef[Figure]{fig:speed-8-realloc-free} shows results for chain: realloc-free
    267 \item \VRef[Figure]{fig:speed-9-calloc-free} shows results for chain: calloc-free
    268 \item \VRef[Figure]{fig:speed-10-malloc-realloc} shows results for chain: malloc-realloc
    269 \item \VRef[Figure]{fig:speed-11-calloc-realloc} shows results for chain: calloc-realloc
    270 \item \VRef[Figure]{fig:speed-12-malloc-realloc-free} shows results for chain: malloc-realloc-free
    271 \item \VRef[Figure]{fig:speed-13-calloc-realloc-free} shows results for chain: calloc-realloc-free
    272 \item \VRef[Figure]{fig:speed-14-malloc-calloc-realloc-free} shows results for chain: malloc-realloc-free-calloc
     239\item Fig. \ref{fig:speed-3-malloc} shows results for chain: malloc
     240\item Fig. \ref{fig:speed-4-realloc} shows results for chain: realloc
     241\item Fig. \ref{fig:speed-5-free} shows results for chain: free
     242\item Fig. \ref{fig:speed-6-calloc} shows results for chain: calloc
     243\item Fig. \ref{fig:speed-7-malloc-free} shows results for chain: malloc-free
     244\item Fig. \ref{fig:speed-8-realloc-free} shows results for chain: realloc-free
     245\item Fig. \ref{fig:speed-9-calloc-free} shows results for chain: calloc-free
     246\item Fig. \ref{fig:speed-10-malloc-realloc} shows results for chain: malloc-realloc
     247\item Fig. \ref{fig:speed-11-calloc-realloc} shows results for chain: calloc-realloc
     248\item Fig. \ref{fig:speed-12-malloc-realloc-free} shows results for chain: malloc-realloc-free
     249\item Fig. \ref{fig:speed-13-calloc-realloc-free} shows results for chain: calloc-realloc-free
     250\item Fig. \ref{fig:speed-14-malloc-calloc-realloc-free} shows results for chain: malloc-realloc-free-calloc
    273251\end{itemize}
    274252
    275 All allocators did well in this micro-benchmark across all allocation chains, except for \textsf{dl} and \textsf{pt3}.
    276 
    277253%speed-3-malloc.eps
    278254\begin{figure}
    279255\centering
    280     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-3-malloc} }
    281     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-3-malloc} }
     256    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-3-malloc} }
     257    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-3-malloc} }
    282258\caption{Speed benchmark chain: malloc}
    283259\label{fig:speed-3-malloc}
     
    287263\begin{figure}
    288264\centering
    289     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-4-realloc} }
    290     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-4-realloc} }
     265    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-4-realloc} }
     266    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-4-realloc} }
    291267\caption{Speed benchmark chain: realloc}
    292268\label{fig:speed-4-realloc}
     
    296272\begin{figure}
    297273\centering
    298     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-5-free} }
    299     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-5-free} }
     274    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-5-free} }
     275    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-5-free} }
    300276\caption{Speed benchmark chain: free}
    301277\label{fig:speed-5-free}
     
    305281\begin{figure}
    306282\centering
    307     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-6-calloc} }
    308     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-6-calloc} }
     283    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-6-calloc} }
     284    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-6-calloc} }
    309285\caption{Speed benchmark chain: calloc}
    310286\label{fig:speed-6-calloc}
     
    314290\begin{figure}
    315291\centering
    316     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-7-malloc-free} }
    317     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-7-malloc-free} }
     292    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-7-malloc-free} }
     293    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-7-malloc-free} }
    318294\caption{Speed benchmark chain: malloc-free}
    319295\label{fig:speed-7-malloc-free}
     
    323299\begin{figure}
    324300\centering
    325     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-8-realloc-free} }
    326     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-8-realloc-free} }
     301    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-8-realloc-free} }
     302    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-8-realloc-free} }
    327303\caption{Speed benchmark chain: realloc-free}
    328304\label{fig:speed-8-realloc-free}
     
    332308\begin{figure}
    333309\centering
    334     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-9-calloc-free} }
    335     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-9-calloc-free} }
     310    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-9-calloc-free} }
     311    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-9-calloc-free} }
    336312\caption{Speed benchmark chain: calloc-free}
    337313\label{fig:speed-9-calloc-free}
     
    341317\begin{figure}
    342318\centering
    343     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-10-malloc-realloc} }
    344     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-10-malloc-realloc} }
     319    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-10-malloc-realloc} }
     320    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-10-malloc-realloc} }
    345321\caption{Speed benchmark chain: malloc-realloc}
    346322\label{fig:speed-10-malloc-realloc}
     
    350326\begin{figure}
    351327\centering
    352     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-11-calloc-realloc} }
    353     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-11-calloc-realloc} }
     328    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-11-calloc-realloc} }
     329    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-11-calloc-realloc} }
    354330\caption{Speed benchmark chain: calloc-realloc}
    355331\label{fig:speed-11-calloc-realloc}
     
    359335\begin{figure}
    360336\centering
    361     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-12-malloc-realloc-free} }
    362     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-12-malloc-realloc-free} }
     337    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-12-malloc-realloc-free} }
     338    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-12-malloc-realloc-free} }
    363339\caption{Speed benchmark chain: malloc-realloc-free}
    364340\label{fig:speed-12-malloc-realloc-free}
     
    368344\begin{figure}
    369345\centering
    370     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-13-calloc-realloc-free} }
    371     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-13-calloc-realloc-free} }
     346    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-13-calloc-realloc-free} }
     347    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-13-calloc-realloc-free} }
    372348\caption{Speed benchmark chain: calloc-realloc-free}
    373349\label{fig:speed-13-calloc-realloc-free}
     
    377353\begin{figure}
    378354\centering
    379     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/speed-14-m-c-re-alloc-free} }
    380     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/speed-14-m-c-re-alloc-free} }
     355    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/speed-14-m-c-re-alloc-free} }
     356    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/speed-14-m-c-re-alloc-free} }
    381357\caption{Speed benchmark chain: malloc-calloc-realloc-free}
    382358\label{fig:speed-14-malloc-calloc-realloc-free}
     
    387363%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    388364
    389 \newpage
    390365\subsection{Memory Micro-Benchmark}
    391366
    392 This experiment is run with the following two configurations for each allocator.
     367This experiment is run with following two configurations for each allocator.
    393368The difference between the two configurations is the number of producers and consumers.
    394 Configuration 1 has one producer and one consumer, and configuration 2 has 4 producers, where each producer has 4 consumers.
     369Configuration 1 has one producer and one consumer, and configuration 2 has 4 producers where each producer has 4 consumers.
    395370
    396371\noindent
     
    460435    Memory Allocator & Configuration 1 Result & Configuration 2 Result\\
    461436     \hline
    462     llh & \VRef[Figure]{fig:mem-1-prod-1-cons-100-cfa} & \VRef[Figure]{fig:mem-4-prod-4-cons-100-cfa}\\
    463      \hline
    464     dl & \VRef[Figure]{fig:mem-1-prod-1-cons-100-dl} & \VRef[Figure]{fig:mem-4-prod-4-cons-100-dl}\\
    465      \hline
    466     glibc & \VRef[Figure]{fig:mem-1-prod-1-cons-100-glc} & \VRef[Figure]{fig:mem-4-prod-4-cons-100-glc}\\
    467      \hline
    468     hoard & \VRef[Figure]{fig:mem-1-prod-1-cons-100-hrd} & \VRef[Figure]{fig:mem-4-prod-4-cons-100-hrd}\\
    469      \hline
    470     je & \VRef[Figure]{fig:mem-1-prod-1-cons-100-je} & \VRef[Figure]{fig:mem-4-prod-4-cons-100-je}\\
    471      \hline
    472     pt3 & \VRef[Figure]{fig:mem-1-prod-1-cons-100-pt3} & \VRef[Figure]{fig:mem-4-prod-4-cons-100-pt3}\\
    473      \hline
    474     rp & \VRef[Figure]{fig:mem-1-prod-1-cons-100-rp} & \VRef[Figure]{fig:mem-4-prod-4-cons-100-rp}\\
    475      \hline
    476     tbb & \VRef[Figure]{fig:mem-1-prod-1-cons-100-tbb} & \VRef[Figure]{fig:mem-4-prod-4-cons-100-tbb}\\
     437    cfa & Fig. \ref{fig:mem-1-prod-1-cons-100-cfa} & Fig. \ref{fig:mem-4-prod-4-cons-100-cfa}\\
     438     \hline
     439    dl & Fig. \ref{fig:mem-1-prod-1-cons-100-dl} & Fig. \ref{fig:mem-4-prod-4-cons-100-dl}\\
     440     \hline
     441    glibc & Fig. \ref{fig:mem-1-prod-1-cons-100-glc} & Fig. \ref{fig:mem-4-prod-4-cons-100-glc}\\
     442     \hline
     443    hoard & Fig. \ref{fig:mem-1-prod-1-cons-100-hrd} & Fig. \ref{fig:mem-4-prod-4-cons-100-hrd}\\
     444     \hline
     445    je & Fig. \ref{fig:mem-1-prod-1-cons-100-je} & Fig. \ref{fig:mem-4-prod-4-cons-100-je}\\
     446     \hline
     447    pt3 & Fig. \ref{fig:mem-1-prod-1-cons-100-pt3} & Fig. \ref{fig:mem-4-prod-4-cons-100-pt3}\\
     448     \hline
     449    rp & Fig. \ref{fig:mem-1-prod-1-cons-100-rp} & Fig. \ref{fig:mem-4-prod-4-cons-100-rp}\\
     450     \hline
     451    tbb & Fig. \ref{fig:mem-1-prod-1-cons-100-tbb} & Fig. \ref{fig:mem-4-prod-4-cons-100-tbb}\\
    477452     \hline
    478453    \end{tabular}
     
    481456\end{table}
    482457
    483 \VRefrange[Figures]{fig:mem-1-prod-1-cons-100-cfa}{fig:mem-4-prod-4-cons-100-tbb} show 16 figures, two figures for each of the 8 allocators, one for each configuration.
     458Results for memory benchmark are shown in 16 figures, two figures for each of the 8 allocators, one for each configuration.
    484459Table \ref{table:mem-benchmark-figs} shows the list of figures that contain memory benchmark results.
    485460
     
    507482\begin{figure}
    508483\centering
    509     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-cfa} }
    510     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-cfa} }
    511 \caption{Memory benchmark results with 1 producer for llh memory allocator}
     484    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-cfa} }
     485    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-cfa} }
     486\caption{Memory benchmark results with 1 producer for cfa memory allocator}
    512487\label{fig:mem-1-prod-1-cons-100-cfa}
    513488\end{figure}
     
    516491\begin{figure}
    517492\centering
    518     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-dl} }
    519     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-dl} }
     493    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-dl} }
     494    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-dl} }
    520495\caption{Memory benchmark results with 1 producer for dl memory allocator}
    521496\label{fig:mem-1-prod-1-cons-100-dl}
     
    525500\begin{figure}
    526501\centering
    527     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-glc} }
    528     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-glc} }
     502    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-glc} }
     503    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-glc} }
    529504\caption{Memory benchmark results with 1 producer for glibc memory allocator}
    530505\label{fig:mem-1-prod-1-cons-100-glc}
     
    534509\begin{figure}
    535510\centering
    536     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-hrd} }
    537     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-hrd} }
     511    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-hrd} }
     512    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-hrd} }
    538513\caption{Memory benchmark results with 1 producer for hoard memory allocator}
    539514\label{fig:mem-1-prod-1-cons-100-hrd}
     
    543518\begin{figure}
    544519\centering
    545     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-je} }
    546     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-je} }
     520    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-je} }
     521    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-je} }
    547522\caption{Memory benchmark results with 1 producer for je memory allocator}
    548523\label{fig:mem-1-prod-1-cons-100-je}
     
    552527\begin{figure}
    553528\centering
    554     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-pt3} }
    555     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-pt3} }
     529    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-pt3} }
     530    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-pt3} }
    556531\caption{Memory benchmark results with 1 producer for pt3 memory allocator}
    557532\label{fig:mem-1-prod-1-cons-100-pt3}
     
    561536\begin{figure}
    562537\centering
    563     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-rp} }
    564     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-rp} }
     538    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-rp} }
     539    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-rp} }
    565540\caption{Memory benchmark results with 1 producer for rp memory allocator}
    566541\label{fig:mem-1-prod-1-cons-100-rp}
     
    570545\begin{figure}
    571546\centering
    572     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-tbb} }
    573     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-tbb} }
     547    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-1-prod-1-cons-100-tbb} }
     548    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-1-prod-1-cons-100-tbb} }
    574549\caption{Memory benchmark results with 1 producer for tbb memory allocator}
    575550\label{fig:mem-1-prod-1-cons-100-tbb}
     
    579554\begin{figure}
    580555\centering
    581     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-cfa} }
    582     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-cfa} }
    583 \caption{Memory benchmark results with 4 producers for llh memory allocator}
     556    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-cfa} }
     557    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-cfa} }
     558\caption{Memory benchmark results with 4 producers for cfa memory allocator}
    584559\label{fig:mem-4-prod-4-cons-100-cfa}
    585560\end{figure}
     
    588563\begin{figure}
    589564\centering
    590     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-dl} }
    591     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-dl} }
     565    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-dl} }
     566    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-dl} }
    592567\caption{Memory benchmark results with 4 producers for dl memory allocator}
    593568\label{fig:mem-4-prod-4-cons-100-dl}
     
    597572\begin{figure}
    598573\centering
    599     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-glc} }
    600     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-glc} }
     574    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-glc} }
     575    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-glc} }
    601576\caption{Memory benchmark results with 4 producers for glibc memory allocator}
    602577\label{fig:mem-4-prod-4-cons-100-glc}
     
    606581\begin{figure}
    607582\centering
    608     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-hrd} }
    609     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-hrd} }
     583    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-hrd} }
     584    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-hrd} }
    610585\caption{Memory benchmark results with 4 producers for hoard memory allocator}
    611586\label{fig:mem-4-prod-4-cons-100-hrd}
     
    615590\begin{figure}
    616591\centering
    617     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-je} }
    618     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-je} }
     592    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-je} }
     593    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-je} }
    619594\caption{Memory benchmark results with 4 producers for je memory allocator}
    620595\label{fig:mem-4-prod-4-cons-100-je}
     
    624599\begin{figure}
    625600\centering
    626     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-pt3} }
    627     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-pt3} }
     601    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-pt3} }
     602    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-pt3} }
    628603\caption{Memory benchmark results with 4 producers for pt3 memory allocator}
    629604\label{fig:mem-4-prod-4-cons-100-pt3}
     
    633608\begin{figure}
    634609\centering
    635     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-rp} }
    636     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-rp} }
     610    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-rp} }
     611    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-rp} }
    637612\caption{Memory benchmark results with 4 producers for rp memory allocator}
    638613\label{fig:mem-4-prod-4-cons-100-rp}
     
    642617\begin{figure}
    643618\centering
    644     \subfigure[Algol]{ \includegraphics[width=0.95\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-tbb} }
    645     \subfigure[Nasus]{ \includegraphics[width=0.95\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-tbb} }
     619    \subfigure[Algol]{ \includegraphics[width=0.9\textwidth]{evaluations/algol-perf-eps/mem-4-prod-4-cons-100-tbb} }
     620    \subfigure[Nasus]{ \includegraphics[width=0.9\textwidth]{evaluations/nasus-perf-eps/mem-4-prod-4-cons-100-tbb} }
    646621\caption{Memory benchmark results with 4 producers for tbb memory allocator}
    647622\label{fig:mem-4-prod-4-cons-100-tbb}
  • doc/theses/mubeen_zulfiqar_MMath/uw-ethesis.bib

    rf4fe7fd red49dbd  
    8080    month       = may,
    8181    year        = 2009,
    82     note        = {\href{ftp://g.oswego.edu/pub/misc/malloc.c}{ftp://g.oswego.edu/\-pub/\-misc/\-malloc.c}},
     82    note        = {\textsf{ftp://g.oswego.edu/\-pub/\-misc/\-malloc.c}},
     83}
     84
     85@misc{ptmalloc2,
     86    author      = {Wolfram Gloger},
     87    title       = {ptmalloc version 2},
     88    month       = jun,
     89    year        = 2006,
     90    note        = {\textsf{http://www.malloc.de/\-malloc/\-ptmalloc2-current.tar.gz}},
    8391}
    8492
     
    111119    month       = mar,
    112120    year        = 2022,
    113     note        = {\href{https://github.com/compudj/librseq}{https://github.com/\-compudj/\-librseq}},
     121    note        = {\href{https://github.com/compudj/librseq}{https://github.com/compudj/librseq}},
    114122}
    115123
     
    168176    year        = 2010,
    169177    note        = {\textsf{http://google-perftools.\-googlecode.\-com/\-files/\-google-perftools-1.5.tar.gz}},
    170 }
    171 
    172 @misc{uniformPRNG,
    173     author      = {\CC Standard Library},
    174     title       = {\lstinline{uniform_int_distribution}},
    175     month       = apr,
    176     year        = 2022,
    177     note        = {\href{https://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution}{https://en.cppreference.com/w/\-cpp/numeric/\-random/\-uniform\_int\_distribution}},
    178 }
    179 
    180 @misc{fisherPRNG,
    181     author      = {\CC Standard Library},
    182     title       = {\lstinline{fister_f_distribution}},
    183     month       = apr,
    184     year        = 2022,
    185     note        = {\href{https://www.cplusplus.com/reference/random/fisher_f_distribution}{https://www.cplusplus.com/\-reference/\-random/\-fisher\_f\_distribution}},
    186178}
    187179
Note: See TracChangeset for help on using the changeset viewer.