...
  View open merge request
Commits (93)
......@@ -10,6 +10,8 @@ perf.data
perf.data.*
dist-newstyle/
.ghc.environment.*
_make
tags
# Specific generated files
nofib-analyse/nofib-analyse
......
# Commit taken from https://gitlab.haskell.org/ghc/ci-images
variables:
DOCKER_REV: 2b69e99de97bd5bf1fbdbf45852231c3dcb602b6
DOCKER_REV: 769e7fbb291427fb70c19fad4f98bb976cdc4c91
validate:
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb9:$DOCKER_REV"
validate-hadrian:
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV"
tags:
- x86_64-linux
before_script:
- git clean -xdf
- sudo apt install -y time
- ghc --version
- cabal --version
script:
- make clean
- git submodule update --init --recursive
- BOOT_GHC="$GHC"
- GHC=/opt/ghc/$GHC_VERSION/bin/ghc
- $GHC --version
- cabal update
- make boot mode=fast
- "make mode=fast NoFibRuns=1 2>&1 | tee log"
- "nofib-analyse/nofib-analyse log"
- |
# The following checks that `make distclean` removes any files reported
# by `git clean -fxd`
make distclean
files=$(git clean -nxd | cut -d" " -f3 | sed "/log/d")
if ! [ -z $files ]
then
echo "The following files weren't cleaned:\n$files"
exit 1
fi
- cabal new-run nofib-run -- -o out -w "$BOOT_GHC"
- mkdir -p results
- "$GHC" --info > results/compiler-info
- cp _make/out/*.results.tsv results
artifacts:
paths:
- results
......@@ -149,7 +149,17 @@ Optionally combine this with `mode=fast`, see [Modes](#modes).
Some benchmarks aren't run by default and require extra packages are
installed for the GHC compiler being tested. These packages include:
* stm - for smp benchmarks
* `old-time`: for `gc` benchmarks
* `stm`: for smp benchmarks
* `parallel`: for parallel benchmarks
* `random`: for various benchmarks
These can be installed with
```
cabal v1-install --allow-newer -w $HC random parallel old-time
````
## Adding benchmarks
......@@ -208,13 +218,23 @@ Gen 1 heaps just amplifies the problem.
As a rule of thumb on how to ensure this: Make sure that your benchmark doesn't
just build up one big data and consume it in a final step, but rather that the
working set grows and shrinks (e.g. is approximately constant) over the whole
run of the benchmark. You can ensure this by iterating your main logic $n times
(how often depends on your program, but in the ball park of 100-1000).
run of the benchmark. You can ensure this by iterating your main logic `$n`
times (how often depends on your program, but in the ball park of 100-1000).
You can test stability by plotting productivity curves for your `fast` settings
with the `prod.py` script attached to #15999.
If in doubt, ask Sebastian Graf for help.
## Important notes
Note that some of these tests (e.g. `spectral/fish`) tend to be very sensitive
to branch predictor effectiveness. This means that changes in the compiler
can easily be masked by "random" fluctuations in the code layout produced by
particular compiler runs. Recent GHC versions provide the `-fproc-alignment`
flag to pad procedures, ensuring slightly better stability across runs. If you
are seeing an unexpected change in performance try adding `-fproc-alignment=64`
the compiler flags of both your baseline and test tree.
## easy.sh
```
......
packages: shake
-- source-repository-package
-- type: git
-- location: https://github.com/bgamari/tabular
-- tag: 204b01f63dec6bf0e0aba2862c71e77b2ec3909b
......@@ -2,10 +2,10 @@ TOP = ../..
include $(TOP)/mk/boilerplate.mk
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H16m -RTS
PROG_ARGS += +RTS -H16m -RTS
endif
ifeq "$(HEAP)" "OLD"
SRC_RUNTEST_OPTS += +RTS -H10m -RTS
PROG_ARGS += +RTS -H10m -RTS
endif
include $(TOP)/mk/target.mk
......
......@@ -7,10 +7,10 @@ NORM_OPTS = 8 3000
SLOW_OPTS = 8 5000
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H256m -RTS
PROG_ARGS += +RTS -H256m -RTS
endif
ifeq "$(HEAP)" "OLD"
SRC_RUNTEST_OPTS += +RTS -H30m -RTS
PROG_ARGS += +RTS -H30m -RTS
endif
include $(TOP)/mk/target.mk
......@@ -7,10 +7,10 @@ NORM_OPTS = 10
SLOW_OPTS = 11
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H330m -RTS
PROG_ARGS += +RTS -H330m -RTS
endif
ifeq "$(HEAP)" "OLD"
SRC_RUNTEST_OPTS += +RTS -H10m -RTS
PROG_ARGS += +RTS -H10m -RTS
endif
include $(TOP)/mk/target.mk
......@@ -75,7 +75,7 @@ the roots of two binomial trees and makes the larger a child of the
smaller (thus bumping its degree by one). It is essential that this
only be called on binomial trees of equal degree.
>link (a @ (Node x as)) (b @ (Node y bs)) =
>link (a@(Node x as)) (b@(Node y bs)) =
> if x <= y then Node x (b:as) else Node y (a:bs)
It will also be useful to extract the minimum element from a tree.
......
......@@ -3,14 +3,14 @@ include $(TOP)/mk/boilerplate.mk
NORM_OPTS = 300000
SRC_HC_OPTS += -package array
SRC_RUNTEST_OPTS += +RTS -K64m -RTS
SRC_DEPS = array
PROG_ARGS += +RTS -K64m -RTS
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H128m -RTS
PROG_ARGS += +RTS -H128m -RTS
endif
ifeq "$(HEAP)" "OLD"
SRC_RUNTEST_OPTS += +RTS -H10m -RTS
PROG_ARGS += +RTS -H10m -RTS
endif
include $(TOP)/mk/target.mk
......@@ -195,19 +195,19 @@ calc (Geom a (RotZ rad)) rgb xyz
-- conflate matrices together and into planes planes...
reduceM (Object X) mata
= case (mat1x4 (1,0,0,0) mata) of
(x,y,z,w) -> (Object (Plane x y z w),True)
(x,y,z,w) -> (Object (Plane x y z w),True)
reduceM (Object Y) mata
= case (mat1x4 (0,1,0,0) mata) of
(x,y,z,w) -> (Object (Plane x y z w),True)
(x,y,z,w) -> (Object (Plane x y z w),True)
reduceM (Object Z) mata
= case (mat1x4 (0,0,1,0) mata) of
(x,y,z,w) -> (Object (Plane x y z w),True)
(x,y,z,w) -> (Object (Plane x y z w),True)
reduceM (Object (Plane a b c d)) mata
= case (mat1x4 (a,b,c,d) mata) of
(x,y,z,w) -> (Object (Plane x y z w),True)
(x,y,z,w) -> (Object (Plane x y z w),True)
reduceM (Matrix b matb) mata
= case (mat4x4 mata matb) of
matc -> (Matrix b matc,True)
matc -> (Matrix b matc,True)
reduceM _ _ = (no,False)
......
......@@ -18,10 +18,10 @@
-}
module Interval(Interval, (#), pt, sqr,
tophalf, bothalf, topbit,
lo, hi, mid1, mid2,
up,down,unpt)
where
tophalf, bothalf, topbit,
lo, hi, mid1, mid2,
up,down,unpt)
where
infix 4 #,:#:
......@@ -46,38 +46,38 @@ instance (Ord a) => Ord (Interval a) where
instance (Num a,Ord a,Eq a,Show{-was:Text-} a) => Num (Interval a) where
(+) = ivPlus
(*) = ivMult
negate = ivNegate
abs = ivAbs
signum = ivSignum
fromInteger = ivFromInteger
(+) = ivPlus
(*) = ivMult
negate = ivNegate
abs = ivAbs
signum = ivSignum
fromInteger = ivFromInteger
instance (Show a,Num a,Ord a,Fractional a) => Fractional (Interval a) where
(/) = ivDiv
fromRational = ivFromRational
(/) = ivDiv
fromRational = ivFromRational
-- instance (Fractional a,Ord a,Floating a) => - not this ?
instance (Show a,RealFloat a) =>
Floating (Interval a) where
pi = Pt pi
exp = ivExp
log = ivLog
sqrt = ivSqrt
(**) = ivPower
sin = ivSin
cos = ivCos
tan = ivTan
asin = ivAsin
acos = ivAcos
atan = ivAtan
sinh = ivSinh
cosh = ivCosh
tanh = ivTanh
asinh = ivAsinh
acosh = ivAcosh
atanh = ivAtanh
Floating (Interval a) where
pi = Pt pi
exp = ivExp
log = ivLog
sqrt = ivSqrt
(**) = ivPower
sin = ivSin
cos = ivCos
tan = ivTan
asin = ivAsin
acos = ivAcos
atan = ivAtan
sinh = ivSinh
cosh = ivCosh
tanh = ivTanh
asinh = ivAsinh
acosh = ivAcosh
atanh = ivAtanh
-- Error functions - un-used.
......@@ -141,35 +141,35 @@ ivNegate (a :#: b) = negate b :#: negate a
ivMult (Pt a) (Pt c) = Pt (a*c)
ivMult (a :#: b) (c :#: d) | (min a c) > 0 = a*c :#: b*d
| (max b d) < 0 = b*d :#: a*c
| otherwise = minmax [e,f,g,h]
where
e = b * c
f = a * d
g = a * c
h = b * d
| otherwise = minmax [e,f,g,h]
where
e = b * c
f = a * d
g = a * c
h = b * d
ivMult (Pt a) (c :#: d) | a > 0 = a*c :#: a*d
| a < 0 = a*d :#: a*c
| otherwise = (Pt 0)
| a < 0 = a*d :#: a*c
| otherwise = (Pt 0)
ivMult (c :#: d) (Pt a) | a > 0 = a*c :#: a*d
| a < 0 = a*d :#: a*c
| otherwise = (Pt 0)
| a < 0 = a*d :#: a*c
| otherwise = (Pt 0)
-- minmax finds the lowest, and highest in a list - used for mult.
-- Should use foldl rather than foldr
minmax [a] = a :#: a
minmax (a:as) = case True of
True | (a > s) -> f :#: a
True | (a < f) -> a :#: s
otherwise -> f :#: s
True | (a > s) -> f :#: a
True | (a < f) -> a :#: s
otherwise -> f :#: s
where
(f :#: s) = minmax as
ivAbs (Pt a) = Pt (abs a)
ivAbs (a :#: b) | a<=0 && 0<=b = 0 :#: (max (abs a) (abs b))
| a<=b && b<0 = b :#: a
| 0<a && a<=b = a :#: b
| otherwise = error "abs doesny work!"
| a<=b && b<0 = b :#: a
| 0<a && a<=b = a :#: b
| otherwise = error "abs doesny work!"
ivSignum (Pt a) = Pt (signum a)
ivSignum (a :#: b) = (signum a) :#: (signum b)
......@@ -195,7 +195,7 @@ ivLog (a :#: b) = (log a) :#: (log b)
ivSqrt (Pt a) = Pt (sqrt a)
ivSqrt (a :#: b) = (sqrt a) :#: (sqrt b)
ivPower x y = exp (log x * y) -- Optimise for x ** 2
ivPower x y = exp (log x * y) -- Optimise for x ** 2
ivSin :: (Floating a) => (Interval a) -> (Interval a)
......
This diff is collapsed.
......@@ -37,9 +37,9 @@ import System.IO
main = do
argv <- getArgs
let
n = case argv of
[a] -> read a
_ -> 7
n = case argv of
[a] -> read a
_ -> 7
hSetBinaryMode stdin True
hSetBinaryMode stdout True
putStr (picture n)
......
TOP = ../..
include $(TOP)/mk/boilerplate.mk
SRC_HC_OPTS += -cpp
# Bah.hs is a test file, which we don't want in SRCS
EXCLUDED_SRCS = Bah.hs
......@@ -11,10 +9,10 @@ NORM_OPTS = 9
SLOW_OPTS = 9
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H160m -RTS
PROG_ARGS += +RTS -H160m -RTS
endif
ifeq "$(HEAP)" "OLD"
SRC_RUNTEST_OPTS += +RTS -H10m -RTS
PROG_ARGS += +RTS -H10m -RTS
endif
SRC_RUNTEST_OPTS += -stdout-binary
......
......@@ -33,10 +33,10 @@ dorow :: (Fractional a) => Row -> R3 a -> a
dorow (m11,m12,m13,m14) (x,y,z)
= case (m1 * x) + (m2 * y) + (m3 * z) + m4 of n -> n
where
m1 = realToFrac m11
m2 = realToFrac m12
m3 = realToFrac m13
m4 = realToFrac m14
m1 = realToFrac m11
m2 = realToFrac m12
m3 = realToFrac m13
m4 = realToFrac m14
mat4x1' :: (Fractional a) => Arr -> R3 a -> R3 a
mat4x1' (r1,r2,r3) xyz = (x,y,z)
......@@ -49,9 +49,9 @@ dorow' :: (Fractional a) => Row -> R3 a -> a
dorow' (m11,m12,m13,m14) (x,y,z)
= case (m1 * x) + (m2 * y) + (m3 * z) of n -> n
where
m1 = realToFrac m11
m2 = realToFrac m12
m3 = realToFrac m13
m1 = realToFrac m11
m2 = realToFrac m12
m3 = realToFrac m13
mat1x4 :: Row -> Arr -> Row
mat1x4 a (b1,b2,b3) = (c1,c2,c3,c4)
......
......@@ -46,7 +46,7 @@ makeoct csg = octer 1 csg xyz
-- octer :: Int -> Csg -> (R3 BI) -> Oct
octer nn csg xyz
= case (calc csg white xyz) of
(res,newc',rgb,new) ->
(res,newc',rgb,new) ->
let
newc = if new then newc' else csg
c = light rgb (calcn newc xyz)
......@@ -54,35 +54,35 @@ octer nn csg xyz
bhx = bothalf x ; thx = tophalf x
bhy = bothalf y ; thy = tophalf y
tbz = topbit z ; bhz = bothalf z
os = if nn == 1 then osb else osa
n1 = nn + 1
os = if nn == 1 then osb else osa
n1 = nn + 1
osa = map (octer n1 newc)
[ (bhx,bhy,tbz) , (bhx,bhy,bhz) ,
(thx,bhy,tbz) , (thx,bhy,bhz) ,
(bhx,thy,tbz) , (bhx,thy,bhz) ,
(thx,thy,tbz) , (thx,thy,bhz) ]
(thx,bhy,tbz) , (thx,bhy,bhz) ,
(bhx,thy,tbz) , (bhx,thy,bhz) ,
(thx,thy,tbz) , (thx,thy,bhz) ]
osb = [(octer n1 newc (bhx,bhy,tbz)) ,
(octer n1 newc (bhx,bhy,bhz)) ,
(octer n1 newc (thx,bhy,tbz)) ,
(octer n1 newc (thx,bhy,bhz)) ,
(octer n1 newc (bhx,thy,tbz)) ,
(octer n1 newc (bhx,thy,bhz)) ,
(octer n1 newc (thx,thy,tbz)) ,
(octer n1 newc (thx,thy,bhz)) ]
(octer n1 newc (bhx,bhy,bhz)) ,
(octer n1 newc (thx,bhy,tbz)) ,
(octer n1 newc (thx,bhy,bhz)) ,
(octer n1 newc (bhx,thy,tbz)) ,
(octer n1 newc (bhx,thy,bhz)) ,
(octer n1 newc (thx,thy,tbz)) ,
(octer n1 newc (thx,thy,bhz)) ]
in
if res < (pt 0) then
O_Full c
else if res > (pt 0) then
O_Empty
else
O_Sub c os
if res < (pt 0) then
O_Full c
else if res > (pt 0) then
O_Empty
else
O_Sub c os
{-
os = map (octer newc)
[ (bhx,bhy,tbz) , (bhx,bhy,bhz) ,
(thx,bhy,tbz) , (thx,bhy,bhz) ,
(bhx,thy,tbz) , (bhx,thy,bhz) ,
(thx,thy,tbz) , (thx,thy,bhz) ]
(thx,bhy,tbz) , (thx,bhy,bhz) ,
(bhx,thy,tbz) , (bhx,thy,bhz) ,
(thx,thy,tbz) , (thx,thy,bhz) ]
-}
calcn csg xyz = normalise (makevector f0 f1 f2 f3)
......
......@@ -34,7 +34,7 @@ qo (O_Sub s l) (Q_Empty ) = Q_Sub s z
(l2:ll3) = ll2 ; (l3:ll4) = ll3
(l4:ll5) = ll4 ; (l5:ll6) = ll5
(l6:ll7) = ll6 ; (l7:ll8) = ll7
z = [ qo (l1) (qo (l0) Q_Empty) ,
z = [ qo (l1) (qo (l0) Q_Empty) ,
qo (l3) (qo (l2) Q_Empty) ,
qo (l5) (qo (l4) Q_Empty) ,
qo (l7) (qo (l6) Q_Empty) ]
......@@ -46,7 +46,7 @@ qo (O_Sub s l) (Q_Sub t k) = Q_Sub t z
(l6:ll7) = ll6 ; (l7:ll8) = ll7
(k0:kk1) = k ; (k1:kk2) = kk1
(k2:kk3) = kk2 ; (k3:kk4) = kk3
z = [ qo (l1) (qo (l0) (k0)) ,
z = [ qo (l1) (qo (l0) (k0)) ,
qo (l3) (qo (l2) (k1)) ,
qo (l5) (qo (l4) (k2)) ,
qo (l7) (qo (l6) (k3)) ]
......@@ -54,7 +54,7 @@ qo o@(O_Full s) (Q_Sub t k) = Q_Sub t z
where
(k0:kk1) = k ; (k1:kk2) = kk1
(k2:kk3) = kk2 ; (k3:kk4) = kk3
z = [ qo o (k0) , qo o (k1) ,
z = [ qo o (k0) , qo o (k1) ,
qo o (k2) , qo o (k3) ]
qo (O_Full s ) (q ) = Q_Full s
......@@ -37,14 +37,14 @@ data Prim = Sphere FType FType FType FType
| Cube FType FType FType FType
| Plane FType FType FType FType
| X | Y | Z
deriving Show{-was:Text-}
deriving Show{-was:Text-}
data Ops = RotX FType
| RotY FType
| RotZ FType
| Scale FType FType FType
| Trans FType FType FType
deriving Show{-was:Text-}
deriving Show{-was:Text-}
data Csg = Object Prim
| Geom Csg Ops
......@@ -55,7 +55,7 @@ data Csg = Object Prim
| Inter Csg Csg
| Sub Csg Csg
| Comp Csg
-- deriving Show{-was:Text-}
-- deriving Show{-was:Text-}
-- type CsgOut = (R1 BI,Csg,Color,Bool)
......@@ -68,7 +68,7 @@ type Calc = Color -> (R3 BI) -> CsgOut
----------------------------------------------------------
data Color = RGB FType FType FType
deriving Show{-was:Text-}
deriving Show{-was:Text-}
----------------------------------------------------------
-- Matrix
......@@ -89,7 +89,7 @@ type R1 a = (a,a)
----------------------------------------------------------
data Oct = O_Full Color | O_Empty | O_Sub Color [Oct]
deriving Show{-was:Text-}
deriving Show{-was:Text-}
----------------------------------------------------------
-- Quad
......@@ -98,7 +98,7 @@ data Oct = O_Full Color | O_Empty | O_Sub Color [Oct]
data Quad = Q_Empty | Q_Full Color
| Q_Sub Color [Quad]
| Q_NewXY FType FType FType
deriving Show{-was:Text-}
deriving Show{-was:Text-}
----------------------------------------------------------
-- Vector
......
......@@ -38,7 +38,7 @@ len :: Vector -> FType
len (x,y,z) = ans
where
ans | sqs /= 0.0 = sqrt sqs
| True = 1
| True = 1
sqs :: FType
sqs = (x2 + y2 + z2)
x2 = x * x
......
TOP = ../..
include $(TOP)/mk/boilerplate.mk
SRC_HC_OPTS += -cpp -package old-time
SRC_DEPS = old-time array
# kLongLivedTreeDepth = 17 :: Int
# kArraySize = 500000 :: Int
......@@ -13,7 +13,7 @@ NORM_OPTS = 18 500000 4 19
SLOW_OPTS = 19 500000 5 22
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H180m -RTS
PROG_ARGS += +RTS -H180m -RTS
endif
include $(TOP)/mk/target.mk
......
> {-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
Abstract syntax for grammar files.
......
This diff is collapsed.
> {-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
The Grammar data type.
......
> {-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
The lexer.
......
> {-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
The main driver.
......
......@@ -3,14 +3,15 @@ TOP = ../..
include $(TOP)/mk/boilerplate.mk
NORM_OPTS = TestInput.y
SRC_HC_OPTS += -cpp -package containers
SRC_HC_OPTS += -cpp
SRC_DEPS = containers
EXCLUDED_SRCS += TestInput.hs
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H128m -RTS
PROG_ARGS += +RTS -H128m -RTS
endif
ifeq "$(HEAP)" "OLD"
SRC_RUNTEST_OPTS += +RTS -H10m -RTS
PROG_ARGS += +RTS -H10m -RTS
endif
include $(TOP)/mk/target.mk
......@@ -30,4 +30,6 @@ The parser monad.
> m >>= k = P $ \s l -> case runP m s l of
> OkP a -> runP (k a) s l
> FailP s -> FailP s
> instance MonadFail P where
> fail s = P $ \ _ _ -> FailP s
This diff is collapsed.
module Paths_happy (
version,
getBinDir, getLibDir, getDataDir, getLibexecDir,
getDataFileName
) where
version,
getBinDir, getLibDir, getDataDir, getLibexecDir,
getDataFileName
) where
import Data.Version
......
{-# LANGUAGE CPP #-}
module Set (
Set, null, member, empty, singleton,
union, difference, filter, fold,
......
This diff is collapsed.
......@@ -16,7 +16,7 @@ module Parser ( parseModule, parseStmt, parseIdentifier, parseType,
#include "HsVersions.h"
import HsSyn
import GHC.Hs
import RdrHsSyn
import HscTypes ( IsBootInterface, DeprecTxt )
import Lexer
......
......@@ -6,7 +6,7 @@ NORM_OPTS = 5000000
SLOW_OPTS = 100000000
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H430m -RTS
PROG_ARGS += +RTS -H430m -RTS
endif
include $(TOP)/mk/target.mk
......@@ -6,7 +6,7 @@ NORM_OPTS = 1 2 2000 1000 1001 4000
SLOW_OPTS = 1 2 4000 1000 1001 4000
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H256m -RTS
PROG_ARGS += +RTS -H256m -RTS
endif
include $(TOP)/mk/target.mk
......@@ -5,10 +5,10 @@ include $(TOP)/mk/boilerplate.mk
NORM_OPTS = 14
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H8m -RTS
PROG_ARGS += +RTS -H8m -RTS
endif
ifeq "$(HEAP)" "OLD"
SRC_RUNTEST_OPTS += +RTS -H10m -RTS
PROG_ARGS += +RTS -H10m -RTS
endif
include $(TOP)/mk/target.mk
TOP = ../..
include $(TOP)/mk/boilerplate.mk
SRC_DEPS = array
FAST_OPTS = 100000
NORM_OPTS = 300000
SLOW_OPTS = 600000
SRC_DEPS = array
include $(TOP)/mk/target.mk
......@@ -8,8 +8,8 @@ NORM_OPTS = 80
SLOW_OPTS = 90
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H16m -RTS
PROG_ARGS += +RTS -H16m -RTS
endif
ifeq "$(HEAP)" "OLD"
SRC_RUNTEST_OPTS += +RTS -H10m -RTS
PROG_ARGS += +RTS -H10m -RTS
endif
......@@ -7,14 +7,14 @@ all boot :: input
input : words
cat words words words words words words words words words words >$@
SRC_HC_OPTS += -package containers
SRC_DEPS = containers
NORM_OPTS = words input
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H32m -RTS
PROG_ARGS += +RTS -H32m -RTS
endif
ifeq "$(HEAP)" "OLD"
SRC_RUNTEST_OPTS += +RTS -H10m -RTS
PROG_ARGS += +RTS -H10m -RTS
endif
include $(TOP)/mk/target.mk
......@@ -5,10 +5,10 @@ include $(TOP)/mk/boilerplate.mk
PROG_ARGS = 27000.1 27000.2
ifeq "$(HEAP)" "LARGE"
SRC_RUNTEST_OPTS += +RTS -H32m -RTS
PROG_ARGS += +RTS -H32m -RTS
endif
ifeq "$(HEAP)" "OLD"
SRC_RUNTEST_OPTS += +RTS -H24m -RTS
PROG_ARGS += +RTS -H24m -RTS
endif
include $(TOP)/mk/target.mk
......@@ -3,7 +3,7 @@ include $(TOP)/mk/boilerplate.mk
# Override default SRCS; the default is all source files, but
# we don't want to include paraffins.c
SRCS=Main.hs
SRCS=Main.hs NofibUtils.hs
FAST_OPTS = 60
NORM_OPTS = 180
......
......@@ -6,4 +6,4 @@ FAST_OPTS = 150000
NORM_OPTS = 1500000
SLOW_OPTS = 7500000
SRC_HC_OPTS += -package array
SRC_DEPS = array
......@@ -3,7 +3,7 @@ include $(TOP)/mk/boilerplate.mk
-include opts.mk
# Seems to be a real memory hog, this one
SRC_RUNTEST_OPTS += +RTS -M300m -RTS
PROG_ARGS += +RTS -M300m -RTS
include $(TOP)/mk/target.mk
......
......@@ -59,7 +59,7 @@ endif
# All the standard gluing together, as in the comment right at the front
HC_OPTS = $(BOOTSTRAPPING_PACKAGE_CONF_HC_OPTS) $(SRC_HC_OPTS) $(WAY$(_way)_HC_OPTS) $($*_HC_OPTS) $(EXTRA_HC_OPTS)
HC_OPTS = $(BOOTSTRAPPING_PACKAGE_CONF_HC_OPTS) $(SRC_HC_OPTS) $(WAY$(_way)_HC_OPTS) $($*_HC_OPTS) $(EXTRA_HC_OPTS) $(addprefix -package, $(SRC_DEPS))
ifeq "$(HC_VERSION_GE_6_13)" "YES"
HC_OPTS += -rtsopts
endif
......
TOP = ../..
include $(TOP)/mk/boilerplate.mk
SRC_RUNTEST_OPTS += 8400
PROG_ARGS += 8400
include $(TOP)/mk/target.mk
......@@ -4,7 +4,7 @@ include $(TOP)/mk/boilerplate.mk
# Override default SRCS; the default is all source files
SRCS=parfact.hs
SRC_RUNTEST_OPTS += 8000000 1000
PROG_ARGS += 8000000 1000
SRC_HC_OPTS += -package concurrent
include $(TOP)/mk/target.mk
......
......@@ -3,7 +3,7 @@ include $(TOP)/mk/boilerplate.mk
# Override default SRCS; the default is all source files
SRCS=Main.hs
SRC_RUNTEST_OPTS += 20
PROG_ARGS += 20
SRC_HC_OPTS += -cpp -package concurrent
include $(TOP)/mk/target.mk
......
......@@ -2,7 +2,7 @@ TOP = ../..
include $(TOP)/mk/boilerplate.mk
PROG_ARGS = 10000 15000000
SRC_HC_OPTS += -package parallel
SRC_DEPS += parallel
include $(TOP)/mk/target.mk
......@@ -2,11 +2,11 @@ TOP = ../..
include $(TOP)/mk/boilerplate.mk
# This version just counts the results, and runs in constant space:
# SRC_RUNTEST_OPTS += 7 1163
# PROG_ARGS += 7 1163
# This version builds a list of the results, and needs a lot of memory:
SRC_RUNTEST_OPTS += 3 873
PROG_ARGS += 3 873
SRC_HC_OPTS += -package parallel
SRC_DEPS = parallel
include $(TOP)/mk/target.mk
......@@ -4,10 +4,10 @@
-- which is included in the distribution.
module CSG(module Construct,
module Geometry,
module Intersections,
module Interval,
module Misc) where
module Geometry,
module Intersections,
module Interval,
module Misc) where
import Construct
import Geometry
......
......@@ -69,7 +69,7 @@ data CSG a
-- the a is application-specific texture information
type Texture a = (Face, Point, a)
union, intersect, difference :: CSG a -> CSG a -> CSG a
union, intersect, difference :: CSG a -> CSG a -> CSG a
union p@(Box b1 _) q@(Box b2 _) = Box (mergeBox b1 b2) (Union p q)
union p q = Union p q
......@@ -85,25 +85,25 @@ difference p q = Difference p q
mkBox b p = Box b p
plane, sphere, cube, cylinder, cone :: a -> CSG a
plane, sphere, cube, cylinder, cone :: a -> CSG a
plane = Plane
sphere s =
mkBox (B (-1 - epsilon) (1 + epsilon)
(-1 - epsilon) (1 + epsilon)
(-1 - epsilon) (1 + epsilon)) (Sphere s)
(-1 - epsilon) (1 + epsilon)
(-1 - epsilon) (1 + epsilon)) (Sphere s)
cone s =
mkBox (B (-1 - epsilon) (1 + epsilon)
( - epsilon) (1 + epsilon)
(-1 - epsilon) (1 + epsilon)) (Cone s)
( - epsilon) (1 + epsilon)
(-1 - epsilon) (1 + epsilon)) (Cone s)
cube s =
mkBox (B (- epsilon) (1 + epsilon)
(- epsilon) (1 + epsilon)
(- epsilon) (1 + epsilon)) (Cube s)
(- epsilon) (1 + epsilon)
(- epsilon) (1 + epsilon)) (Cube s)
cylinder s =
mkBox (B (-1 - epsilon) (1 + epsilon)
( - epsilon) (1 + epsilon)
(-1 - epsilon) (1 + epsilon)) (Cylinder s)
( - epsilon) (1 + epsilon)
(-1 - epsilon) (1 + epsilon)) (Cylinder s)
----------------------------
-- Object transformations
......@@ -120,16 +120,16 @@ transform mm' (Difference p q) = Difference (transform mm' p) (trans
transform mm'@(m,_) (Box box p) = Box (transformBox m box) (transform mm' p)
transform (m, m') prim = Transform m m' prim
translate :: Coords -> CSG a -> CSG a
translateX, translateY, translateZ :: Double -> CSG a -> CSG a
translate :: Coords -> CSG a -> CSG a
translateX, translateY, translateZ :: Double -> CSG a -> CSG a
translate xyz = transform $ transM xyz
translateX x = translate (x, 0, 0)
translateY y = translate (0, y, 0)
translateZ z = translate (0, 0, z)
scale :: Coords -> CSG a -> CSG a
scaleX, scaleY, scaleZ, uscale :: Double -> CSG a -> CSG a
scale :: Coords -> CSG a -> CSG a
scaleX, scaleY, scaleZ, uscale :: Double -> CSG a -> CSG a
scale xyz = transform $ scaleM xyz
scaleX x = scale (x, 1, 1)
......@@ -137,7 +137,7 @@ scaleY y = scale (1, y, 1)
scaleZ z = scale (1, 1, z)
uscale u = scale (u,u,u)
rotateX, rotateY, rotateZ :: Radian -> CSG a -> CSG a
rotateX, rotateY, rotateZ :: Radian -> CSG a -> CSG a
rotateX a = transform $ rotxM a
rotateY a = transform $ rotyM a
......@@ -145,72 +145,72 @@ rotateZ a = transform $ rotzM a
unit = matrix
( ( 1.0, 0.0, 0.0, 0.0 ),
( 0.0, 1.0, 0.0, 0.0 ),
( 0.0, 0.0, 1.0, 0.0 ),
( 0.0, 0.0, 0.0, 1.0 ) )
( 0.0, 1.0, 0.0, 0.0 ),
( 0.0, 0.0, 1.0, 0.0 ),
( 0.0, 0.0, 0.0, 1.0 ) )
transM (x, y, z)
= ( matrix
( ( 1, 0, 0, x ),
( 0, 1, 0, y ),
( 0, 0, 1, z ),
( 0, 0, 0, 1 ) ),
( 0, 1, 0, y ),
( 0, 0, 1, z ),
( 0, 0, 0, 1 ) ),
matrix
( ( 1, 0, 0, -x ),
( 0, 1, 0, -y ),
( 0, 0, 1, -z ),
( 0, 0, 0, 1 ) ) )
( 0, 1, 0, -y ),
( 0, 0, 1, -z ),
( 0, 0, 0, 1 ) ) )
scaleM (x, y, z)
= ( matrix
( ( x', 0, 0, 0 ),
( 0, y', 0, 0 ),
( 0, 0, z', 0 ),
( 0, 0, 0, 1 ) ),
( 0, y', 0, 0 ),
( 0, 0, z', 0 ),
( 0, 0, 0, 1 ) ),
matrix
( ( 1/x', 0, 0, 0 ),
( 0, 1/y', 0, 0 ),
( 0, 0, 1/z', 0 ),
( 0, 0, 0, 1 ) ) )
( 0, 1/y', 0, 0 ),
( 0, 0, 1/z', 0 ),
( 0, 0, 0, 1 ) ) )
where x' = nonZero x
y' = nonZero y
z' = nonZero z
y' = nonZero y
z' = nonZero z
rotxM t
= ( matrix
( ( 1, 0, 0, 0 ),
( 0, cos t, -sin t, 0 ),