From 71ed2b217821e5ea7bd831b4615a6f72a13bb50a Mon Sep 17 00:00:00 2001 From: noah Date: Sun, 20 Mar 2022 13:08:37 -0500 Subject: [PATCH] MPI Tags --- Appendices.aux | 16 ++++---- Chapter5.aux | 46 +++++++++++---------- Chapter5.tex | 30 ++++++++++++++ Chapter6.aux | 36 ++++++++--------- Chapter7.aux | 6 +-- Schrick-Noah_MS-Thesis.aux | 6 +-- Schrick-Noah_MS-Thesis.lof | 6 +-- Schrick-Noah_MS-Thesis.log | 55 +++++++++++++------------ Schrick-Noah_MS-Thesis.lot | 1 + Schrick-Noah_MS-Thesis.pdf | Bin 594171 -> 598425 bytes Schrick-Noah_MS-Thesis.toc | 80 ++++++++++++++++++------------------- 11 files changed, 160 insertions(+), 122 deletions(-) diff --git a/Appendices.aux b/Appendices.aux index 65224a7..ffbb693 100644 --- a/Appendices.aux +++ b/Appendices.aux @@ -1,13 +1,13 @@ \relax -\@writefile{toc}{\contentsline {section}{\hspace {-\parindent }APPENDIX A:\ \ {\bf \uppercase {THE FIRST APPENDIX}} }{39}{}\protected@file@percent } -\newlabel{App:A}{{A}{39}} -\@writefile{toc}{\contentsline {section}{\hspace {-\parindent }APPENDIX B:\ \ {\bf \uppercase {THE SECOND APPENDIX}} }{40}{}\protected@file@percent } -\newlabel{App:B}{{B}{40}} -\@writefile{toc}{\contentsline {section}{\numberline {B.1}\bf A Heading in an Appendix}{40}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {B.1.1}\it A Subheading in an Appendix}{40}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsubsection}{A Sub-subsection in an Appendix}{40}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\hspace {-\parindent }APPENDIX A:\ \ {\bf \uppercase {THE FIRST APPENDIX}} }{41}{}\protected@file@percent } +\newlabel{App:A}{{A}{41}} +\@writefile{toc}{\contentsline {section}{\hspace {-\parindent }APPENDIX B:\ \ {\bf \uppercase {THE SECOND APPENDIX}} }{42}{}\protected@file@percent } +\newlabel{App:B}{{B}{42}} +\@writefile{toc}{\contentsline {section}{\numberline {B.1}\bf A Heading in an Appendix}{42}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {B.1.1}\it A Subheading in an Appendix}{42}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{A Sub-subsection in an Appendix}{42}{}\protected@file@percent } \@setckpt{Appendices}{ -\setcounter{page}{41} +\setcounter{page}{43} \setcounter{equation}{0} \setcounter{enumi}{4} \setcounter{enumii}{0} diff --git a/Chapter5.aux b/Chapter5.aux index 873f571..2cc666a 100644 --- a/Chapter5.aux +++ b/Chapter5.aux @@ -14,31 +14,33 @@ \newlabel{fig:tasks}{{5.1}{27}} \@writefile{lof}{\contentsline {figure}{\numberline {5.2}{\ignorespaces Node Allocation for each Task}}{28}{}\protected@file@percent } \newlabel{fig:node-alloc}{{5.2}{28}} -\@writefile{toc}{\contentsline {subsubsection}{Communication Structure}{28}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{Communication Structure}{29}{}\protected@file@percent } \@writefile{toc}{\contentsline {subsubsection}{Task 0}{29}{}\protected@file@percent } \@writefile{toc}{\contentsline {subsubsection}{Task 1}{29}{}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {5.3}{\ignorespaces Data Distribution of Task One}}{29}{}\protected@file@percent } -\newlabel{fig:Task1-Data-Dist}{{5.3}{29}} -\@writefile{lof}{\contentsline {figure}{\numberline {5.4}{\ignorespaces Communication From Task 1 to Task 2 when the Number of Nodes Allocated is Equal}}{30}{}\protected@file@percent } -\newlabel{fig:Task1-Case1}{{5.4}{30}} +\@writefile{lof}{\contentsline {figure}{\numberline {5.3}{\ignorespaces Data Distribution of Task One}}{30}{}\protected@file@percent } +\newlabel{fig:Task1-Data-Dist}{{5.3}{30}} \@writefile{toc}{\contentsline {subsubsection}{Task 2}{30}{}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {5.5}{\ignorespaces Communication From Task 1 to Task 2 when Task 1 Has More Nodes Allocated}}{31}{}\protected@file@percent } -\newlabel{fig:Task1-Case2}{{5.5}{31}} -\@writefile{toc}{\contentsline {subsubsection}{Task 3}{31}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsubsection}{Task 4 and Task 5}{31}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsubsection}{MPI Tags}{31}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.3}\it Performance Expectations}{32}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.4}\it Results}{32}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {5.4}\bf Subgraphing Approach}{32}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.1}\it Introduction to the Subgraphing Approach}{32}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.2}\it Algorithm Design}{32}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsubsection}{Communication Structure}{32}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsubsection}{Worker Nodes}{32}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsubsection}{Root Node}{32}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsubsection}{Database Node}{32}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.3}\it Performance Expectations}{32}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {5.4}{\ignorespaces Communication From Task 1 to Task 2 when the Number of Nodes Allocated is Equal}}{31}{}\protected@file@percent } +\newlabel{fig:Task1-Case1}{{5.4}{31}} +\@writefile{lof}{\contentsline {figure}{\numberline {5.5}{\ignorespaces Communication From Task 1 to Task 2 when Task 1 Has More Nodes Allocated}}{32}{}\protected@file@percent } +\newlabel{fig:Task1-Case2}{{5.5}{32}} +\@writefile{toc}{\contentsline {subsubsection}{Task 3}{32}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{Task 4 and Task 5}{32}{}\protected@file@percent } +\newlabel{table:tasking-tag}{{5.3.2}{33}} +\@writefile{lot}{\contentsline {table}{\numberline {5.1}{\ignorespaces MPI Tags for the MPI Tasking Approach}}{33}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{MPI Tags}{33}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.3}\it Performance Expectations}{33}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.3.4}\it Results}{34}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {5.4}\bf Subgraphing Approach}{34}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.1}\it Introduction to the Subgraphing Approach}{34}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.2}\it Algorithm Design}{34}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{Communication Structure}{34}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{Worker Nodes}{34}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{Root Node}{34}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{Database Node}{34}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.3}\it Performance Expectations}{34}{}\protected@file@percent } \@setckpt{Chapter5}{ -\setcounter{page}{33} +\setcounter{page}{35} \setcounter{equation}{0} \setcounter{enumi}{4} \setcounter{enumii}{0} @@ -54,7 +56,7 @@ \setcounter{paragraph}{0} \setcounter{subparagraph}{0} \setcounter{figure}{5} -\setcounter{table}{0} +\setcounter{table}{1} \setcounter{lofdepth}{1} \setcounter{lotdepth}{1} } diff --git a/Chapter5.tex b/Chapter5.tex index 198c34f..579cc09 100644 --- a/Chapter5.tex +++ b/Chapter5.tex @@ -62,6 +62,7 @@ The underlying communication structure for the tasking approach relies on a pseu \TUsubsubsection{Task 0} Task 0 is performed by the root node, and is a conditional task; it is not guaranteed to be executed at each pipeline iteration. Task 0 is only executed when the frontier is empty, but the database still holds unexplored states. This occurs when there are memory constraints, and database storage is performed during execution to offload the demand, as discussed in Section \ref{sec:db-stor}. After the completion of Task 0, the frontier has a state popped, and the root node sends the state to n$_1$. If the frontier is empty, the root node sends the finalize signal to all nodes. + \TUsubsubsection{Task 1} Task 1 begins by distributing the workload between nodes based on the local task communicator rank. Rather than splitting the exploit list at the root node and sending sub-lists to each node allocated to Task 1, each node checks its local communicator rank and performs a modulo operation with the number of nodes allocated to determine whether it should proceed with the current iteration of the exploit loop. Since the exploit list is static, each node has the exploit list initialized prior to the generation process, and communication cost can be avoided from sending sub-lists to each node. Each node in Task 1 works to compile a reduced exploit list that is applicable to the current network state. A breakdown of the Task 1 distribution can be seen in Figure \ref{fig:Task1-Data-Dist}. @@ -90,12 +91,41 @@ Once the computation work of Task 1 is completed, each node must send their comp \TUsubsubsection{Task 2} Each node in Task 2 iterates through the received partial applicable exploit list and creates new states with edges to the current state. However, Synchronous Firing work is performed during this process, and syncing multiple exploits that could be distributed across multiple nodes leads to additional overhead and complexity. To prevent these difficulties, each node checks its partial applicable exploit list for exploits that are part of a group, removes these exploits from its list, and sends a new partial list to the Task 2 local communicator root. Since the Task 2 local root now contains all group exploits, it can execute the Synchronous Firing work without additional communication or synchronization between other MPI nodes in the Task 2 stage. Other than the additional setup steps required for Synchronous Firing for the local root, all work performed during this task by all MPI nodes is that seen from the Synchronous Firing figure (Figure \ref{fig:sync-fire}). + \TUsubsubsection{Task 3} Task 3 is performed only by the root node, and no division of work is necessary. The root node will continuously check for new states until the Task 2 finalize signal is detected. This task consists of setting the new state's ID, adding it to the frontier, adding its information to the instance, and inserting information into the hash map. When the root node has processed all states and has received the Task 2 finalize signal, it will complete Task 3 by sending the instance and/or frontier to Task 4 and/or 5, respectively if applicable, then proceeds to Task 0. \TUsubsubsection{Task 4 and Task 5} Intermediate database operations, though not frequent and may never occur for small graphs, are lengthy and time-consuming when they do occur. As discussed in Section \ref{sec:db-stor}, the two main memory consumers are the frontier and the instance, both of which are contained by the root node. Since the database storage requests are blocking, the pipeline would halt for a lengthy period of time while waiting for the root node to finish potentially two large storages. Tasks 4 and 5 work to alleviate the stall by executing independently of the regular pipeline execution flow. Since Tasks 4 and 5 do not send any data, no other tasks must wait for these tasks to complete. The root node can then asynchronously send the frontier and instance to the appropriate nodes as needed, clear its memory, and continue execution without delay. + \TUsubsubsection{MPI Tags} +To ensure that the intended message is received by each node, the MPI message envelopes have their tag fields specified. When a node sends a message, it specifies a tag that corresponds with the data and intent for which it is sent. The tag values were arbitrarily chosen, and tags can be added to the existing list or removed as desired. When receiving a message, a node can specify to only look for messages that have an envelope with a matching tag field. Not only do tags ensure that nodes are receiving the correct messages, they also reduce complexity for program design. Table \ref{table:tasking-tag} displays the list of tags used for the MPI Tasking approach. + +\begin{table}[] \label{table:tasking-tag} + \centering + \begin{tabular}{|l|l|} + \hline + \textbf{Tag} & \textbf{Description} \\ \hline + 2 & Task 2 Finalize Signal \\ \hline + 3 & Fact for Hash Map Update \\ \hline + 4 & NetworkState for Hash Map Update \\ \hline + 5 & NetworkState to be Added to the Frontier \\ \hline + 6 & Current NetworkState Reference for Edge Creation \\ \hline + 7 & Factbases for Task 4 \\ \hline + 8 & Edges for Task 4 \\ \hline + 9 & Group Exploit Vectors for Local Root in Task 2 \\ \hline + 10 & Exploit Reference for Task 3 Work \\ \hline + 11 & AssetGroup Reference for Task 3 Work \\ \hline + 14 & Continue Signal \\ \hline + 15 & Finalize Signal \\ \hline + 20 & Current NetworkState Reference for Task 1 \\ \hline + 21 & Applicable Exploit Vector Scatter for Task 1 Case 2 \\ \hline + 30 & Applicable Exploit Vector Send to Task 2 \\ \hline + 40 & NetworkState Send to Task 2 \\ \hline + 50 & NetworkState to Store in Task 5 \\ \hline + \end{tabular} + \caption{MPI Tags for the MPI Tasking Approach} +\end{table} \TUsubsection{Performance Expectations} diff --git a/Chapter6.aux b/Chapter6.aux index 84ceee7..dcd0569 100644 --- a/Chapter6.aux +++ b/Chapter6.aux @@ -1,23 +1,23 @@ \relax -\@writefile{toc}{\contentsline {chapter}{\numberline {CHAPTER 6: }{\bf \uppercase {PERFORMANCE ANALYSIS}}}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.1}\bf Small Networks}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.1}\it Test Information}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.2}\it Results}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.3}\it Analysis}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.2}\bf Large Networks}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.1}\it Test Information}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.2}\it Results}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.3}\it Analysis}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.3}\bf Large Exploit Lists}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.1}\it Test Information}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.2}\it Results}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.3}\it Analysis}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.4}\bf Distributed Hash Tables}{33}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.1}\it Test Information}{34}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.2}\it Results}{34}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.3}\it Analysis}{34}{}\protected@file@percent } +\@writefile{toc}{\contentsline {chapter}{\numberline {CHAPTER 6: }{\bf \uppercase {PERFORMANCE ANALYSIS}}}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.1}\bf Small Networks}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.1}\it Test Information}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.2}\it Results}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.1.3}\it Analysis}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.2}\bf Large Networks}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.1}\it Test Information}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.2}\it Results}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.3}\it Analysis}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.3}\bf Large Exploit Lists}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.1}\it Test Information}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.2}\it Results}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.3}\it Analysis}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.4}\bf Distributed Hash Tables}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.1}\it Test Information}{36}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.2}\it Results}{36}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {6.4.3}\it Analysis}{36}{}\protected@file@percent } \@setckpt{Chapter6}{ -\setcounter{page}{35} +\setcounter{page}{37} \setcounter{equation}{0} \setcounter{enumi}{4} \setcounter{enumii}{0} diff --git a/Chapter7.aux b/Chapter7.aux index 0074278..3f824a1 100644 --- a/Chapter7.aux +++ b/Chapter7.aux @@ -1,8 +1,8 @@ \relax -\@writefile{toc}{\contentsline {chapter}{\numberline {CHAPTER 7: }{\bf \uppercase {CONCLUSIONS AND FUTURE WORKS}}}{35}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {7.1}\bf Future Work}{35}{}\protected@file@percent } +\@writefile{toc}{\contentsline {chapter}{\numberline {CHAPTER 7: }{\bf \uppercase {CONCLUSIONS AND FUTURE WORKS}}}{37}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {7.1}\bf Future Work}{37}{}\protected@file@percent } \@setckpt{Chapter7}{ -\setcounter{page}{36} +\setcounter{page}{38} \setcounter{equation}{0} \setcounter{enumi}{4} \setcounter{enumii}{0} diff --git a/Schrick-Noah_MS-Thesis.aux b/Schrick-Noah_MS-Thesis.aux index 7612c8e..63d1e46 100644 --- a/Schrick-Noah_MS-Thesis.aux +++ b/Schrick-Noah_MS-Thesis.aux @@ -32,9 +32,9 @@ \bibcite{cook_rage_2018}{9} \bibcite{cook_scalable_2016}{10} \@writefile{toc}{{\hfill \ }} -\@writefile{toc}{\contentsline {section}{\hspace {-\parindent }NOMENCLATURE}{36}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\hspace {-\parindent }NOMENCLATURE}{38}{}\protected@file@percent } \@writefile{toc}{\addvspace {10pt}} -\@writefile{toc}{\contentsline {section}{\hspace {-\parindent }BIBLIOGRAPHY}{36}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\hspace {-\parindent }BIBLIOGRAPHY}{38}{}\protected@file@percent } \@writefile{toc}{{\hfill \ }} \bibcite{CVE-2019-10747}{11} \bibcite{dai_fpgp_2016}{12} @@ -54,4 +54,4 @@ \bibcite{zhang_boosting_2017}{26} \bibstyle{plain} \@input{Appendices.aux} -\gdef \@abspage@last{50} +\gdef \@abspage@last{52} diff --git a/Schrick-Noah_MS-Thesis.lof b/Schrick-Noah_MS-Thesis.lof index 101dea9..fa2d4db 100644 --- a/Schrick-Noah_MS-Thesis.lof +++ b/Schrick-Noah_MS-Thesis.lof @@ -6,6 +6,6 @@ \contentsline {figure}{\numberline {4.3}{\ignorespaces Synchronous Firing in the Graph Generation Process}}{23}{}% \contentsline {figure}{\numberline {5.1}{\ignorespaces Task Overview of the Attack Graph Generation Process}}{27}{}% \contentsline {figure}{\numberline {5.2}{\ignorespaces Node Allocation for each Task}}{28}{}% -\contentsline {figure}{\numberline {5.3}{\ignorespaces Data Distribution of Task One}}{29}{}% -\contentsline {figure}{\numberline {5.4}{\ignorespaces Communication From Task 1 to Task 2 when the Number of Nodes Allocated is Equal}}{30}{}% -\contentsline {figure}{\numberline {5.5}{\ignorespaces Communication From Task 1 to Task 2 when Task 1 Has More Nodes Allocated}}{31}{}% +\contentsline {figure}{\numberline {5.3}{\ignorespaces Data Distribution of Task One}}{30}{}% +\contentsline {figure}{\numberline {5.4}{\ignorespaces Communication From Task 1 to Task 2 when the Number of Nodes Allocated is Equal}}{31}{}% +\contentsline {figure}{\numberline {5.5}{\ignorespaces Communication From Task 1 to Task 2 when Task 1 Has More Nodes Allocated}}{32}{}% diff --git a/Schrick-Noah_MS-Thesis.log b/Schrick-Noah_MS-Thesis.log index c8b18aa..fa491d2 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.2.14) 18 MAR 2022 22:14 +This is pdfTeX, Version 3.141592653-2.6-1.40.23 (TeX Live 2021/Arch Linux) (preloaded format=pdflatex 2022.2.14) 20 MAR 2022 13:08 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -295,55 +295,60 @@ Package pdftex.def Info: ./Chapter5_img/node-alloc.png used on input line 54. File: ./Chapter5_img/Task1-Data-Dist.png Graphic file (type png) Package pdftex.def Info: ./Chapter5_img/Task1-Data-Dist.png used on input line - 68. + 70. (pdftex.def) Requested size: 469.75499pt x 155.42674pt. - [29 <./Chapter5_img/Task1-Data-Dist.PNG>] -<./Chapter5_img/Task1-Case1.png, id=148, 586.44093pt x 339.51843pt> + [29] +<./Chapter5_img/Task1-Case1.png, id=147, 586.44093pt x 339.51843pt> File: ./Chapter5_img/Task1-Case1.png Graphic file (type png) -Package pdftex.def Info: ./Chapter5_img/Task1-Case1.png used on input line 77. +Package pdftex.def Info: ./Chapter5_img/Task1-Case1.png used on input line 79. (pdftex.def) Requested size: 469.75499pt x 271.9622pt. -<./Chapter5_img/Task1-Case2.png, id=149, 702.37407pt x 414.79968pt> +<./Chapter5_img/Task1-Case2.png, id=148, 702.37407pt x 414.79968pt> File: ./Chapter5_img/Task1-Case2.png Graphic file (type png) -Package pdftex.def Info: ./Chapter5_img/Task1-Case2.png used on input line 85. +Package pdftex.def Info: ./Chapter5_img/Task1-Case2.png used on input line 86. (pdftex.def) Requested size: 469.75499pt x 277.43332pt. - [30 <./Chapter5_img/Task1-Case1.PNG>] [31 <./Chapter5_img/Task1-Case2.PNG>]) [ -32] + [30 <./Chapter5_img/Task1-Data-Dist.PNG>] [31 <./Chapter5_img/Task1-Case1.PNG> +] [32 <./Chapter5_img/Task1-Case2.PNG>] + +LaTeX Warning: No positions in optional float specifier. + Default added (so using `tbp') on input line 104. + +[33]) [34] \openout2 = `Chapter6.aux'. (./Chapter6.tex CHAPTER 6. -[33 +[35 -]) [34] +]) [36] \openout2 = `Chapter7.aux'. (./Chapter7.tex CHAPTER 7. -) [35 +) [37 -] (./Schrick-Noah_MS-Thesis.bbl [36 +] (./Schrick-Noah_MS-Thesis.bbl [38 -] [37]) +] [39]) \c@appendixno=\count269 - [38] + [40] \openout2 = `Appendices.aux'. - (./Appendices.tex [39 + (./Appendices.tex [41 ]) -[40] (./Schrick-Noah_MS-Thesis.aux (./Chapter1.aux) (./Chapter2.aux) +[42] (./Schrick-Noah_MS-Thesis.aux (./Chapter1.aux) (./Chapter2.aux) (./Chapter3.aux) (./Chapter4.aux) (./Chapter5.aux) (./Chapter6.aux) (./Chapter7.aux) (./Appendices.aux)) ) (\end occurred inside a group at level 6) @@ -356,13 +361,13 @@ CHAPTER 7. ### semi simple group (level 1) entered at line 52 (\begingroup) ### bottom level Here is how much of TeX's memory you used: - 2225 strings out of 478353 - 40165 string characters out of 5854635 - 345098 words of memory out of 5000000 - 20287 multiletter control sequences out of 15000+600000 + 2226 strings out of 478353 + 40184 string characters out of 5854635 + 345111 words of memory out of 5000000 + 20288 multiletter control sequences out of 15000+600000 407326 words of font info for 40 fonts, out of 8000000 for 9000 1141 hyphenation exceptions out of 8191 - 55i,7n,62p,1109b,1305s stack positions out of 5000i,500n,10000p,200000b,80000s + 55i,8n,62p,1109b,1305s stack positions out of 5000i,500n,10000p,200000b,80000s {/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.en c} -Output written on Schrick-Noah_MS-Thesis.pdf (50 pages, 594171 bytes). +Output written on Schrick-Noah_MS-Thesis.pdf (52 pages, 598425 bytes). PDF statistics: - 226 PDF objects out of 1000 (max. 8388607) - 139 compressed objects within 2 object streams + 232 PDF objects out of 1000 (max. 8388607) + 143 compressed objects within 2 object streams 0 named destinations out of 1000 (max. 500000) 51 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/Schrick-Noah_MS-Thesis.lot b/Schrick-Noah_MS-Thesis.lot index 482eb51..47bb15c 100644 --- a/Schrick-Noah_MS-Thesis.lot +++ b/Schrick-Noah_MS-Thesis.lot @@ -1 +1,2 @@ {\vspace {\baselineskip }} +\contentsline {table}{\numberline {5.1}{\ignorespaces MPI Tags for the MPI Tasking Approach}}{33}{}% diff --git a/Schrick-Noah_MS-Thesis.pdf b/Schrick-Noah_MS-Thesis.pdf index ec4b04c2f601bcd5bf4b8e7e97ff687276a193db..e630214ef9eeb3d77368d493892510aff38dcfea 100644 GIT binary patch delta 27741 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%0A4B=?qq=zAt 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 N4m5gtX%!i?{{ffy1w;S< diff --git a/Schrick-Noah_MS-Thesis.toc b/Schrick-Noah_MS-Thesis.toc index 5a40f09..bc60046 100644 --- a/Schrick-Noah_MS-Thesis.toc +++ b/Schrick-Noah_MS-Thesis.toc @@ -49,49 +49,49 @@ \contentsline {section}{\numberline {5.3}\bf Tasking Approach}{26}{}% \contentsline {subsection}{\numberline {5.3.1}\it Introduction to the Tasking Approach}{26}{}% \contentsline {subsection}{\numberline {5.3.2}\it Algorithm Design}{26}{}% -\contentsline {subsubsection}{Communication Structure}{28}{}% +\contentsline {subsubsection}{Communication Structure}{29}{}% \contentsline {subsubsection}{Task 0}{29}{}% \contentsline {subsubsection}{Task 1}{29}{}% \contentsline {subsubsection}{Task 2}{30}{}% -\contentsline {subsubsection}{Task 3}{31}{}% -\contentsline {subsubsection}{Task 4 and Task 5}{31}{}% -\contentsline {subsubsection}{MPI Tags}{31}{}% -\contentsline {subsection}{\numberline {5.3.3}\it Performance Expectations}{32}{}% -\contentsline {subsection}{\numberline {5.3.4}\it Results}{32}{}% -\contentsline {section}{\numberline {5.4}\bf Subgraphing Approach}{32}{}% -\contentsline {subsection}{\numberline {5.4.1}\it Introduction to the Subgraphing Approach}{32}{}% -\contentsline {subsection}{\numberline {5.4.2}\it Algorithm Design}{32}{}% -\contentsline {subsubsection}{Communication Structure}{32}{}% -\contentsline {subsubsection}{Worker Nodes}{32}{}% -\contentsline {subsubsection}{Root Node}{32}{}% -\contentsline {subsubsection}{Database Node}{32}{}% -\contentsline {subsection}{\numberline {5.4.3}\it Performance Expectations}{32}{}% -\contentsline {chapter}{\numberline {CHAPTER 6: }{\bf \uppercase {PERFORMANCE ANALYSIS}}}{33}{}% -\contentsline {section}{\numberline {6.1}\bf Small Networks}{33}{}% -\contentsline {subsection}{\numberline {6.1.1}\it Test Information}{33}{}% -\contentsline {subsection}{\numberline {6.1.2}\it Results}{33}{}% -\contentsline {subsection}{\numberline {6.1.3}\it Analysis}{33}{}% -\contentsline {section}{\numberline {6.2}\bf Large Networks}{33}{}% -\contentsline {subsection}{\numberline {6.2.1}\it Test Information}{33}{}% -\contentsline {subsection}{\numberline {6.2.2}\it Results}{33}{}% -\contentsline {subsection}{\numberline {6.2.3}\it Analysis}{33}{}% -\contentsline {section}{\numberline {6.3}\bf Large Exploit Lists}{33}{}% -\contentsline {subsection}{\numberline {6.3.1}\it Test Information}{33}{}% -\contentsline {subsection}{\numberline {6.3.2}\it Results}{33}{}% -\contentsline {subsection}{\numberline {6.3.3}\it Analysis}{33}{}% -\contentsline {section}{\numberline {6.4}\bf Distributed Hash Tables}{33}{}% -\contentsline {subsection}{\numberline {6.4.1}\it Test Information}{34}{}% -\contentsline {subsection}{\numberline {6.4.2}\it Results}{34}{}% -\contentsline {subsection}{\numberline {6.4.3}\it Analysis}{34}{}% -\contentsline {chapter}{\numberline {CHAPTER 7: }{\bf \uppercase {CONCLUSIONS AND FUTURE WORKS}}}{35}{}% -\contentsline {section}{\numberline {7.1}\bf Future Work}{35}{}% +\contentsline {subsubsection}{Task 3}{32}{}% +\contentsline {subsubsection}{Task 4 and Task 5}{32}{}% +\contentsline {subsubsection}{MPI Tags}{33}{}% +\contentsline {subsection}{\numberline {5.3.3}\it Performance Expectations}{33}{}% +\contentsline {subsection}{\numberline {5.3.4}\it Results}{34}{}% +\contentsline {section}{\numberline {5.4}\bf Subgraphing Approach}{34}{}% +\contentsline {subsection}{\numberline {5.4.1}\it Introduction to the Subgraphing Approach}{34}{}% +\contentsline {subsection}{\numberline {5.4.2}\it Algorithm Design}{34}{}% +\contentsline {subsubsection}{Communication Structure}{34}{}% +\contentsline {subsubsection}{Worker Nodes}{34}{}% +\contentsline {subsubsection}{Root Node}{34}{}% +\contentsline {subsubsection}{Database Node}{34}{}% +\contentsline {subsection}{\numberline {5.4.3}\it Performance Expectations}{34}{}% +\contentsline {chapter}{\numberline {CHAPTER 6: }{\bf \uppercase {PERFORMANCE ANALYSIS}}}{35}{}% +\contentsline {section}{\numberline {6.1}\bf Small Networks}{35}{}% +\contentsline {subsection}{\numberline {6.1.1}\it Test Information}{35}{}% +\contentsline {subsection}{\numberline {6.1.2}\it Results}{35}{}% +\contentsline {subsection}{\numberline {6.1.3}\it Analysis}{35}{}% +\contentsline {section}{\numberline {6.2}\bf Large Networks}{35}{}% +\contentsline {subsection}{\numberline {6.2.1}\it Test Information}{35}{}% +\contentsline {subsection}{\numberline {6.2.2}\it Results}{35}{}% +\contentsline {subsection}{\numberline {6.2.3}\it Analysis}{35}{}% +\contentsline {section}{\numberline {6.3}\bf Large Exploit Lists}{35}{}% +\contentsline {subsection}{\numberline {6.3.1}\it Test Information}{35}{}% +\contentsline {subsection}{\numberline {6.3.2}\it Results}{35}{}% +\contentsline {subsection}{\numberline {6.3.3}\it Analysis}{35}{}% +\contentsline {section}{\numberline {6.4}\bf Distributed Hash Tables}{35}{}% +\contentsline {subsection}{\numberline {6.4.1}\it Test Information}{36}{}% +\contentsline {subsection}{\numberline {6.4.2}\it Results}{36}{}% +\contentsline {subsection}{\numberline {6.4.3}\it Analysis}{36}{}% +\contentsline {chapter}{\numberline {CHAPTER 7: }{\bf \uppercase {CONCLUSIONS AND FUTURE WORKS}}}{37}{}% +\contentsline {section}{\numberline {7.1}\bf Future Work}{37}{}% {\hfill \ } -\contentsline {section}{\hspace {-\parindent }NOMENCLATURE}{36}{}% +\contentsline {section}{\hspace {-\parindent }NOMENCLATURE}{38}{}% \addvspace {10pt} -\contentsline {section}{\hspace {-\parindent }BIBLIOGRAPHY}{36}{}% +\contentsline {section}{\hspace {-\parindent }BIBLIOGRAPHY}{38}{}% {\hfill \ } -\contentsline {section}{\hspace {-\parindent }APPENDIX A:\ \ {\bf \uppercase {THE FIRST APPENDIX}} }{39}{}% -\contentsline {section}{\hspace {-\parindent }APPENDIX B:\ \ {\bf \uppercase {THE SECOND APPENDIX}} }{40}{}% -\contentsline {section}{\numberline {B.1}\bf A Heading in an Appendix}{40}{}% -\contentsline {subsection}{\numberline {B.1.1}\it A Subheading in an Appendix}{40}{}% -\contentsline {subsubsection}{A Sub-subsection in an Appendix}{40}{}% +\contentsline {section}{\hspace {-\parindent }APPENDIX A:\ \ {\bf \uppercase {THE FIRST APPENDIX}} }{41}{}% +\contentsline {section}{\hspace {-\parindent }APPENDIX B:\ \ {\bf \uppercase {THE SECOND APPENDIX}} }{42}{}% +\contentsline {section}{\numberline {B.1}\bf A Heading in an Appendix}{42}{}% +\contentsline {subsection}{\numberline {B.1.1}\it A Subheading in an Appendix}{42}{}% +\contentsline {subsubsection}{A Sub-subsection in an Appendix}{42}{}%