Skip to content

Commit 353a9ec

Browse files
committed
showing first figures
1 parent 4c5e743 commit 353a9ec

File tree

4 files changed

+383
-8
lines changed

4 files changed

+383
-8
lines changed

app/Main.hs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@ fibonacci = [r|
6868
main = fib 10
6969
|]
7070

71+
72+
-- data CL = Com Combinator | INT Integer | CL :@ CL
73+
codeSize :: CL -> Int
74+
codeSize (Com _) = 1
75+
codeSize (INT _) = 0
76+
codeSize (t :@ u) = codeSize t + codeSize u
77+
7178
showCompilations :: SourceCode -> IO ()
7279
showCompilations source = do
7380
let env = parseEnvironment source
@@ -80,36 +87,43 @@ showCompilations source = do
8087
let expr = compileBracket env
8188
putStrLn "The main expression compiled to SICKBY combinator expressions by recursice bracket abstraction:"
8289
print expr
90+
print $ codeSize expr
8391
putStrLn ""
8492

8593
putStrLn "applying plain Kiselyov compilation:"
8694
print $ compilePlain env
95+
print $ codeSize $ compilePlain env
8796
putStrLn ""
8897

8998
let exprK = compileK env
9099
putStrLn "The main expression compiled to SICKBY combinator expressions with K-optimization:"
91100
print exprK
101+
print $ codeSize exprK
92102
putStrLn ""
93103

94104

95105
let expr' = compileEta env
96106
putStrLn "The main expression compiled to SICKBY combinator expressions with Eta-optimization:"
97107
print expr'
108+
print $ codeSize expr'
98109
putStrLn ""
99110

100111
let expr'' = compileBulk env
101112
putStrLn "The main expression compiled to SICKBY combinator expressions with bulk combinators:"
102113
print expr''
114+
print $ codeSize expr''
103115
putStrLn ""
104116

105117
let expr''' = compileBulkLinear env
106118
putStrLn "The main expression compiled to SICKBY combinator expressions with bulk combinators and linear elimination:"
107119
print expr'''
120+
print $ codeSize expr'''
108121
putStrLn ""
109122

110123
let expr'''' = compileBulkLog env
111124
putStrLn "The main expression compiled to SICKBY combinator expressions with bulk combinators and logarithmic elimination:"
112125
print expr''''
126+
print $ codeSize expr''''
113127
putStrLn ""
114128

115129

benchmark/ReductionBenchmarks.hs

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Criterion.Main ( defaultMain, bench, nf )
44
import Parser ( parseEnvironment, Expr(Int, App) )
55
import LambdaToSKI ( compileBracket )
66
import CLTerm
7-
import Kiselyov ( compileBulk, compileEta )
7+
import Kiselyov
88
import GraphReduction ( allocate, normalForm, toString, Graph )
99
import Data.Maybe (fromJust)
1010
import Data.STRef ( STRef )
@@ -25,6 +25,18 @@ loadTestCaseBulk src = do
2525
expr = compileBulk pEnv
2626
return expr
2727

28+
loadTestCaseBreakBulkLinear :: SourceCode -> IO CL
29+
loadTestCaseBreakBulkLinear src = do
30+
let pEnv = parseEnvironment src
31+
expr = compileBulkLinear pEnv
32+
return expr
33+
34+
loadTestCaseBreakBulkLog :: SourceCode -> IO CL
35+
loadTestCaseBreakBulkLog src = do
36+
let pEnv = parseEnvironment src
37+
expr = compileBulkLog pEnv
38+
return expr
39+
2840
loadTestCaseEta :: SourceCode -> IO CL
2941
loadTestCaseEta src = do
3042
let pEnv = parseEnvironment src
@@ -72,6 +84,19 @@ benchmarks = do
7284
akkBulk <- loadTestCaseBulk ackermann
7385
gauBulk <- loadTestCaseBulk gaussian
7486
takBulk <- loadTestCaseBulk BenchmarkSources.tak
87+
facBulkLinear <- loadTestCaseBreakBulkLinear factorial
88+
fibBulkLinear <- loadTestCaseBreakBulkLinear fibonacci
89+
akkBulkLinear <- loadTestCaseBreakBulkLinear ackermann
90+
gauBulkLinear <- loadTestCaseBreakBulkLinear gaussian
91+
takBulkLinear <- loadTestCaseBreakBulkLinear BenchmarkSources.tak
92+
facBulkLog <- loadTestCaseBreakBulkLog factorial
93+
fibBulkLog <- loadTestCaseBreakBulkLog fibonacci
94+
akkBulkLog <- loadTestCaseBreakBulkLog ackermann
95+
gauBulkLog <- loadTestCaseBreakBulkLog gaussian
96+
takBulkLog <- loadTestCaseBreakBulkLog BenchmarkSources.tak
97+
98+
99+
75100

76101
-- sanity checks
77102
print $ graphTest fac
@@ -84,25 +109,37 @@ benchmarks = do
84109

85110
defaultMain [
86111
bench "factorial Graph-Reduce" $ nf graphTest fac
87-
, bench "factorial Graph-Reduce-Eta" $ nf graphTest facEta
112+
, bench "factorial Graph-Reduce-Eta" $ nf graphTest facEta
113+
, bench "factorial Graph-Reduce-Lin" $ nf graphTest facBulkLinear
114+
, bench "factorial Graph-Reduce-Log" $ nf graphTest facBulkLog
88115
, bench "factorial HHI-Reduce" $ nf reducerTest fac
89116
, bench "factorial HHI-Eta" $ nf reducerTest facEta
90117
, bench "factorial HHI-Bulk" $ nf reducerTest facBulk
91118
, bench "factorial HHI-Bulk-Log" $ nf reducerTestLog facBulk
119+
, bench "factorial HHI-Break-Bulk" $ nf reducerTest facBulkLinear
120+
, bench "factorial HHI-Break-Log" $ nf reducerTestLog facBulkLog
92121
, bench "factorial Native" $ nf fact 100
93122
, bench "fibonacci Graph-Reduce" $ nf graphTest fib
94123
, bench "fibonacci Graph-Reduce-Eta" $ nf graphTest fibEta
124+
, bench "fibonacci Graph-Reduce-Lin" $ nf graphTest fibBulkLinear
125+
, bench "fibonacci Graph-Reduce-Log" $ nf graphTest fibBulkLog
95126
, bench "fibonacci HHI-Reduce" $ nf reducerTest fib
96127
, bench "fibonacci HHI-Eta" $ nf reducerTest fibEta
97128
, bench "fibonacci HHi-Bulk" $ nf reducerTest fibBulk
98129
, bench "fibonacci HHI-Bulk-Log" $ nf reducerTestLog fibBulk
130+
, bench "fibonacci HHI-Break-Bulk" $ nf reducerTest fibBulkLinear
131+
, bench "fibonacci HHI-Break-Log" $ nf reducerTestLog fibBulkLog
99132
, bench "fibonacci Native" $ nf fibo 10
100133
, bench "ackermann Graph-Reduce" $ nf graphTest akk
101134
, bench "ackermann Graph-Reduce-Eta" $ nf graphTest akkEta
135+
, bench "ackermann Graph-Reduce-Lin" $ nf graphTest akkBulkLinear
136+
, bench "ackermann Graph-Reduce-Log" $ nf graphTest akkBulkLog
102137
, bench "ackermann HHI-Reduce" $ nf reducerTest akk
103138
, bench "ackermann HHI-Eta" $ nf reducerTest akkEta
104139
, bench "ackermann HHI-Bulk" $ nf reducerTest akkBulk
105140
, bench "ackermann HHI-Bulk-Log" $ nf reducerTestLog akkBulk
141+
, bench "ackermann HHI-Break-Bulk" $ nf reducerTest akkBulkLinear
142+
, bench "ackermann HHI-Break-Log" $ nf reducerTestLog akkBulkLog
106143
, bench "ackermann Native" $ nf ack_2 2
107144
-- , bench "gaussian Graph-Reduce" $ nf graphTest gau
108145
-- , bench "gaussian Graph-Reduce-Eta" $ nf graphTest gauEta
@@ -113,10 +150,14 @@ benchmarks = do
113150
-- , bench "gaussian Native" $ nf gaussianSum 100
114151
, bench "tak Graph-Reduce" $ nf graphTest tak
115152
, bench "tak Graph-Reduce-Eta" $ nf graphTest takEta
153+
, bench "tak Graph-Reduce-Lin" $ nf graphTest takBulkLinear
154+
, bench "tak Graph-Reduce-Log" $ nf graphTest takBulkLog
116155
, bench "tak HHI-Reduce" $ nf reducerTest tak
117156
, bench "tak HHI-Eta" $ nf reducerTest takEta
118157
, bench "tak HHI-Bulk" $ nf reducerTest takBulk
119158
, bench "tak HHI-Bulk-Log" $ nf reducerTestLog takBulk
159+
, bench "tak HHI-Break-Bulk" $ nf reducerTest takBulkLinear
160+
, bench "tak HHI-Break-Log" $ nf reducerTestLog takBulkLog
120161
, bench "tak Native" $ nf tak1 (7,4,2)
121162
]
122163
return ()

0 commit comments

Comments
 (0)