From 7193d2fc8dcaaf77d105940cb179e562d6d64972 Mon Sep 17 00:00:00 2001 From: noah Date: Fri, 19 Apr 2024 11:46:15 -0500 Subject: [PATCH] Modifications and PDF --- Schrick-Noah_MPI-Tasking.aux | 26 +++++++++++++------------- Schrick-Noah_MPI-Tasking.log | 29 +++++++++++++++++------------ Schrick-Noah_MPI-Tasking.pdf | Bin 10269741 -> 10270212 bytes Schrick-Noah_MPI-Tasking.tex | 22 +++++++++++----------- 4 files changed, 41 insertions(+), 36 deletions(-) diff --git a/Schrick-Noah_MPI-Tasking.aux b/Schrick-Noah_MPI-Tasking.aux index 09a3d64..19b09b7 100644 --- a/Schrick-Noah_MPI-Tasking.aux +++ b/Schrick-Noah_MPI-Tasking.aux @@ -91,14 +91,14 @@ \newlabel{sec:test-platform}{{\mbox {VI-D}}{7}{Testing Platform}{subsection.6.4}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {VI-E}}Testing Process}{7}{subsection.6.5}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {VII}Analysis and Results}{7}{section.7}\protected@file@percent } -\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces Number of Nodes and Number of Exploits (Averaged) vs. Runtime (ms)}}{8}{figure.9}\protected@file@percent } -\newlabel{fig:nodes-exp}{{9}{8}{Number of Nodes and Number of Exploits (Averaged) vs. Runtime (ms)}{figure.9}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces Applicability of Exploits (\%) and Database Load (\%) (Averaged) vs. Runtime (ms)}}{8}{figure.10}\protected@file@percent } -\newlabel{fig:appl-load}{{10}{8}{Applicability of Exploits (\%) and Database Load (\%) (Averaged) vs. Runtime (ms)}{figure.10}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces Minimum, Maximum, and Mean Speedup of MPI Tasking Across All Problem Sizes}}{9}{figure.11}\protected@file@percent } -\newlabel{fig:overall-speedup}{{11}{9}{Minimum, Maximum, and Mean Speedup of MPI Tasking Across All Problem Sizes}{figure.11}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {12}{\ignorespaces Minimum, Maximum, and Mean Efficiency of MPI Tasking Across All Problem Sizes}}{9}{figure.12}\protected@file@percent } -\newlabel{fig:overall-efficiency}{{12}{9}{Minimum, Maximum, and Mean Efficiency of MPI Tasking Across All Problem Sizes}{figure.12}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces Number of Nodes and Number of Exploits (Averaged) vs. Runtime (ms), Combining and Averaging Across All Other Parameters}}{8}{figure.9}\protected@file@percent } +\newlabel{fig:nodes-exp}{{9}{8}{Number of Nodes and Number of Exploits (Averaged) vs. Runtime (ms), Combining and Averaging Across All Other Parameters}{figure.9}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces Applicability of Exploits (\%) and Database Load (\%) (Averaged) vs. Runtime (ms), Combining and Averaging Across All Other Parameters}}{8}{figure.10}\protected@file@percent } +\newlabel{fig:appl-load}{{10}{8}{Applicability of Exploits (\%) and Database Load (\%) (Averaged) vs. Runtime (ms), Combining and Averaging Across All Other Parameters}{figure.10}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces Minimum, Maximum, and Mean Speedup of MPI Tasking Across All Problem Sizes, Combining and Averaging Across All Parameters}}{9}{figure.11}\protected@file@percent } +\newlabel{fig:overall-speedup}{{11}{9}{Minimum, Maximum, and Mean Speedup of MPI Tasking Across All Problem Sizes, Combining and Averaging Across All Parameters}{figure.11}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {12}{\ignorespaces Minimum, Maximum, and Mean Efficiency of MPI Tasking Across All Problem Sizes, Combining and Averaging Across All Parameters}}{9}{figure.12}\protected@file@percent } +\newlabel{fig:overall-efficiency}{{12}{9}{Minimum, Maximum, and Mean Efficiency of MPI Tasking Across All Problem Sizes, Combining and Averaging Across All Parameters}{figure.12}{}} \@writefile{toc}{\contentsline {section}{\numberline {VIII}Conclusion and Future Work}{9}{section.8}\protected@file@percent } \newlabel{sec:FW}{{VIII}{9}{Conclusion and Future Work}{section.8}{}} \citation{Amdahl} @@ -107,15 +107,15 @@ \bibdata{Bibliography} \bibcite{9678822}{1} \bibcite{7993827}{2} +\@writefile{lof}{\contentsline {figure}{\numberline {13}{\ignorespaces Mean Speedup and Efficiency for the Exploit Parameter Across the Number of Compute Nodes, Combining and Averaging Across All Other Parameters}}{10}{figure.13}\protected@file@percent } +\newlabel{fig:param-exploit}{{13}{10}{Mean Speedup and Efficiency for the Exploit Parameter Across the Number of Compute Nodes, Combining and Averaging Across All Other Parameters}{figure.13}{}} +\@writefile{lof}{\contentsline {figure}{\numberline {14}{\ignorespaces Mean Speedup and Efficiency for the Applicability of Exploit Parameter Across the Number of Compute Nodes, Combining and Averaging Across All Other Parameters}}{10}{figure.14}\protected@file@percent } +\newlabel{fig:param-appl}{{14}{10}{Mean Speedup and Efficiency for the Applicability of Exploit Parameter Across the Number of Compute Nodes, Combining and Averaging Across All Other Parameters}{figure.14}{}} +\@writefile{toc}{\contentsline {section}{References}{10}{section*.1}\protected@file@percent } \bibcite{8652334}{3} \bibcite{baloyi_guidelines_2019}{4} \bibcite{allman_complying_2006}{5} \bibcite{j_hale_compliance_nodate}{6} -\@writefile{lof}{\contentsline {figure}{\numberline {13}{\ignorespaces Mean Speedup and Efficiency for the Exploit Parameter Across the Number of Compute Nodes}}{10}{figure.13}\protected@file@percent } -\newlabel{fig:param-exploit}{{13}{10}{Mean Speedup and Efficiency for the Exploit Parameter Across the Number of Compute Nodes}{figure.13}{}} -\@writefile{lof}{\contentsline {figure}{\numberline {14}{\ignorespaces Mean Speedup and Efficiency for the Applicability of Exploit Parameter Across the Number of Compute Nodes}}{10}{figure.14}\protected@file@percent } -\newlabel{fig:param-appl}{{14}{10}{Mean Speedup and Efficiency for the Applicability of Exploit Parameter Across the Number of Compute Nodes}{figure.14}{}} -\@writefile{toc}{\contentsline {section}{References}{10}{section*.1}\protected@file@percent } \bibcite{ou_scalable_2006}{7} \bibcite{CPSIOT}{8} \bibcite{ming_jo}{9} diff --git a/Schrick-Noah_MPI-Tasking.log b/Schrick-Noah_MPI-Tasking.log index d7223e5..08025e0 100644 --- a/Schrick-Noah_MPI-Tasking.log +++ b/Schrick-Noah_MPI-Tasking.log @@ -1,8 +1,8 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/Arch Linux) (preloaded format=pdflatex 2024.4.16) 19 APR 2024 09:17 +This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/Arch Linux) (preloaded format=pdflatex 2024.4.16) 19 APR 2024 11:40 entering extended mode restricted \write18 enabled. %&-line parsing enabled. -**Schrick-Noah_MPI-Tasking +**Schrick-Noah_MPI-Tasking.tex (./Schrick-Noah_MPI-Tasking.tex LaTeX2e <2023-11-01> patch level 1 L3 programming layer <2024-02-20> @@ -974,10 +974,15 @@ File: ./images/dbload-runtime.png Graphic file (type png) Package pdftex.def Info: ./images/dbload-runtime.png used on input line 311. (pdftex.def) Requested size: 252.0pt x 197.13081pt. -Underfull \vbox (badness 1502) has occurred while \output is active [] +Underfull \vbox (badness 1371) has occurred while \output is active [] -Underfull \vbox (badness 3815) has occurred while \output is active [] +Underfull \hbox (badness 1902) in paragraph at lines 318--319 +\OT1/ptm/m/n/10 drops in outcome variables. This effect is made more + [] + + +Underfull \vbox (badness 3503) has occurred while \output is active [] [8 <./images/nodes-runtime.png> <./images/exploits-runtime.png> <./images/appl icability-runtime.png> <./images/dbload-runtime.png>] @@ -1042,13 +1047,13 @@ Underfull \hbox (badness 4779) in paragraph at lines 365--366 []\OT1/ptm/m/n/10 The analysis portion of this work also has room [] -(./Schrick-Noah_MPI-Tasking.bbl +(./Schrick-Noah_MPI-Tasking.bbl [10 <./images/exploit-speedup.png> <./images/ex +ploit-eff.png> <./images/appl-speedup.png> <./images/appl-eff.png>] Underfull \hbox (badness 1442) in paragraph at lines 21--26 \OT1/ptm/m/n/8 A Focus on Cyberphysical Systems and Internet of Things,'' in [] -[10 <./images/exploit-speedup.png> <./images/exploit-eff.png> <./images/appl-sp -eedup.png> <./images/appl-eff.png>] + Underfull \hbox (badness 1527) in paragraph at lines 56--58 []\OT1/ptm/m/n/8 P. Pacheco, \OT1/ptm/m/it/8 An Introduction to Parallel Progra mming\OT1/ptm/m/n/8 . Morgan @@ -1080,7 +1085,7 @@ Underfull \hbox (badness 10000) in paragraph at lines 143--146 [] ) -<./images/Schrick-Noah_Author-Photo.png, id=325, 1865.46938pt x 2031.84094pt> +<./images/Schrick-Noah_Author-Photo.png, id=324, 1865.46938pt x 2031.84094pt> File: ./images/Schrick-Noah_Author-Photo.png Graphic file (type png) Package pdftex.def Info: ./images/Schrick-Noah_Author-Photo.png used on input @@ -1096,7 +1101,7 @@ Underfull \hbox (badness 2790) in paragraph at lines 376--378 []\OT1/ptm/m/n/8 His research focus is on cybersecurity and [] -<./images/Hawrylak-Peter_Author-Photo.jpg, id=328, 90.3375pt x 90.3375pt> +<./images/Hawrylak-Peter_Author-Photo.jpg, id=327, 90.3375pt x 90.3375pt> File: ./images/Hawrylak-Peter_Author-Photo.jpg Graphic file (type jpg) Package pdftex.def Info: ./images/Hawrylak-Peter_Author-Photo.jpg used on inpu @@ -1125,11 +1130,11 @@ d. Here is how much of TeX's memory you used: 24098 strings out of 476076 451701 string characters out of 5793775 - 1950187 words of memory out of 5000000 + 1953187 words of memory out of 5000000 45721 multiletter control sequences out of 15000+600000 598923 words of font info for 111 fonts, out of 8000000 for 9000 18 hyphenation exceptions out of 8191 - 99i,14n,101p,2031b,817s stack positions out of 10000i,1000n,20000p,200000b,200000s + 99i,14n,101p,2035b,817s stack positions out of 10000i,1000n,20000p,200000b,200000s -Output written on Schrick-Noah_MPI-Tasking.pdf (11 pages, 10269741 bytes). +Output written on Schrick-Noah_MPI-Tasking.pdf (11 pages, 10270212 bytes). PDF statistics: 399 PDF objects out of 1000 (max. 8388607) 319 compressed objects within 4 object streams diff --git a/Schrick-Noah_MPI-Tasking.pdf b/Schrick-Noah_MPI-Tasking.pdf index 2cf5a0b41147dbcf174b00e1e774bb310eef021b..eb587b717e3733fd7a93374f10a393044c26c7f6 100644 GIT binary patch delta 28361 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 diff --git a/Schrick-Noah_MPI-Tasking.tex b/Schrick-Noah_MPI-Tasking.tex index d601996..3939df4 100644 --- a/Schrick-Noah_MPI-Tasking.tex +++ b/Schrick-Noah_MPI-Tasking.tex @@ -23,7 +23,7 @@ \begin{document} -\title{Parallelization of Large-Scale Attack and Compliance Graph Generation Using Message-Passing Interface +\title{An Algorithm for the Parallelization of Large-Scale Attack and Compliance Graph Generation Using Message-Passing Interface } \author{NOAH L. SCHRICK\,\orcidlink{0000-0003-0875-8927}~\IEEEmembership{Member,~IEEE,}, AND PETER J. HAWRYLAK\,\orcidlink{0000-0003-3268-7452},~\IEEEmembership{Senior Member,~IEEE,} @@ -301,7 +301,7 @@ Exploratory data analysis was performed on the resulting data using Python to as \centering \includegraphics[width=\linewidth]{"./images/nodes-runtime.png"} \includegraphics[width=\linewidth]{"./images/exploits-runtime.png"} - \caption{Number of Nodes and Number of Exploits (Averaged) vs. Runtime (ms)} + \caption{Number of Nodes and Number of Exploits (Averaged) vs. Runtime (ms), Combining and Averaging Across All Other Parameters} \label{fig:nodes-exp} \end{figure} @@ -309,30 +309,30 @@ Exploratory data analysis was performed on the resulting data using Python to as \centering \includegraphics[width=\linewidth]{"./images/applicability-runtime.png"} \includegraphics[width=\linewidth]{"./images/dbload-runtime.png"} - \caption{Applicability of Exploits (\%) and Database Load (\%) (Averaged) vs. Runtime (ms)} + \caption{Applicability of Exploits (\%) and Database Load (\%) (Averaged) vs. Runtime (ms), Combining and Averaging Across All Other Parameters} \label{fig:appl-load} \end{figure} In terms of speedup, when the number of entries in the exploit list is small, the serial approach has better performance. As discussed in Section \ref{sec:Task-perf-expec}, this is expected due to the time elapsed for the communication cost exceeding the time taken to generate a state. However, as the number of items in the exploit list increase, the Tasking Approach quickly begins to outperform the serial approach. It is notable that even when the tasking pipeline is not fully saturated (when there are less compute nodes assigned than tasks), the performance is still approximately equal to that of the serial approach. The other noticeable feature is that as more compute nodes are assigned, the speedup continues to increase. -Figure \ref{fig:overall-speedup} displays the overall minimum, maximum, and mean of speedup across all problem sizes. It is observable through the mean and maximum bars that as other problem size parameters increase, the speedup of the Tasking Approach also increases. Since database load, applicability of exploits, and number of exploits all affect the runtime, increasing the problem size through any of these parameters showcases the viability of the parallelized approach. At the same time, it is worth noting that the parallelized approach is not strictly better. The minimum speedups shown in Figure \ref{fig:overall-speedup} demonstrate that for small problem sizes, the serial approach performs better due to the communication costs. +Figure \ref{fig:overall-speedup} displays the overall minimum, maximum, and mean of speedup across all problem sizes. All parameters are combined and averaged, which leads to the high-magnitude drops in outcome variables. This effect is made more noticeable since the minimum-bound data was collected, where the large majority of data was collected using only a few nodes. It is observable through the mean and maximum bars that as other problem size parameters increase, the speedup of the Tasking Approach also increases. Since database load, applicability of exploits, and number of exploits all affect the runtime, increasing the problem size through any of these parameters showcases the viability of the parallelized approach. At the same time, it is worth noting that the parallelized approach is not strictly better. The minimum speedups shown in Figure \ref{fig:overall-speedup} demonstrate that for small problem sizes, the serial approach performs better due to the communication costs. \begin{figure}[htp] \centering \includegraphics[width=\linewidth]{"./images/overall-speedup.png"} \vspace{.2truein} \centerline{} - \caption{Minimum, Maximum, and Mean Speedup of MPI Tasking Across All Problem Sizes} - \label{fig:overall-speedup} + \caption{Minimum, Maximum, and Mean Speedup of MPI Tasking Across All Problem Sizes, Combining and Averaging Across All Parameters} + \label{fig:overall-speedup} \end{figure} -Figure \ref{fig:overall-efficiency} displays the overall minimum, maximum, and mean of efficiency across all problem sizes. In terms of efficiency, 2 compute nodes offer the greatest value. While the 2 compute node configuration does offer the greatest efficiency, it does not provide a speedup greater than 1.0 on any of the testing cases conducted. The results also demonstrate that an odd number of compute nodes in a fully saturated pipeline has better efficiency that an even number of compute nodes. When referring to Figure \ref{fig:node-alloc}, when there is an odd number number of compute nodes, Task 1 is allocated more nodes than Task 2. Task 1 was responsible for iterating through an increased size of the exploit list, so more nodes is advantageous in distributing the workload. However, when many exploits were not applicable, Task 2 had a lower workload. Some test cases only had 6 applicable exploits, which is a substantially lower workload for Task 2 compared to cases where Task 1 had upwards of 49,000 exploits. As the applicability of exploits increases, the disparity in efficiency for odd and even number of nodes is not present. +Figure \ref{fig:overall-efficiency} displays the overall minimum, maximum, and mean of efficiency across all problem sizes. All parameters are combined and averaged, which leads to the high-magnitude drop in outcome variables. This effect is made more noticeable since the minimum-bound data was collected, where the large majority of data was collected using only a few nodes. In terms of efficiency, 2 compute nodes offer the greatest value. While the 2 compute node configuration does offer the greatest efficiency, it does not provide a speedup greater than 1.0 on any of the testing cases conducted. The results also demonstrate that an odd number of compute nodes in a fully saturated pipeline has better efficiency that an even number of compute nodes. When referring to Figure \ref{fig:node-alloc}, when there is an odd number number of compute nodes, Task 1 is allocated more nodes than Task 2. Task 1 was responsible for iterating through an increased size of the exploit list, so more nodes is advantageous in distributing the workload. However, when many exploits were not applicable, Task 2 had a lower workload. Some test cases only had 6 applicable exploits, which is a substantially lower workload for Task 2 compared to cases where Task 1 had upwards of 49,000 exploits. As the applicability of exploits increases, the disparity in efficiency for odd and even number of nodes is not present. \begin{figure}[htp] \centering \includegraphics[width=\linewidth]{"./images/overall-efficiency.png"} \vspace{.2truein} \centerline{} - \caption{Minimum, Maximum, and Mean Efficiency of MPI Tasking Across All Problem Sizes} - \label{fig:overall-efficiency} + \caption{Minimum, Maximum, and Mean Efficiency of MPI Tasking Across All Problem Sizes, Combining and Averaging Across All Parameters} + \label{fig:overall-efficiency} \end{figure} Speedups and efficiencies were also computed across each parameter. Using pivot tables, mean speedups and mean efficiencies were computed for a parameter across all node configurations. Figures \ref{fig:param-exploit} and \ref{fig:param-appl} display the speedups and efficiencies of the exploit parameter and the applicability of exploits parameter, respectively. The number of nodes has the largest impact on the exploit parameter, and Figure \ref{fig:param-exploit} illustrates that even when fewer nodes are used, speedup can still be obtained as the exploit list grows in size. Figure \ref{fig:param-appl} demonstrates that though Task 2 has less of an impact on overall runtime and contribution to speedup, speedup is still achievable as more compute nodes are added and as the applicability of exploits increase. Though database load was not a parameter to easily include in preliminary testing, speedup is expected as this parameter changes. By dedicating nodes to solely handle database operations, the tasking pipeline is able to move to new state generation without the need to wait for all preceding database operations to complete. @@ -341,7 +341,7 @@ Speedups and efficiencies were also computed across each parameter. Using pivot \centering \includegraphics[width=\linewidth]{"./images/exploit-speedup.png"} \includegraphics[width=\linewidth]{"./images/exploit-eff.png"} - \caption{Mean Speedup and Efficiency for the Exploit Parameter Across the Number of Compute Nodes} + \caption{Mean Speedup and Efficiency for the Exploit Parameter Across the Number of Compute Nodes, Combining and Averaging Across All Other Parameters} \label{fig:param-exploit} \end{figure} @@ -349,7 +349,7 @@ Speedups and efficiencies were also computed across each parameter. Using pivot \centering \includegraphics[width=\linewidth]{"./images/appl-speedup.png"} \includegraphics[width=\linewidth]{"./images/appl-eff.png"} - \caption{Mean Speedup and Efficiency for the Applicability of Exploit Parameter Across the Number of Compute Nodes} + \caption{Mean Speedup and Efficiency for the Applicability of Exploit Parameter Across the Number of Compute Nodes, Combining and Averaging Across All Other Parameters} \label{fig:param-appl} \end{figure}