Changes in / [ed49dbd:f4fe7fd]


Ignore:
Location:
doc
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • doc/LaTeXmacros/common.tex

    red49dbd rf4fe7fd  
    1111%% Created On       : Sat Apr  9 10:06:17 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Sat Apr  2 16:42:31 2022
    14 %% Update Count     : 553
     13%% Last Modified On : Tue Apr 26 16:02:48 2022
     14%% Update Count     : 558
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    3030\setlist[itemize,1]{label=\textbullet}% local
    3131%\renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}}
    32 \setlist[enumerate]{listparindent=\parindent}% global
     32\setlist[enumerate]{topsep=0.5ex,parsep=0.25ex,itemsep=0.25ex,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}}
    249250\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}}
    250252
    251253\let\Oldthebibliography\thebibliography
  • doc/theses/mubeen_zulfiqar_MMath/allocator.tex

    red49dbd rf4fe7fd  
    11\chapter{Allocator}
     2\label{c:Allocator}
    23
    34This 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

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

    red49dbd rf4fe7fd  
    88\section{Machine Specification}
    99
    10 The performance experiments were run on two different multi-core architectures (x86 and ARM) to determine if there is consistency across platforms:
     10The performance experiments were run on two different multi-core architectures (x64 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.
    24 
    25 \subsection{glibc}
    26 glibc~\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, along with llheap.
     24
     25\paragraph{llheap (\textsf{llh})}
     26is 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.
    2734\\
    2835\textbf{Version:} Ubuntu GLIBC 2.31-0ubuntu9.7 2.31\\
     
    3037\textbf{Compilation command:} N/A
    3138
    32 \subsection{dlmalloc}
    33 dlmalloc~\cite{dlmalloc} is a thread-safe allocator that is single threaded and single heap.
     39\paragraph{dlmalloc (\textsf{dl})}
     40\cite{dlmalloc} is a thread-safe allocator that is single threaded and single heap.
    3441It maintains free-lists of different sizes to store freed dynamic memory.
    3542\\
     
    3845\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@
    3946
    40 \subsection{hoard}
    41 Hoard~\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.
     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.
    4249\\
    4350\textbf{Version:} 3.13\\
     
    4552\textbf{Compilation command:} @make all@
    4653
    47 \subsection{jemalloc}
    48 jemalloc~\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.
     54\paragraph{jemalloc (\textsf{je})}
     55\cite{jemalloc} is a thread-safe allocator that uses multiple arenas. Each thread is assigned an arena.
     56Each arena has chunks that contain contagious memory regions of same size. An arena has multiple chunks that contain regions of multiple sizes.
    4957\\
    5058\textbf{Version:} 5.2.1\\
     
    5260\textbf{Compilation command:} @autogen.sh; configure; make; make install@
    5361
    54 \subsection{pt3malloc}
    55 pt3malloc~\cite{pt3malloc} is a modification of dlmalloc.
    56 It is a thread-safe multi-threaded memory allocator that uses multiple heaps. pt3malloc heap has similar design to dlmalloc's heap.
     62\paragraph{pt3malloc (\textsf{pt3})}
     63\cite{pt3malloc} is a modification of dlmalloc.
     64It is a thread-safe multi-threaded memory allocator that uses multiple heaps.
     65pt3malloc heap has similar design to dlmalloc's heap.
    5766\\
    5867\textbf{Version:} 1.8\\
     
    6069\textbf{Compilation command:} @make linux-shared@
    6170
    62 \subsection{rpmalloc}
    63 rpmalloc~\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.
     71\paragraph{rpmalloc (\textsf{rp})}
     72\cite{rpmalloc} is a thread-safe allocator that is multi-threaded and uses per-thread heap.
     73Each heap has multiple size-classes and each size-class contains memory regions of the relevant size.
    6474\\
    6575\textbf{Version:} 1.4.1\\
     
    6777\textbf{Compilation command:} @python3 configure.py; ninja@
    6878
    69 \subsection{tbb malloc}
    70 tbb 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.
     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.
     81Each private-heap has multiple bins of different sizes. Each bin contains free regions of the same size.
    7282\\
    7383\textbf{Version:} intel tbb 2020 update 2, tbb\_interface\_version == 11102\\
     
    7989
    8090\section{Experiments}
    81 % FIX ME: add experiment, knobs, graphs, description+analysis
     91
     92The each micro-benchmark is configured and run with each of the allocators,
     93The less time an allocator takes to complete a benchmark the better, so lower in the graphs is better.
    8294
    8395%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    115127
    116128\VRef[Figure]{fig:churn} shows the results for algol and nasus.
    117 The X-axis shows the number of threads.
     129The X-axis shows the number of threads;
     130the Y-axis shows the total experiment time.
    118131Each allocator's performance for each thread is shown in different colors.
    119 The 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} }
     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} }
    125137\caption{Churn}
    126138\label{fig:churn}
    127139\end{figure}
    128140
    129 All allocators did well in this micro-benchmark, except for dmalloc on the ARM,
     141All allocators did well in this micro-benchmark, except for \textsf{dl} on the ARM.
     142llheap is slightly slower because it uses ownership, where many of the allocations have remote frees, which requires locking.
     143When llheap is compiled without ownership, its performance is the same as the other allocators (not shown).
    130144
    131145
     
    137151
    138152Thrash tests memory allocators for active false sharing (see \VRef{sec:benchThrashSec}).
    139 This experiment was run with following configurations:
    140 \begin{description}[itemsep=0pt,parsep=0pt]
    141 \item[thread:]
    142 1, 2, 4, 8, 16
    143 \item[iterations:]
    144 1,000
    145 \item[cacheRW:]
    146 1,000,000
    147 \item[size:]
    148 1
    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 
    154 Results are shown in figure \ref{fig:cacheThrash} for both algol and nasus.
    155 X-axis shows number of threads. Each allocator's performance for each thread is shown in different colors.
    156 Y-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 
    173 Scratch tests memory allocators for program-induced allocator-preserved passive false-sharing.
    174153This experiment was run with following configurations:
    175154\begin{description}[itemsep=0pt,parsep=0pt]
     
    187166% Experiment was repeated for each allocator for 1, 2, 4, 8, and 16 threads by setting the configuration -threadN.
    188167
    189 Results are shown in figure \ref{fig:cacheScratch} for both algol and nasus.
    190 X-axis shows number of threads. Each allocator's performance for each thread is shown in different colors.
    191 Y-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} }
     168\VRef[Figure]{fig:cacheThrash} shows the results for algol and nasus.
     169The X-axis shows the number of threads;
     170the Y-axis shows the total experiment time.
     171Each 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
     181All allocators did well in this micro-benchmark, except for \textsf{dl} and \textsf{pt3} on the x64.
     182Either 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
     190Scratch tests memory allocators for program-induced allocator-preserved passive false-sharing (see \VRef{s:CacheScratch}).
     191This experiment was run with following configurations:
     192\begin{description}[itemsep=0pt,parsep=0pt]
     193\item[threads:]
     1941, 2, 4, 8, 16
     195\item[iterations:]
     1961,000
     197\item[cacheRW:]
     1981,000,000
     199\item[size:]
     2001
     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.
     207The X-axis shows the number of threads;
     208the Y-axis shows the total experiment time.
     209Each 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} }
    197215\caption{Cache Scratch}
    198216\label{fig:cacheScratch}
    199217\end{figure}
    200218
     219All allocators did well in this micro-benchmark on the ARM.
     220Allocators \textsf{llh}, \textsf{je}, and \textsf{rp} did well on the x64, while the remaining allocators experienced significant slowdowns from the false sharing.
     221
    201222%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    202223%% SPEED
     
    205226\subsection{Speed Micro-Benchmark}
    206227
    207 Speed testa memory allocators for runtime latency (see \VRef{s:SpeedMicroBenchmark}).
     228Speed tests memory allocators for runtime latency (see \VRef{s:SpeedMicroBenchmark}).
    208229This experiment was run with following configurations:
    209230\begin{description}[itemsep=0pt,parsep=0pt]
     
    232253%Experiment was repeated for each allocator for 1, 2, 4, 8, and 16 threads by setting the configuration -threadN.
    233254
    234 Results for speed benchmark are shown in 12 figures, one figure for each chain of speed benchmark.
    235 X-axis shows number of threads. Each allocator's performance for each thread is shown in different colors.
    236 Y-axis shows the total time experiment took to finish. Less time an allocator takes to complete allocation, better it is so lower the better.
     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.
     256The X-axis shows the number of threads;
     257the Y-axis shows the total experiment time.
     258Each allocator's performance for each thread is shown in different colors.
    237259
    238260\begin{itemize}
    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
     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
    251273\end{itemize}
    252274
     275All allocators did well in this micro-benchmark across all allocation chains, except for \textsf{dl} and \textsf{pt3}.
     276
    253277%speed-3-malloc.eps
    254278\begin{figure}
    255279\centering
    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} }
     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} }
    258282\caption{Speed benchmark chain: malloc}
    259283\label{fig:speed-3-malloc}
     
    263287\begin{figure}
    264288\centering
    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} }
     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} }
    267291\caption{Speed benchmark chain: realloc}
    268292\label{fig:speed-4-realloc}
     
    272296\begin{figure}
    273297\centering
    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} }
     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} }
    276300\caption{Speed benchmark chain: free}
    277301\label{fig:speed-5-free}
     
    281305\begin{figure}
    282306\centering
    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} }
     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} }
    285309\caption{Speed benchmark chain: calloc}
    286310\label{fig:speed-6-calloc}
     
    290314\begin{figure}
    291315\centering
    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} }
     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} }
    294318\caption{Speed benchmark chain: malloc-free}
    295319\label{fig:speed-7-malloc-free}
     
    299323\begin{figure}
    300324\centering
    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} }
     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} }
    303327\caption{Speed benchmark chain: realloc-free}
    304328\label{fig:speed-8-realloc-free}
     
    308332\begin{figure}
    309333\centering
    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} }
     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} }
    312336\caption{Speed benchmark chain: calloc-free}
    313337\label{fig:speed-9-calloc-free}
     
    317341\begin{figure}
    318342\centering
    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} }
     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} }
    321345\caption{Speed benchmark chain: malloc-realloc}
    322346\label{fig:speed-10-malloc-realloc}
     
    326350\begin{figure}
    327351\centering
    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} }
     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} }
    330354\caption{Speed benchmark chain: calloc-realloc}
    331355\label{fig:speed-11-calloc-realloc}
     
    335359\begin{figure}
    336360\centering
    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} }
     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} }
    339363\caption{Speed benchmark chain: malloc-realloc-free}
    340364\label{fig:speed-12-malloc-realloc-free}
     
    344368\begin{figure}
    345369\centering
    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} }
     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} }
    348372\caption{Speed benchmark chain: calloc-realloc-free}
    349373\label{fig:speed-13-calloc-realloc-free}
     
    353377\begin{figure}
    354378\centering
    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} }
     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} }
    357381\caption{Speed benchmark chain: malloc-calloc-realloc-free}
    358382\label{fig:speed-14-malloc-calloc-realloc-free}
     
    363387%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    364388
     389\newpage
    365390\subsection{Memory Micro-Benchmark}
    366391
    367 This experiment is run with following two configurations for each allocator.
     392This experiment is run with the following two configurations for each allocator.
    368393The difference between the two configurations is the number of producers and consumers.
    369 Configuration 1 has one producer and one consumer, and configuration 2 has 4 producers where each producer has 4 consumers.
     394Configuration 1 has one producer and one consumer, and configuration 2 has 4 producers, where each producer has 4 consumers.
    370395
    371396\noindent
     
    435460    Memory Allocator & Configuration 1 Result & Configuration 2 Result\\
    436461     \hline
    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}\\
     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}\\
    452477     \hline
    453478    \end{tabular}
     
    456481\end{table}
    457482
    458 Results for memory benchmark are shown in 16 figures, two figures for each of the 8 allocators, one for each configuration.
     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.
    459484Table \ref{table:mem-benchmark-figs} shows the list of figures that contain memory benchmark results.
    460485
     
    482507\begin{figure}
    483508\centering
    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}
     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}
    487512\label{fig:mem-1-prod-1-cons-100-cfa}
    488513\end{figure}
     
    491516\begin{figure}
    492517\centering
    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} }
     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} }
    495520\caption{Memory benchmark results with 1 producer for dl memory allocator}
    496521\label{fig:mem-1-prod-1-cons-100-dl}
     
    500525\begin{figure}
    501526\centering
    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} }
     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} }
    504529\caption{Memory benchmark results with 1 producer for glibc memory allocator}
    505530\label{fig:mem-1-prod-1-cons-100-glc}
     
    509534\begin{figure}
    510535\centering
    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} }
     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} }
    513538\caption{Memory benchmark results with 1 producer for hoard memory allocator}
    514539\label{fig:mem-1-prod-1-cons-100-hrd}
     
    518543\begin{figure}
    519544\centering
    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} }
     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} }
    522547\caption{Memory benchmark results with 1 producer for je memory allocator}
    523548\label{fig:mem-1-prod-1-cons-100-je}
     
    527552\begin{figure}
    528553\centering
    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} }
     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} }
    531556\caption{Memory benchmark results with 1 producer for pt3 memory allocator}
    532557\label{fig:mem-1-prod-1-cons-100-pt3}
     
    536561\begin{figure}
    537562\centering
    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} }
     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} }
    540565\caption{Memory benchmark results with 1 producer for rp memory allocator}
    541566\label{fig:mem-1-prod-1-cons-100-rp}
     
    545570\begin{figure}
    546571\centering
    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} }
     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} }
    549574\caption{Memory benchmark results with 1 producer for tbb memory allocator}
    550575\label{fig:mem-1-prod-1-cons-100-tbb}
     
    554579\begin{figure}
    555580\centering
    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}
     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}
    559584\label{fig:mem-4-prod-4-cons-100-cfa}
    560585\end{figure}
     
    563588\begin{figure}
    564589\centering
    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} }
     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} }
    567592\caption{Memory benchmark results with 4 producers for dl memory allocator}
    568593\label{fig:mem-4-prod-4-cons-100-dl}
     
    572597\begin{figure}
    573598\centering
    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} }
     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} }
    576601\caption{Memory benchmark results with 4 producers for glibc memory allocator}
    577602\label{fig:mem-4-prod-4-cons-100-glc}
     
    581606\begin{figure}
    582607\centering
    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} }
     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} }
    585610\caption{Memory benchmark results with 4 producers for hoard memory allocator}
    586611\label{fig:mem-4-prod-4-cons-100-hrd}
     
    590615\begin{figure}
    591616\centering
    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} }
     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} }
    594619\caption{Memory benchmark results with 4 producers for je memory allocator}
    595620\label{fig:mem-4-prod-4-cons-100-je}
     
    599624\begin{figure}
    600625\centering
    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} }
     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} }
    603628\caption{Memory benchmark results with 4 producers for pt3 memory allocator}
    604629\label{fig:mem-4-prod-4-cons-100-pt3}
     
    608633\begin{figure}
    609634\centering
    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} }
     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} }
    612637\caption{Memory benchmark results with 4 producers for rp memory allocator}
    613638\label{fig:mem-4-prod-4-cons-100-rp}
     
    617642\begin{figure}
    618643\centering
    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} }
     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} }
    621646\caption{Memory benchmark results with 4 producers for tbb memory allocator}
    622647\label{fig:mem-4-prod-4-cons-100-tbb}
  • doc/theses/mubeen_zulfiqar_MMath/uw-ethesis.bib

    red49dbd rf4fe7fd  
    8080    month       = may,
    8181    year        = 2009,
    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}},
     82    note        = {\href{ftp://g.oswego.edu/pub/misc/malloc.c}{ftp://g.oswego.edu/\-pub/\-misc/\-malloc.c}},
    9183}
    9284
     
    119111    month       = mar,
    120112    year        = 2022,
    121     note        = {\href{https://github.com/compudj/librseq}{https://github.com/compudj/librseq}},
     113    note        = {\href{https://github.com/compudj/librseq}{https://github.com/\-compudj/\-librseq}},
    122114}
    123115
     
    176168    year        = 2010,
    177169    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}},
    178186}
    179187
Note: See TracChangeset for help on using the changeset viewer.