Changes in / [2581f1e:e35ecd0]


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/theses/mike_brooks_MMath/list.tex

    r2581f1e re35ecd0  
    655655
    656656\subsection{Add-Remove Performance}
    657 \label{s:AddRemovePerformance}
    658657
    659658The fundamental job of a linked-list library is to manage the links that connect nodes.
     
    958957\label{s:ComparingIntrusiveImplementations}
    959958
    960 The preceding result shows the intrusive implementations have better performance to the wrapped lists for small to medium sized lists.
    961 This analysis covers the experiment position taken in \VRef{s:AddRemovePerformance} for movement, polarity, and accessor.
    962 \VRef[Figure]{f:ExperimentOperations} shows the experiment operations tested, which results in 12 experiments for comparing intrusive implementations.
    963 To preclude hardware interference, only list sizes below 150 are examined to differentiate among the intrusive implementations,
     959The preceding result shows the intrusive implementations examined have better performance compared to wrapped lists for small to medium sized lists.
     960This analysis picks list sizes below 150 and zooms in to differentiate among the intrusive implementations.
    964961The data is selected from the start of \VRef[Figures]{f:Linear-swift}--\subref*{f:Linear-java}, but the start of \VRef[Figures]{f:Random-swift}--\subref*{f:Random-java} is largely the same.
    965 
    966 \begin{figure}
    967 \centering
    968 \setlength{\tabcolsep}{8pt}
    969 \begin{tabular}{@{}ll@{}}
    970 \begin{tabular}{@{}c|c|c@{}}
    971 movement & polarity & accessor \\
    972 \hline
    973 \hline
    974 stack &
    975         \begin{tabular}{@{}l@{}}
    976         insert-first \\
    977         \hline
    978         insert-last
    979         \end{tabular}
    980         &
    981         \begin{tabular}{@{}l@{}}
    982         insert-head / remove-head \\
    983         \hline
    984         insert-list / remove-head \\
    985         \hline
    986         insert-head / remove-list
    987         \end{tabular}
    988         \\
    989 \hline
    990 queue &
    991         \begin{tabular}{@{}l@{}}
    992         insert-first \\
    993         \hline
    994         insert-last
    995         \end{tabular}
    996         &
    997         \begin{tabular}{@{}l@{}}
    998         insert-head / remove-head \\
    999         \hline
    1000         insert-list / remove-head \\
    1001         \hline
    1002         insert-head / remove-list
    1003         \end{tabular}
    1004 \end{tabular}
    1005 &
    1006         \setlength{\tabcolsep}{3pt}
    1007         \small
    1008         \begin{tabular}{@{}ll@{}}
    1009         I:      & stack, insert first, I-head / R-head \\
    1010         II:     & stack, insert first, I-list / R-head \\
    1011         III:& stack, insert first, I-head / R-list \\
    1012         IV:     & stack, insert last, I-head / R-head \\
    1013         V:      & stack, insert last, I-list / R-head \\
    1014         VI:     & stack, insert last, I-head / R-list \\
    1015         VII:& queue, insert first, I-head / R-head \\
    1016         VIII:& queue, insert first, I-list / R-head \\
    1017         IX:     & queue, insert first, I-head / R-list \\
    1018         X:      &  queue, insert last, I-head / R-head \\
    1019         XI:     & queue, insert last, iI-list / R-head \\
    1020         XII:    & queue, insert last, I-head / R-list \\
    1021         \end{tabular}
    1022 \end{tabular}
    1023 \caption{Experiment Operations}
    1024 \label{f:ExperimentOperations}
    1025 \end{figure}
    1026 
    1027 \VRef[Figure]{fig:plot-list-1ord} gives the first-order effects.
    1028 Its first breakdown, Machine--Size-Zone, shows the effects of an insert/remove's physical situation.
    1029 The Intel runs faster than the AMD; the small zone runs faster than the medium zone.
    1030 The size effect is more pronounced on the AMD than it is on the Intel.
    1031 
    1032 \begin{figure}
    1033   \centering
    1034   \includegraphics{plot-list-1ord.pdf}
    1035   \caption{Histogram of operation durations, decomposed by all first-order effects.
    1036   Each of the three breakdowns divides the entire population of test results into its mutually disjoint constituents.
    1037   \MLB{missing: overlay of means}}
    1038   \label{fig:plot-list-1ord}
    1039 \end{figure}
    1040 
    1041 These facts stated, you will not be chosing between these particular mahines or whether to run at one of these specific size zones.
    1042 The key takeaway from the physical comparison is the context it establishes for interpreting the framework comparison following.
    1043 Both the particulars of a the machine's cache design, and a list length's effect on the program's cache friendliness, affect add/remove speed in the manner illlustrated in this breakdown.
    1044 Specifically, a 20\% standard deviation exists here, between the means four physical-effect categories.
    1045 That is, if you are running on an unknown machine, at a scale above anomaly-prone individuals, and below where major LLC caching effects take over the general intrusive-list advantage, but with an unknown relationship to the sizing of your fickle low-level caches, you are likely to experience an unpredictable speed impact on the order of 20\%.
    1046 
    1047 A similar situation comes from \VRef[Figure]{fig:plot-list-1ord}'s second comparison, by operation type.
    1048 Specific interactions like framework X doing better on stacks do occur; a selection of them is addressed in \MLB{TODO: cross reference}.
    1049 But they are so irrelevant to the issue of picking a winning framework that it is sufficient here to number the operations opaquely.
    1050 Whether a given list implementation is suitable for a language's general library succeeds or fails without knowledge of whether your use will have stack or queue movement.
    1051 So you face another lottery, with a likely win-loss range of the standard deviation of the individual operations' means: 9\%.
    1052 
    1053 This context helps interpret \VRef[Figure]{fig:plot-list-1ord}'s final comparison, by framework.
    1054 In this result, \CFA runs similarly to \uCpp and LQ-@list@ runs similarly to @tailq@.
    1055 The standard deviation of the frameworks' means is 8\%.
    1056 Framework choice has, therefore, less impact on your speed than the lottery tickets you already hold.
    1057 
    1058 Now, the LQs do indeed beat the UW languages by 15\%, a fact explored further in \MLB{TODO: xref}.
    1059 But so too does operation VIII typically beat operation IV by 38\%.
    1060 As does a small size on the Intel typically beat a medium size on the AMD by 66\%.
    1061 Framework choice is simply not where you stand to win or lose the most.
    1062 
    1063 \MLB{ TODO: find a home for these original conclusions:
    1064 cfa-upp similarity holde for all halves by movement or polarity;
    1065 splitting on accessor, \CFA has a poor result on element removal, LQ-list has a great result on the other accessors, and uC++ is unaffected. }
    1066 
    1067962
    1068963\begin{figure}
     
    11391034With this adjustment, absolute duration values (in nonsecods) are lost.
    11401035In return, the physical quadrants are re-combined, enabling assessment of the non-physical factors.
     1036
     1037\begin{figure}
     1038  \centering
     1039  \includegraphics{plot-list-1ord.pdf}
     1040  \caption{Histogram of operation durations, decomposed by all first-order effects.
     1041  Each of the three breakdowns divides the entire population of test results into its mutually disjoint constituents.
     1042  \MLB{missing: overlay of means}}
     1043  \label{fig:plot-list-1ord}
     1044\end{figure}
     1045
     1046\MLB{Peter, resume at full strength here.  This first-order comparison is the key takeaway from my recent analysis work.}
     1047
     1048\VRef[Figure]{fig:plot-list-1ord} gives the first-order effects.
     1049Its first breakdown, Machine--Size-Zone, shows the effects of an insert/remove's physical situation.
     1050The Intel runs faster than the AMD; the small zone runs faster than the medium zone.
     1051The size effect is more pronounced on the AMD than it is on the Intel.
     1052
     1053These facts stated, you will not be chosing between these particular mahines or whether to run at one of these specific size zones.
     1054The key takeaway from the physical comparison is the context it establishes for interpreting the framework comparison following.
     1055Both the particulars of a the machine's cache design, and a list length's effect on the program's cache friendliness, affect add/remove speed in the manner illlustrated in this breakdown.
     1056Specifically, a 20\% standard deviation exists here, between the means four physical-effect categories.
     1057That is, if you are running on an unknown machine, at a scale above anomaly-prone individuals, and below where major LLC caching effects take over the general intrusive-list advantage, but with an unknown relationship to the sizing of your fickle low-level caches, you are likely to experience an unpredictable speed impact on the order of 20\%.
     1058
     1059A similar situation comes from \VRef[Figure]{fig:plot-list-1ord}'s second comparison, by operation type.
     1060Specific interactions like framework X doing better on stacks do occur; a selection of them is addressed in \MLB{TODO: cross reference}.
     1061But they are so irrelevant to the issue of picking a winning framework that it is sufficient here to number the operations opaquely.
     1062Whether a given list implementation is suitable for a language's general library succeeds or fails without knowledge of whether your use will have stack or queue movement.
     1063So you face another lottery, with a likely win-loss range of the standard deviation of the individual operations' means: 9\%.
     1064
     1065This context helps interpret \VRef[Figure]{fig:plot-list-1ord}'s final comparison, by framework.
     1066In this result, \CFA runs similarly to \uCpp and LQ-@list@ runs similarly to @tailq@.
     1067The standard deviation of the frameworks' means is 8\%.
     1068Framework choice has, therefore, less impact on your speed than the lottery tickets you already hold.
     1069
     1070Now, the LQs do indeed beat the UW languages by 15\%, a fact explored further in \MLB{TODO: xref}.
     1071But so too does operation VIII typically beat operation IV by 38\%.
     1072As does a small size on the Intel typically beat a medium size on the AMD by 66\%.
     1073Framework choice is simply not where you stand to win or lose the most.
     1074
     1075\MLB{ TODO: find a home for these original conclusions:
     1076cfa-upp similarity holde for all halves by movement or polarity;
     1077splitting on accessor, \CFA has a poor result on element removal, LQ-list has a great result on the other accessors, and uC++ is unaffected. }
     1078
     1079
     1080\MLB{Peter, stop here.  Rest of the section is coming.}
    11411081
    11421082\begin{comment}
Note: See TracChangeset for help on using the changeset viewer.