Skip to content
Snippets Groups Projects
Commit bc456b15 authored by bos's avatar bos
Browse files

Benchmark the various checked multiplication methods

Progress towards gh-81.

--HG--
extra : rebase_source : 0559da50e2b5d43f46e4c4baa9f4b5457e8781da
extra : amend_source : 1c20c33aa19bece776361953371efc46d0ec236e
extra : histedit_source : a7aba7dd23ae5f886fd41e3f0856da129165c878
parent 7724166d
No related branches found
No related tags found
No related merge requests found
......@@ -15,6 +15,7 @@ import qualified Benchmarks.EncodeUtf8 as EncodeUtf8
import qualified Benchmarks.Equality as Equality
import qualified Benchmarks.FileRead as FileRead
import qualified Benchmarks.FoldLines as FoldLines
import qualified Benchmarks.Mul as Mul
import qualified Benchmarks.Pure as Pure
import qualified Benchmarks.ReadNumbers as ReadNumbers
import qualified Benchmarks.Replace as Replace
......@@ -49,6 +50,7 @@ benchmarks = do
, Equality.benchmark (tf "japanese.txt")
, FileRead.benchmark (tf "russian.txt")
, FoldLines.benchmark (tf "russian.txt")
, Mul.benchmark
, Pure.benchmark "tiny" (tf "tiny.txt")
, Pure.benchmark "ascii" (tf "ascii-small.txt")
, Pure.benchmark "france" (tf "france.html")
......
module Benchmarks.Mul (benchmark) where
import Control.Exception (evaluate)
import Criterion.Main
import Data.Int (Int32, Int64)
import Data.Text.Internal (mul32, mul64)
import qualified Data.Vector.Unboxed as U
oldMul :: Int64 -> Int64 -> Int64
oldMul m n
| n == 0 = 0
| m <= maxBound `quot` n = m * n
| otherwise = error "overflow"
benchmark :: IO Benchmark
benchmark = do
_ <- evaluate testVector32
_ <- evaluate testVector64
return $ bgroup "Mul" [
bench "oldMul" $ whnf (U.map (uncurry oldMul)) testVector64
, bench "mul64" $ whnf (U.map (uncurry mul64)) testVector64
, bench "*64" $ whnf (U.map (uncurry (*))) testVector64
, bench "mul32" $ whnf (U.map (uncurry mul32)) testVector32
, bench "*32" $ whnf (U.map (uncurry (*))) testVector32
]
testVector64 :: U.Vector (Int64,Int64)
testVector64 = U.fromList [
(0,1248868987182846646),(169004623633872,24458),(482549039517835,7614),
(372,8157063115504364),(27,107095594861148252),(3,63249878517962420),
(4363,255694473572912),(86678474,1732634806),(1572453024,1800489338),
(9384523143,77053781),(49024709555,75095046),(7,43457620410239131),
(8,8201563008844571),(387719037,1520696708),(189869238220197,1423),
(46788016849611,23063),(503077742109974359,0),(104,1502010908706487),
(30478140346,207525518),(80961140129236192,14),(4283,368012829143675),
(1028719181728108146,6),(318904,5874863049591),(56724427166898,110794),
(234539368,31369110449),(2,251729663598178612),(103291548194451219,5),
(76013,5345328755566),(1769631,2980846129318),(40898,60598477385754),
(0,98931348893227155),(573555872156917492,3),(318821187115,4476566),
(11152874213584,243582),(40274276,16636653248),(127,4249988676030597),
(103543712111871836,5),(71,16954462148248238),(3963027173504,216570),
(13000,503523808916753),(17038308,20018685905),(0,510350226577891549),
(175898,3875698895405),(425299191292676,5651),(17223451323664536,50),
(61755131,14247665326),(0,1018195131697569303),(36433751497238985,20),
(3473607861601050,1837),(1392342328,1733971838),(225770297367,3249655),
(14,127545244155254102),(1751488975299136,2634),(3949208,504190668767),
(153329,831454434345),(1066212122928663658,2),(351224,2663633539556),
(344565,53388869217),(35825609350446863,54),(276011553660081475,10),
(1969754174790470349,3),(35,68088438338633),(506710,3247689556438),
(11099382291,327739909),(105787303549,32824363),(210366111,14759049409),
(688893241579,3102676),(8490,70047474429581),(152085,29923000251880),
(5046974599257095,400),(4183167795,263434071),(10089728,502781960687),
(44831977765,4725378),(91,8978094664238578),(30990165721,44053350),
(1772377,149651820860),(243420621763408572,4),(32,5790357453815138),
(27980806337993771,5),(47696295759774,20848),(1745874142313778,1098),
(46869334770121,1203),(886995283,1564424789),(40679396544,76002479),
(1,672849481568486995),(337656187205,3157069),(816980552858963,6003),
(2271434085804831543,1),(0,1934521023868747186),(6266220038281,15825),
(4160,107115946987394),(524,246808621791561),(0,1952519482439636339),
(128,2865935904539691),(1044,3211982069426297),(16000511542473,88922),
(1253596745404082,2226),(27041,56836278958002),(23201,49247489754471),
(175906590497,21252392),(185163584757182295,24),(34742225226802197,150),
(2363228,250824838408),(216327527109550,45),(24,81574076994520675),
(28559899906542,15356),(10890139774837133,511),(2293,707179303654492),
(2749366833,40703233),(0,4498229704622845986),(439,4962056468281937),
(662,1453820621089921),(16336770612459631,220),(24282989393,74239137),
(2724564648490195,3),(743672760,124992589),(4528103,704330948891),
(6050483122491561,250),(13322953,13594265152),(181794,22268101450214),
(25957941712,75384092),(43352,7322262295009),(32838,52609059549923),
(33003585202001564,2),(103019,68430142267402),(129918230800,8742978),
(0,2114347379589080688),(2548,905723041545274),(222745067962838382,0),
(1671683850790425181,1),(455,4836932776795684),(794227702827214,6620),
(212534135175874,1365),(96432431858,29784975),(466626763743380,3484),
(29793949,53041519613),(8359,309952753409844),(3908960585331901,26),
(45185288970365760,114),(10131829775,68110174),(58039242399640479,83),
(628092278238719399,6),(1,196469106875361889),(302336625,16347502444),
(148,3748088684181047),(1,1649096568849015456),(1019866864,2349753026),
(8211344830,569363306),(65647579546873,34753),(2340190,1692053129069),
(64263301,30758930355),(48681618072372209,110),(7074794736,47640197),
(249634721521,7991792),(1162917363807215,232),(7446433349,420634045),
(63398619383,60709817),(51359004508011,14200),(131788797028647,7072),
(52079887791430043,7),(7,136277667582599838),(28582879735696,50327),
(1404582800566278,833),(469164435,15017166943),(99567079957578263,49),
(1015285971,3625801566),(321504843,4104079293),(5196954,464515406632),
(114246832260876,7468),(8149664437,487119673),(12265299,378168974869),
(37711995764,30766513),(3971137243,710996152),(483120070302,603162),
(103009942,61645547145),(8476344625340,6987),(547948761229739,1446),
(42234,18624767306301),(13486714173011,58948),(4,198309153268019840),
(9913176974,325539248),(28246225540203,116822),(2882463945582154,18),
(959,25504987505398),(3,1504372236378217710),(13505229956793,374987),
(751661959,457611342),(27375926,36219151769),(482168869,5301952074),
(1,1577425863241520640),(714116235611821,1164),(904492524250310488,0),
(5983514941763398,68),(10759472423,23540686),(72539568471529,34919),
(4,176090672310337473),(938702842110356453,1),(673652445,3335287382),
(3111998893666122,917),(1568013,3168419765469)]
testVector32 :: U.Vector (Int32,Int32)
testVector32 = U.fromList [
(39242,410),(0,100077553),(2206,9538),(509400240,1),(38048,6368),
(1789,651480),(2399,157032),(701,170017),(5241456,14),(11212,70449),
(1,227804876),(749687254,1),(74559,2954),(1158,147957),(410604456,1),
(170851,1561),(92643422,1),(6192,180509),(7,24202210),(3440,241481),
(5753677,5),(294327,1622),(252,4454673),(127684121,11),(28315800,30),
(340370905,0),(1,667887987),(592782090,1),(49023,27641),(750,290387),
(72886,3847),(0,301047933),(3050276,473),(1,788366142),(59457,15813),
(637726933,1),(1135,344317),(853616,264),(696816,493),(7038,12046),
(125219574,4),(803694088,1),(107081726,1),(39294,21699),(16361,38191),
(132561123,12),(1760,23499),(847543,484),(175687349,1),(2963,252678),
(6248,224553),(27596,4606),(5422922,121),(1542,485890),(131,583035),
(59096,4925),(3637115,132),(0,947225435),(86854,6794),(2984745,339),
(760129569,1),(1,68260595),(380835652,2),(430575,2579),(54514,7211),
(15550606,3),(9,27367402),(3007053,207),(7060988,60),(28560,27130),
(1355,21087),(10880,53059),(14563646,4),(461886361,1),(2,169260724),
(241454126,2),(406797,1),(61631630,16),(44473,5943),(63869104,12),
(950300,1528),(2113,62333),(120817,9358),(100261456,1),(426764723,1),
(119,12723684),(3,53358711),(4448071,18),(1,230278091),(238,232102),
(8,57316440),(42437979,10),(6769,19555),(48590,22006),(11500585,79),
(2808,97638),(42,26952545),(11,32104194),(23954638,1),(785427272,0),
(513,81379),(31333960,37),(897772,1009),(4,25679692),(103027993,12),
(104972702,11),(546,443401),(7,65137092),(88574269,3),(872139069,0),
(2,97417121),(378802603,0),(141071401,4),(22613,10575),(2191743,118),
(470,116119),(7062,38166),(231056,1847),(43901963,9),(2400,70640),
(63553,1555),(34,11249573),(815174,1820),(997894011,0),(98881794,2),
(5448,43132),(27956,9),(904926,1357),(112608626,3),(124,613021),
(282086,1966),(99,10656881),(113799,1501),(433318,2085),(442,948171),
(165380,1043),(28,14372905),(14880,50462),(2386,219918),(229,1797565),
(1174961,298),(3925,41833),(3903515,299),(15690452,111),(360860521,3),
(7440846,81),(2541026,507),(0,492448477),(6869,82469),(245,8322939),
(3503496,253),(123495298,0),(150963,2299),(33,4408482),(1,200911107),
(305,252121),(13,123369189),(215846,8181),(2440,65387),(776764401,1),
(1241172,434),(8,15493155),(81953961,6),(17884993,5),(26,6893822),
(0,502035190),(1,582451018),(2,514870139),(227,3625619),(49,12720258),
(1456769,207),(94797661,10),(234407,893),(26843,5783),(15688,24547),
(4091,86268),(4339448,151),(21360,6294),(397046497,2),(1227,205936),
(9966,21959),(160046791,1),(0,159992224),(27,24974797),(19177,29334),
(4136148,42),(21179785,53),(61256583,31),(385,344176),(7,11934915),
(1,18992566),(3488065,5),(768021,224),(36288474,7),(8624,117561),
(8,20341439),(5903,261475),(561,1007618),(1738,392327),(633049,1708)]
......@@ -43,7 +43,8 @@ executable text-benchmarks
ghc-prim,
integer-gmp,
stringsearch,
utf8-string
utf8-string,
vector
executable text-multilang
hs-source-dirs: haskell
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment