@@ -13,7 +13,7 @@ import HhiReducer
1313import Control.Monad.Fix ( fix )
1414import BenchmarkSources
1515import MicroHsExp ( toMhsPrg )
16- import MicroHs. MhsEval
16+ import MhsEval
1717
1818loadTestCase :: SourceCode -> IO CL
1919loadTestCase src = do
@@ -69,12 +69,10 @@ reducerTest expr = show $ transLink primitives expr
6969reducerTestLog :: CL -> String
7070reducerTestLog expr = show $ transLinkLog primitives expr
7171
72- microHsTest :: MhsContext -> CL -> IO String
73- microHsTest ctx expr = do
74- let prg = toMhsPrg expr
75- result <- eval ctx prg
76- return result
72+ microHsTest :: MhsContext -> String -> IO ()
73+ microHsTest ctx prg = run ctx prg
7774
75+
7876benchmarks :: IO ()
7977benchmarks = do
8078 fac <- loadTestCase factorial
@@ -104,6 +102,15 @@ benchmarks = do
104102 takBulkLog <- loadTestCaseBreakBulkLog BenchmarkSources. tak
105103
106104 mhsContext <- createMhsContext
105+ let mhsFacEta = toMhsPrg facEta
106+ mhsTakEta = toMhsPrg takEta
107+ mhsFibEta = toMhsPrg fibEta
108+ mhsAckEta = toMhsPrg akkEta
109+
110+ print facEta
111+ print takEta
112+ print fibEta
113+ print akkEta
107114
108115 -- sanity checks
109116 print $ graphTest fac
@@ -114,44 +121,46 @@ benchmarks = do
114121 print $ reducerTestLog facBulk
115122 print $ show $ fact 10
116123 do
117- microHsResult <- microHsTest mhsContext facEta
124+ microHsResult <- microHsTest mhsContext mhsFacEta
118125 print microHsResult
119126
120127 defaultMain [
121- bench " factorial Graph-Reduce" $ nf graphTest fac
122- , bench " factorial Graph-Reduce-Eta" $ nf graphTest facEta
128+ -- bench "factorial Graph-Reduce" $ nf graphTest fac
129+ -- , bench "factorial Graph-Reduce-Eta" $ nf graphTest facEta
123130 -- , bench "factorial Graph-Reduce-Lin" $ nf graphTest facBulkLinear
124131 -- , bench "factorial Graph-Reduce-Log" $ nf graphTest facBulkLog
125132 -- , bench "factorial HHI-Reduce" $ nf reducerTest fac
126- , bench " factorial HHI-Eta" $ nf reducerTest facEta
133+ bench " factorial HHI-Eta" $ nf reducerTest facEta
127134 -- , bench "factorial HHI-Bulk" $ nf reducerTest facBulk
128135 -- , bench "factorial HHI-Bulk-Log" $ nf reducerTestLog facBulk
129136 -- , bench "factorial HHI-Break-Bulk" $ nf reducerTest facBulkLinear
130137 -- , bench "factorial HHI-Break-Log" $ nf reducerTestLog facBulkLog
131- , bench " factorial MicroHs" $ nfIO (microHsTest mhsContext facEta )
138+ , bench " factorial MicroHs" $ nfIO (microHsTest mhsContext mhsFacEta )
132139 , bench " factorial Native" $ nf fact 10
133- -- , bench "fibonacci Graph-Reduce" $ nf graphTest fib
134- -- , bench "fibonacci Graph-Reduce-Eta" $ nf graphTest fibEta
135- -- , bench "fibonacci Graph-Reduce-Lin" $ nf graphTest fibBulkLinear
136- -- , bench "fibonacci Graph-Reduce-Log" $ nf graphTest fibBulkLog
137- -- , bench "fibonacci HHI-Reduce" $ nf reducerTest fib
138- -- , bench "fibonacci HHI-Eta" $ nf reducerTest fibEta
140+ -- bench "fibonacci Graph-Reduce" $ nf graphTest fib
141+ -- , bench "fibonacci Graph-Reduce-Eta" $ nf graphTest fibEta
142+ -- , bench "fibonacci Graph-Reduce-Lin" $ nf graphTest fibBulkLinear
143+ -- , bench "fibonacci Graph-Reduce-Log" $ nf graphTest fibBulkLog
144+ -- , bench "fibonacci HHI-Reduce" $ nf reducerTest fib
145+ , bench " fibonacci HHI-Eta" $ nf reducerTest fibEta
139146 -- , bench "fibonacci HHi-Bulk" $ nf reducerTest fibBulk
140147 -- , bench "fibonacci HHI-Bulk-Log" $ nf reducerTestLog fibBulk
141148 -- , bench "fibonacci HHI-Break-Bulk" $ nf reducerTest fibBulkLinear
142149 -- , bench "fibonacci HHI-Break-Log" $ nf reducerTestLog fibBulkLog
143- -- , bench "fibonacci Native" $ nf fibo 10
150+ , bench " fibonacci MicroHs" $ nfIO (microHsTest mhsContext mhsFibEta)
151+ , bench " fibonacci Native" $ nf fibo 37
144152 -- , bench "ackermann Graph-Reduce" $ nf graphTest akk
145- -- , bench "ackermann Graph-Reduce-Eta" $ nf graphTest akkEta
153+ -- , bench "ackermann Graph-Reduce-Eta" $ nf graphTest akkEta
146154 -- , bench "ackermann Graph-Reduce-Lin" $ nf graphTest akkBulkLinear
147155 -- , bench "ackermann Graph-Reduce-Log" $ nf graphTest akkBulkLog
148- -- , bench "ackermann HHI-Reduce" $ nf reducerTest akk
156+ , bench " ackermann HHI-Reduce" $ nf reducerTest akkEta
149157 -- , bench "ackermann HHI-Eta" $ nf reducerTest akkEta
150158 -- , bench "ackermann HHI-Bulk" $ nf reducerTest akkBulk
151159 -- , bench "ackermann HHI-Bulk-Log" $ nf reducerTestLog akkBulk
152160 -- , bench "ackermann HHI-Break-Bulk" $ nf reducerTest akkBulkLinear
153161 -- , bench "ackermann HHI-Break-Log" $ nf reducerTestLog akkBulkLog
154- -- , bench "ackermann Native" $ nf ack_2 2
162+ , bench " ackermann MicroHs" $ nfIO (microHsTest mhsContext mhsAckEta)
163+ , bench " ackermann Native" $ nf ack_3 9
155164 -- -- , bench "gaussian Graph-Reduce" $ nf graphTest gau
156165 -- -- , bench "gaussian Graph-Reduce-Eta" $ nf graphTest gauEta
157166 -- -- , bench "gaussian HHI-Reduce" $ nf reducerTest gau
@@ -160,7 +169,7 @@ benchmarks = do
160169 -- -- , bench "gaussian HHI-Bulk-Log" $ nf reducerTestLog gauBulk
161170 -- -- , bench "gaussian Native" $ nf gaussianSum 100
162171 -- , bench "tak Graph-Reduce" $ nf graphTest tak
163- , bench " tak Graph-Reduce-Eta" $ nf graphTest takEta
172+ -- , bench "tak Graph-Reduce-Eta" $ nf graphTest takEta
164173 -- , bench "tak Graph-Reduce-Lin" $ nf graphTest takBulkLinear
165174 -- , bench "tak Graph-Reduce-Log" $ nf graphTest takBulkLog
166175 -- , bench "tak HHI-Reduce" $ nf reducerTest tak
@@ -169,37 +178,42 @@ benchmarks = do
169178 -- , bench "tak HHI-Bulk-Log" $ nf reducerTestLog takBulk
170179 -- , bench "tak HHI-Break-Bulk" $ nf reducerTest takBulkLinear
171180 -- , bench "tak HHI-Break-Log" $ nf reducerTestLog takBulkLog
172- , bench " tak MicroHs" $ nfIO (microHsTest mhsContext takEta )
173- , bench " tak Native" $ nf tak1 (7 , 4 , 2 )
181+ , bench " tak MicroHs" $ nfIO (run mhsContext mhsTakEta )
182+ , bench " tak Native" $ nf tak1 (18 , 6 , 3 )
174183 ]
184+ closeMhsContext mhsContext
185+ putStrLn " Benchmarks completed."
175186 return ()
176187
177188
178- fact :: Integer -> Integer
189+ fact :: Int -> Int
179190fact = fix (\ f n -> if n == 0 then 1 else n * f (n- 1 ))
180191
181- fibo :: Integer -> Integer
182- fibo = fix (\ f n -> if n == 0 || n = = 1 then 1 else f (n- 1 ) + f (n - 2 ))
192+ fibo :: Int -> Int
193+ fibo = fix (\ f n -> if n < = 1 then 1 else f (n- 1 ) + f (n - 2 ))
183194
184- ack_2 :: Integer -> Integer
195+ ack_2 :: Int -> Int
185196ack_2 = ack 2
186197
187- ack :: Integer -> Integer -> Integer
198+ ack_3 :: Int -> Int
199+ ack_3 = ack 3
200+
201+ ack :: Int -> Int -> Int
188202ack = fix (\ f n m ->
189203 if n == 0
190204 then m + 1
191205 else (if m == 0
192206 then f (n- 1 ) 1
193207 else f (n- 1 ) (f n (m- 1 ))))
194208
195- gaussianSum :: Integer -> Integer
209+ gaussianSum :: Int -> Int
196210gaussianSum = fix (\ f n -> if n == 0 then 0 else n + f (n- 1 ))
197211
198212
199- tak_18_6 :: Integer -> Integer
213+ tak_18_6 :: Int -> Int
200214tak_18_6 = takN 18 6
201215
202- takN :: Integer -> Integer -> Integer -> Integer
216+ takN :: Int -> Int -> Int -> Int
203217takN = fix (\ f x y z -> (if y >= x then z else f (f (x- 1 ) y z) (f (y- 1 ) z x) (f (z- 1 ) x y )))
204218
205219tak1 (x,y,z) = takN x y z
0 commit comments