Changes in / [4570131:e3de500]
- Location:
- doc/generic_types
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/generic_types/evaluation/timing.gp
r4570131 re3de500 12 12 set boxwidth 0.8 13 13 14 set ylabel "milliseconds" 14 15 set key top left reverse Left 15 16 … … 20 21 set linetype 4 lc rgb 'green' 21 22 22 set ylabel "milli-seconds"23 set yrange [0:*] ;24 25 23 set datafile separator "," 26 24 plot for [COL=2:5] 'evaluation/timing.csv' using COL:xticlabels(1) title columnheader -
doc/generic_types/generic_types.tex
r4570131 re3de500 954 954 Since all these languages share a subset comprising most of standard C, maximal-performance benchmarks would show little runtime variance, other than in length and clarity of source code. 955 955 Instead, the presented benchmarks show the costs of idiomatic use of each language's features to examine common usage. 956 Figure~\ref{fig:MicroBenchmark} shows the \CFA benchmark tests for a generic stack based on a singly linked-list, a generic pair-data-structure, and a variadic @print@ routine similar to that in Section~\ref{sec:variadic-tuples}. 957 The tests are similar for C and \CC. 958 The first two experiments use element types @int@ and @pair( _Bool, char)@, and push $N=40M$ elements on a generic stack, copy the stack, clear one of the stacks, and find the maximum value in the other stack. 959 The last experiment creates a file and prints $N=40M$ elements of type @int@ and @pair( _Bool, char)@ using a variadic print. 960 956 The benchmarks test a generic stack based on a singly linked-list, a generic pair-data-structure, and a variadic @print@ routine similar to that in Section~\ref{sec:variadic-tuples}. 961 957 The structure of each implemented is: C with @void *@-based polymorphism, \CFA with the different presented features, \CC with templates, and \CC using only class inheritance for polymorphism, called \CCV. 962 958 The \CCV variant illustrates an alternative object-oriented idiom where all objects inherit from a base @object@ class, mimicking a Java-like interface; 963 959 hence runtime checks are necessary to safely down-cast objects. 964 The most notable difference among the implementations is in optimizations: \CFA and \CC inline the stack and pair elements into corresponding list and pair nodes, while the C and \CCV lack generic-type capability {\color{red}(AWKWARD) to store generic objects via pointers to separately-allocated objects}.965 For the print benchmark, idiomatic printing is used: the C and \CFA variants use d @cstdio.h@, while the \CC and \CCV variants used@iostream@.966 Preliminary tests show th edifference has little runtime effect.960 The most notable difference among the implementations is in memory layout of generic types: \CFA and \CC inline the stack and pair elements into corresponding list and pair nodes, while C and \CCV lack such a capability and store generic objects via pointers to separately-allocated objects instead. 961 For the print benchmark, idiomatic printing is used: the C and \CFA variants use @stdio.h@, while the \CC and \CCV variants use @iostream@. 962 Preliminary tests show this difference has little runtime effect. 967 963 Finally, the C @rand@ function is used generate random numbers. 968 969 \begin{figure}970 \begin{lstlisting}[xleftmargin=3\parindentlnth,aboveskip=0pt,belowskip=0pt,numbers=left,numberstyle=\tt\small,numberblanklines=false]971 int main( int argc, char *argv[] ) {972 int max = 0;973 stack(int) s, t;974 REPEAT_TIMED( "push_int", push( &s, 42 ); )975 TIMED( "copy_int", t = s; )976 TIMED( "clear_int", clear( &s ); )977 REPEAT_TIMED( "pop_int", max = max( max, pop( &t ) ); )978 979 stack(pair(_Bool, char)) s1, t1;980 pair(_Bool, char) max = { (_Bool)0, '\0' };981 REPEAT_TIMED( "push_pair", push( &s1, (pair(_Bool, char)){ (_Bool)0, 'a' } ); )982 TIMED( "copy_pair", t1 = s1; )983 TIMED( "clear_pair", clear( &s1 ); )984 REPEAT_TIMED( "pop_pair", max = max( max, pop( &t1 ) ); )985 986 FILE * out = fopen( "cfa-out.txt", "w" );987 REPEAT_TIMED( "print_int", print( out, 42, ":", 42, "\n" ); )988 REPEAT_TIMED( "print_pair", print( out, (pair(_Bool, char)){ (_Bool)0, 'a' }, ":",989 (pair(_Bool, char)){ (_Bool)0, 'a' }, "\n" ); )990 fclose(out);991 }992 \end{lstlisting}993 \caption{Micro-Benchmark}994 \label{fig:MicroBenchmark}995 \end{figure}996 964 997 965 \begin{figure} … … 1007 975 \newcommand{\CT}[1]{\multicolumn{1}{c}{#1}} 1008 976 \begin{tabular}{r|rrrr} 1009 & \CT{C} & \CT{\CFA} & \CT{\CC} & \CT{\CCV} \\ \hline1010 maximum memory usage (MB) & 10001 & 2501 & 2503 & 11253 \\1011 source code size (lines) & 301 & 224 & 188 & 437 \\977 & \CT{C} & \CT{\CFA} & \CT{\CC} & \CT{\CCV} \\ \hline 978 maximum memory usage (MB) & 10001 & 2501 & 2503 & 11253 \\ 979 source code size (lines) & 301 & 224 & 188 & 437 \\ 1012 980 redundant type annotations (lines) & 46 & 3 & 2 & 15 \\ 1013 binary size (KB) & 18 & 234 & 18 & 42 \\981 binary size (KB) & 18 & 234 & 18 & 42 \\ 1014 982 \end{tabular} 1015 983 \end{table} … … 1083 1051 SETL~\cite{SETL} is a high-level mathematical programming language, with tuples being one of the primary data types. 1084 1052 Tuples in SETL allow subscripting, dynamic expansion, and multiple assignment. 1085 C provides variadic functions through @va_list@ objects, but the programmer is responsible for managing the number of arguments and their types , so the mechanism is not type-safe.1053 C provides variadic functions through @va_list@ objects, but the programmer is responsible for managing the number of arguments and their types. 1086 1054 KW-C~\cite{Buhr94a}, a predecessor of \CFA, introduced tuples to C as an extension of the C syntax, taking much of its inspiration from SETL. 1087 1055 The main contributions of that work were adding MRVF, tuple mass and multiple assignment, and record-field access. … … 1119 1087 1120 1088 1089 \appendix 1090 1091 \section{BenchMarks} 1092 \label{sec:BenchMarks} 1093 1094 TODO 1095 1096 1121 1097 \bibliographystyle{ACM-Reference-Format} 1122 1098 \bibliography{cfa} 1123 1124 1125 \appendix1126 1127 1128 \section{BenchMarks}1129 \label{sec:BenchMarks}1130 1131 TODO1132 1099 1133 1100 \end{document}
Note: See TracChangeset
for help on using the changeset viewer.