Changes in / [ed49dbd:f4fe7fd]
- Location:
- doc
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/LaTeXmacros/common.tex
red49dbd rf4fe7fd 11 11 %% Created On : Sat Apr 9 10:06:17 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Sat Apr 2 16:42:31202214 %% Update Count : 55 313 %% Last Modified On : Tue Apr 26 16:02:48 2022 14 %% Update Count : 558 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 30 30 \setlist[itemize,1]{label=\textbullet}% local 31 31 %\renewcommand{\labelitemi}{{\raisebox{0.25ex}{\footnotesize$\bullet$}}} 32 \setlist[enumerate]{ listparindent=\parindent}% global32 \setlist[enumerate]{topsep=0.5ex,parsep=0.25ex,itemsep=0.25ex,listparindent=\parindent}% global 33 33 \setlist[enumerate,2]{leftmargin=\parindent,labelsep=*,align=parleft,label=\alph*.}% local 34 34 \setlist[description]{topsep=0.5ex,itemsep=0pt,listparindent=\parindent,leftmargin=\parindent,labelsep=1.5ex} … … 247 247 \renewcommand{\reftextpagerange}[2]{\unskip, pp.~\pageref{#1}--\pageref{#2}} 248 248 \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}} 249 250 \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}} 250 252 251 253 \let\Oldthebibliography\thebibliography -
doc/theses/mubeen_zulfiqar_MMath/allocator.tex
red49dbd rf4fe7fd 1 1 \chapter{Allocator} 2 \label{c:Allocator} 2 3 3 4 This 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 69 69 70 70 The 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}. 71 72 72 73 … … 79 80 80 81 \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.82 This benchmark creates a buffer with M spots and an allocation in each spot, and then starts K threads. 82 83 Each thread picks a random spot in M, frees the object currently at that spot, and allocates a new object for that spot. 83 84 Each thread repeats this cycle N times. -
doc/theses/mubeen_zulfiqar_MMath/performance.tex
red49dbd rf4fe7fd 8 8 \section{Machine Specification} 9 9 10 The performance experiments were run on two different multi-core architectures (x 86and ARM) to determine if there is consistency across platforms:10 The performance experiments were run on two different multi-core architectures (x64 and ARM) to determine if there is consistency across platforms: 11 11 \begin{itemize} 12 12 \item … … 21 21 22 22 With 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. 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. 27 34 \\ 28 35 \textbf{Version:} Ubuntu GLIBC 2.31-0ubuntu9.7 2.31\\ … … 30 37 \textbf{Compilation command:} N/A 31 38 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. 34 41 It maintains free-lists of different sizes to store freed dynamic memory. 35 42 \\ … … 38 45 \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@ 39 46 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. 42 49 \\ 43 50 \textbf{Version:} 3.13\\ … … 45 52 \textbf{Compilation command:} @make all@ 46 53 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. 56 Each arena has chunks that contain contagious memory regions of same size. An arena has multiple chunks that contain regions of multiple sizes. 49 57 \\ 50 58 \textbf{Version:} 5.2.1\\ … … 52 60 \textbf{Compilation command:} @autogen.sh; configure; make; make install@ 53 61 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. 64 It is a thread-safe multi-threaded memory allocator that uses multiple heaps. 65 pt3malloc heap has similar design to dlmalloc's heap. 57 66 \\ 58 67 \textbf{Version:} 1.8\\ … … 60 69 \textbf{Compilation command:} @make linux-shared@ 61 70 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. 73 Each heap has multiple size-classes and each size-class contains memory regions of the relevant size. 64 74 \\ 65 75 \textbf{Version:} 1.4.1\\ … … 67 77 \textbf{Compilation command:} @python3 configure.py; ninja@ 68 78 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. 81 Each private-heap has multiple bins of different sizes. Each bin contains free regions of the same size. 72 82 \\ 73 83 \textbf{Version:} intel tbb 2020 update 2, tbb\_interface\_version == 11102\\ … … 79 89 80 90 \section{Experiments} 81 % FIX ME: add experiment, knobs, graphs, description+analysis 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. 82 94 83 95 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% … … 115 127 116 128 \VRef[Figure]{fig:churn} shows the results for algol and nasus. 117 The X-axis shows the number of threads. 129 The X-axis shows the number of threads; 130 the Y-axis shows the total experiment time. 118 131 Each 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} } 125 137 \caption{Churn} 126 138 \label{fig:churn} 127 139 \end{figure} 128 140 129 All allocators did well in this micro-benchmark, except for dmalloc on the ARM, 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). 130 144 131 145 … … 137 151 138 152 Thrash 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, 16143 \item[iterations:]144 1,000145 \item[cacheRW:]146 1,000,000147 \item[size:]148 1149 \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 \centering160 \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 %% SCRATCH168 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%169 170 \subsection{Cache Scratch}171 \label{s:CacheScratch}172 173 Scratch tests memory allocators for program-induced allocator-preserved passive false-sharing.174 153 This experiment was run with following configurations: 175 154 \begin{description}[itemsep=0pt,parsep=0pt] … … 187 166 % Experiment was repeated for each allocator for 1, 2, 4, 8, and 16 threads by setting the configuration -threadN. 188 167 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. 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} } 197 215 \caption{Cache Scratch} 198 216 \label{fig:cacheScratch} 199 217 \end{figure} 200 218 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 201 222 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 202 223 %% SPEED … … 205 226 \subsection{Speed Micro-Benchmark} 206 227 207 Speed test amemory allocators for runtime latency (see \VRef{s:SpeedMicroBenchmark}).228 Speed tests memory allocators for runtime latency (see \VRef{s:SpeedMicroBenchmark}). 208 229 This experiment was run with following configurations: 209 230 \begin{description}[itemsep=0pt,parsep=0pt] … … 232 253 %Experiment was repeated for each allocator for 1, 2, 4, 8, and 16 threads by setting the configuration -threadN. 233 254 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. 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. 237 259 238 260 \begin{itemize} 239 \item Fig. \ref{fig:speed-3-malloc} shows results for chain: malloc240 \item Fig. \ref{fig:speed-4-realloc} shows results for chain: realloc241 \item Fig. \ref{fig:speed-5-free} shows results for chain: free242 \item Fig. \ref{fig:speed-6-calloc} shows results for chain: calloc243 \item Fig. \ref{fig:speed-7-malloc-free} shows results for chain: malloc-free244 \item Fig. \ref{fig:speed-8-realloc-free} shows results for chain: realloc-free245 \item Fig. \ref{fig:speed-9-calloc-free} shows results for chain: calloc-free246 \item Fig. \ref{fig:speed-10-malloc-realloc} shows results for chain: malloc-realloc247 \item Fig. \ref{fig:speed-11-calloc-realloc} shows results for chain: calloc-realloc248 \item Fig. \ref{fig:speed-12-malloc-realloc-free} shows results for chain: malloc-realloc-free249 \item Fig. \ref{fig:speed-13-calloc-realloc-free} shows results for chain: calloc-realloc-free250 \item Fig. \ref{fig:speed-14-malloc-calloc-realloc-free} shows results for chain: malloc-realloc-free-calloc261 \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 251 273 \end{itemize} 252 274 275 All allocators did well in this micro-benchmark across all allocation chains, except for \textsf{dl} and \textsf{pt3}. 276 253 277 %speed-3-malloc.eps 254 278 \begin{figure} 255 279 \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} } 258 282 \caption{Speed benchmark chain: malloc} 259 283 \label{fig:speed-3-malloc} … … 263 287 \begin{figure} 264 288 \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} } 267 291 \caption{Speed benchmark chain: realloc} 268 292 \label{fig:speed-4-realloc} … … 272 296 \begin{figure} 273 297 \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} } 276 300 \caption{Speed benchmark chain: free} 277 301 \label{fig:speed-5-free} … … 281 305 \begin{figure} 282 306 \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} } 285 309 \caption{Speed benchmark chain: calloc} 286 310 \label{fig:speed-6-calloc} … … 290 314 \begin{figure} 291 315 \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} } 294 318 \caption{Speed benchmark chain: malloc-free} 295 319 \label{fig:speed-7-malloc-free} … … 299 323 \begin{figure} 300 324 \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} } 303 327 \caption{Speed benchmark chain: realloc-free} 304 328 \label{fig:speed-8-realloc-free} … … 308 332 \begin{figure} 309 333 \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} } 312 336 \caption{Speed benchmark chain: calloc-free} 313 337 \label{fig:speed-9-calloc-free} … … 317 341 \begin{figure} 318 342 \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} } 321 345 \caption{Speed benchmark chain: malloc-realloc} 322 346 \label{fig:speed-10-malloc-realloc} … … 326 350 \begin{figure} 327 351 \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} } 330 354 \caption{Speed benchmark chain: calloc-realloc} 331 355 \label{fig:speed-11-calloc-realloc} … … 335 359 \begin{figure} 336 360 \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} } 339 363 \caption{Speed benchmark chain: malloc-realloc-free} 340 364 \label{fig:speed-12-malloc-realloc-free} … … 344 368 \begin{figure} 345 369 \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} } 348 372 \caption{Speed benchmark chain: calloc-realloc-free} 349 373 \label{fig:speed-13-calloc-realloc-free} … … 353 377 \begin{figure} 354 378 \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} } 357 381 \caption{Speed benchmark chain: malloc-calloc-realloc-free} 358 382 \label{fig:speed-14-malloc-calloc-realloc-free} … … 363 387 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 364 388 389 \newpage 365 390 \subsection{Memory Micro-Benchmark} 366 391 367 This experiment is run with following two configurations for each allocator.392 This experiment is run with the following two configurations for each allocator. 368 393 The 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.394 Configuration 1 has one producer and one consumer, and configuration 2 has 4 producers, where each producer has 4 consumers. 370 395 371 396 \noindent … … 435 460 Memory Allocator & Configuration 1 Result & Configuration 2 Result\\ 436 461 \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}\\ 452 477 \hline 453 478 \end{tabular} … … 456 481 \end{table} 457 482 458 Results for memory benchmark are shown in16 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. 459 484 Table \ref{table:mem-benchmark-figs} shows the list of figures that contain memory benchmark results. 460 485 … … 482 507 \begin{figure} 483 508 \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 cfamemory 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} 487 512 \label{fig:mem-1-prod-1-cons-100-cfa} 488 513 \end{figure} … … 491 516 \begin{figure} 492 517 \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} } 495 520 \caption{Memory benchmark results with 1 producer for dl memory allocator} 496 521 \label{fig:mem-1-prod-1-cons-100-dl} … … 500 525 \begin{figure} 501 526 \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} } 504 529 \caption{Memory benchmark results with 1 producer for glibc memory allocator} 505 530 \label{fig:mem-1-prod-1-cons-100-glc} … … 509 534 \begin{figure} 510 535 \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} } 513 538 \caption{Memory benchmark results with 1 producer for hoard memory allocator} 514 539 \label{fig:mem-1-prod-1-cons-100-hrd} … … 518 543 \begin{figure} 519 544 \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} } 522 547 \caption{Memory benchmark results with 1 producer for je memory allocator} 523 548 \label{fig:mem-1-prod-1-cons-100-je} … … 527 552 \begin{figure} 528 553 \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} } 531 556 \caption{Memory benchmark results with 1 producer for pt3 memory allocator} 532 557 \label{fig:mem-1-prod-1-cons-100-pt3} … … 536 561 \begin{figure} 537 562 \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} } 540 565 \caption{Memory benchmark results with 1 producer for rp memory allocator} 541 566 \label{fig:mem-1-prod-1-cons-100-rp} … … 545 570 \begin{figure} 546 571 \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} } 549 574 \caption{Memory benchmark results with 1 producer for tbb memory allocator} 550 575 \label{fig:mem-1-prod-1-cons-100-tbb} … … 554 579 \begin{figure} 555 580 \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 cfamemory 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} 559 584 \label{fig:mem-4-prod-4-cons-100-cfa} 560 585 \end{figure} … … 563 588 \begin{figure} 564 589 \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} } 567 592 \caption{Memory benchmark results with 4 producers for dl memory allocator} 568 593 \label{fig:mem-4-prod-4-cons-100-dl} … … 572 597 \begin{figure} 573 598 \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} } 576 601 \caption{Memory benchmark results with 4 producers for glibc memory allocator} 577 602 \label{fig:mem-4-prod-4-cons-100-glc} … … 581 606 \begin{figure} 582 607 \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} } 585 610 \caption{Memory benchmark results with 4 producers for hoard memory allocator} 586 611 \label{fig:mem-4-prod-4-cons-100-hrd} … … 590 615 \begin{figure} 591 616 \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} } 594 619 \caption{Memory benchmark results with 4 producers for je memory allocator} 595 620 \label{fig:mem-4-prod-4-cons-100-je} … … 599 624 \begin{figure} 600 625 \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} } 603 628 \caption{Memory benchmark results with 4 producers for pt3 memory allocator} 604 629 \label{fig:mem-4-prod-4-cons-100-pt3} … … 608 633 \begin{figure} 609 634 \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} } 612 637 \caption{Memory benchmark results with 4 producers for rp memory allocator} 613 638 \label{fig:mem-4-prod-4-cons-100-rp} … … 617 642 \begin{figure} 618 643 \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} } 621 646 \caption{Memory benchmark results with 4 producers for tbb memory allocator} 622 647 \label{fig:mem-4-prod-4-cons-100-tbb} -
doc/theses/mubeen_zulfiqar_MMath/uw-ethesis.bib
red49dbd rf4fe7fd 80 80 month = may, 81 81 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}}, 91 83 } 92 84 … … 119 111 month = mar, 120 112 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}}, 122 114 } 123 115 … … 176 168 year = 2010, 177 169 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}}, 178 186 } 179 187
Note: See TracChangeset
for help on using the changeset viewer.