From c082fa838b8391e5249d9d346b720c44855f290b Mon Sep 17 00:00:00 2001 From: noah Date: Sun, 27 Mar 2022 18:14:44 -0500 Subject: [PATCH] Editing Chapter 2 --- Bibliography.bib | 5 ++++- Chapter2.tex | 6 +++--- Schrick-Noah_MS-Thesis.bbl | 5 +++-- Schrick-Noah_MS-Thesis.blg | 36 ++++++++++++++++++------------------ Schrick-Noah_MS-Thesis.log | 4 ++-- Schrick-Noah_MS-Thesis.pdf | Bin 2061592 -> 2061642 bytes 6 files changed, 30 insertions(+), 26 deletions(-) diff --git a/Bibliography.bib b/Bibliography.bib index 352c729..9a59f7c 100644 --- a/Bibliography.bib +++ b/Bibliography.bib @@ -6,6 +6,8 @@ @misc{noauthor_overview_nodate, title = {An {Overview} of the {Parallel} {Boost} {Graph} {Library} - 1.75.0}, + authors = {Edmonds, Nick and Gregor, Douglas and Lumsdaine, Andrew}, + year = {2009}, url = {https://www.boost.org/doc/libs/1_75_0/libs/graph_parallel/doc/html/overview.html}, } @@ -16,7 +18,8 @@ } @misc{noauthor_boost_nodate, - title = {The {Boost} {Graph} {Library} - 1.75.0}, + title = {The {Boost} {Graph} {Library}, vers. 1.75.0}, + author = {Siek, Jeremy and Lee, Lie-Quan and Lumsdaine, Andrew}, url = {https://www.boost.org/doc/libs/1_75_0/libs/graph/doc/index.html}, } diff --git a/Chapter2.tex b/Chapter2.tex index 2746f16..d265907 100644 --- a/Chapter2.tex +++ b/Chapter2.tex @@ -13,8 +13,8 @@ nodes and edges, graph data structures suffer from poor cache locality, and memo \TUsection{Graph Generation Improvements} \label{sec:gen_improv} For architectural and hardware techniques for generation improvement, the authors of \cite{ainsworth_graph_2016} discuss the high cache miss rate, and how general prefetching -does not increase the prediction rate due to nonsequential graph structures and data-dependent access patterns. However, the authors continue to discuss that the generation -algorithm is known in advance, so explicit tuning of the hardware prefetcher to follow the traversal order pattern can lead to better performance. The authors were able to achieve +does not increase the prediction rate due to nonsequential graph structures and data-dependent access patterns. However, the authors continue to discuss that generation +algorithms are known in advance, so explicit tuning of the hardware prefetcher to follow the traversal order pattern can lead to better performance. The authors were able to achieve over 2x performance improvement of a breadth-first search approach with this method. Another hardware approach is to make use of accelerators. The authors of \cite{yao_efficient_2018} present an approach for minimizing the slowdown caused by the underlying graph atomic functions. By using the atomic function patterns, the authors utilized pipeline stages where vertex updates can be processed in parallel dynamically. Other works, such as those by the authors of \cite{zhang_boosting_2017} and \cite{dai_fpgp_2016}, leverage field-programmable gate arrays @@ -23,7 +23,7 @@ on-chip block RAM, or even leveraging Hybrid Memory Cubes for optimizing paralle From a data structure standpoint, the authors of \cite{arifuzzaman_fast_2015} describe the infeasibility of adjacency matrices in large-scale graphs, and this work and other works such as those by the authors of \cite{yu_construction_2018} and \cite{liakos_memory-optimized_2016} discuss the appeal of distributing a graph representation across systems. The author of -\cite{liakos_memory-optimized_2016} discuss the usage of distributed adjacency lists for assigning vertices to workers. The authors of \cite{liakos_memory-optimized_2016} and +\cite{liakos_memory-optimized_2016} discusses the usage of distributed adjacency lists for assigning vertices to workers. The authors of \cite{liakos_memory-optimized_2016} and \cite{balaji_graph_2016} present other techniques for minimizing communication costs by achieving high compression ratios while maintaining a low compression cost. The Boost Graph Library and the Parallel Boost Graph Library both provide appealing features for working with graphs, with the latter library notably having interoperability with MPI, Graphviz, and METIS \cite{noauthor_overview_nodate}, \cite{noauthor_boost_nodate}. diff --git a/Schrick-Noah_MS-Thesis.bbl b/Schrick-Noah_MS-Thesis.bbl index 474b9ea..9e4914c 100644 --- a/Schrick-Noah_MS-Thesis.bbl +++ b/Schrick-Noah_MS-Thesis.bbl @@ -103,10 +103,11 @@ J.~Balaji and R.~Sunderraman, ``Graph {Topology} {Abstraction} for May 2016. \bibitem{noauthor_overview_nodate} -``An {Overview} of the {Parallel} {Boost} {Graph} {Library} - 1.75.0.'' +``An {Overview} of the {Parallel} {Boost} {Graph} {Library} - 1.75.0,'' 2009. \bibitem{noauthor_boost_nodate} -``The {Boost} {Graph} {Library} - 1.75.0.'' +J.~Siek, L.-Q. Lee, and A.~Lumsdaine, ``The {Boost} {Graph} {Library}, vers. + 1.75.0.'' \bibitem{cook_scalable_2016} K.~Cook, T.~Shaw, J.~Hale, and P.~Hawrylak, ``Scalable attack graph diff --git a/Schrick-Noah_MS-Thesis.blg b/Schrick-Noah_MS-Thesis.blg index 245b15a..9e70492 100644 --- a/Schrick-Noah_MS-Thesis.blg +++ b/Schrick-Noah_MS-Thesis.blg @@ -10,42 +10,42 @@ A level-1 auxiliary file: Chapter6.aux The style file: ieeetr.bst Database file #1: Bibliography.bib Warning--entry type for "j_hale_compliance_nodate" isn't style-file defined ---line 272 of file Bibliography.bib +--line 275 of file Bibliography.bib Warning--entry type for "EUdataregulations2018" isn't style-file defined ---line 1250 of file Bibliography.bib +--line 1253 of file Bibliography.bib Warning--empty journal in ou_scalable_2006 Warning--empty school in cook_rage_2018 Warning--empty school in louthan_hybrid_2011 You've used 30 entries, 1876 wiz_defined-function locations, - 622 strings with 9004 characters, -and the built_in function-call counts, 6493 in all, are: -= -- 608 -> -- 251 + 624 strings with 9065 characters, +and the built_in function-call counts, 6551 in all, are: += -- 612 +> -- 261 < -- 0 -+ -- 97 -- -- 67 -* -- 418 -:= -- 895 -add.period$ -- 29 ++ -- 100 +- -- 70 +* -- 425 +:= -- 911 +add.period$ -- 30 call.type$ -- 30 change.case$ -- 28 chr.to.int$ -- 0 cite$ -- 33 duplicate$ -- 333 empty$ -- 695 -format.name$ -- 67 -if$ -- 1596 +format.name$ -- 70 +if$ -- 1606 int.to.chr$ -- 0 int.to.str$ -- 30 missing$ -- 19 newline$ -- 96 -num.names$ -- 25 -pop$ -- 147 +num.names$ -- 26 +pop$ -- 148 preamble$ -- 1 purify$ -- 0 quote$ -- 0 -skip$ -- 231 +skip$ -- 227 stack$ -- 0 substring$ -- 347 swap$ -- 108 @@ -54,7 +54,7 @@ text.prefix$ -- 0 top$ -- 0 type$ -- 0 warning$ -- 3 -while$ -- 59 +while$ -- 60 width$ -- 32 -write$ -- 248 +write$ -- 250 (There were 5 warnings) diff --git a/Schrick-Noah_MS-Thesis.log b/Schrick-Noah_MS-Thesis.log index 930d97b..84dcdf2 100644 --- a/Schrick-Noah_MS-Thesis.log +++ b/Schrick-Noah_MS-Thesis.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.23 (TeX Live 2021/Arch Linux) (preloaded format=pdflatex 2022.3.21) 27 MAR 2022 17:52 +This is pdfTeX, Version 3.141592653-2.6-1.40.23 (TeX Live 2021/Arch Linux) (preloaded format=pdflatex 2022.3.21) 27 MAR 2022 18:09 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -518,7 +518,7 @@ ts/type1/public/amsfonts/cm/cmr12.pfb> -Output written on Schrick-Noah_MS-Thesis.pdf (66 pages, 2061592 bytes). +Output written on Schrick-Noah_MS-Thesis.pdf (66 pages, 2061642 bytes). PDF statistics: 307 PDF objects out of 1000 (max. 8388607) 173 compressed objects within 2 object streams diff --git a/Schrick-Noah_MS-Thesis.pdf b/Schrick-Noah_MS-Thesis.pdf index 039c7fa3916c10687325de97dc5ad6dba5b5c8c1..3284f0959dd469f3f172d4009ae2d797f0d35f73 100644 GIT binary patch delta 9875 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 OhaZWSRz^)0>3;xkE!sc; delta 9797 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