Commit 9e6e96bd authored by chak@cse.unsw.edu.au.'s avatar chak@cse.unsw.edu.au.

DPH options updated

- '-Odph' is now '-O2 -fsimplifier-phases=3 -fsimplifier-iterations=20'
- The new option '-fdph-none' is the default; it indicates that no DPH
  backend is selected and is the only valid option if the DPH libraries
  are not installed.  If vectorisation is attempted with -fdph-none a
  suitable error message is generated.
- Hence, '-fdph-par' (or '-fdph-seq') needs to be explicitly selected
  when using vectorisation and when linking vectorised code.  (There
  seems to be no elegant way to avoid that.)
parent eb3a1aec
......@@ -351,7 +351,7 @@ integerPackageId, primPackageId,
primPackageId = fsToPackageId (fsLit "ghc-prim")
integerPackageId = fsToPackageId (fsLit cIntegerLibrary)
basePackageId = fsToPackageId (fsLit "base")
rtsPackageId = fsToPackageId (fsLit "rts")
rtsPackageId = fsToPackageId (fsLit "rts")
thPackageId = fsToPackageId (fsLit "template-haskell")
dphSeqPackageId = fsToPackageId (fsLit "dph-seq")
dphParPackageId = fsToPackageId (fsLit "dph-par")
......
......@@ -32,7 +32,7 @@ module DynFlags (
Option(..), showOpt,
DynLibLoader(..),
fFlags, fLangFlags, xFlags,
dphPackage,
DPHBackend(..), dphPackage,
wayNames,
-- ** Manipulating DynFlags
......@@ -669,7 +669,7 @@ defaultDynFlags =
mainFunIs = Nothing,
ctxtStkDepth = mAX_CONTEXT_REDUCTION_DEPTH,
dphBackend = DPHPar,
dphBackend = DPHNone,
thisPackage = mainPackageId,
......@@ -1334,6 +1334,7 @@ dynamic_flags = [
, Flag "fdph-seq" (NoArg (setDPHBackend DPHSeq))
, Flag "fdph-par" (NoArg (setDPHBackend DPHPar))
, Flag "fdph-this" (NoArg (setDPHBackend DPHThis))
, Flag "fdph-none" (NoArg (setDPHBackend DPHNone))
------ Compiler flags -----------------------------------------------
......@@ -1681,6 +1682,8 @@ impliedFlags
-- stuff like " 'a' not in scope ", which is a bit silly
-- if the compiler has just filled in field 'a' of constructor 'C'
, (Opt_RecordWildCards, turnOn, Opt_DisambiguateRecordFields)
, (Opt_ParallelArrays, turnOn, Opt_ParallelListComp)
]
optLevelFlags :: [([Int], DynFlag)]
......@@ -1977,44 +1980,39 @@ setOptLevel n dflags
-- -Odph is equivalent to
--
-- -O2 optimise as much as possible
-- -fno-method-sharing sharing specialisation defeats fusion
-- sometimes
-- -fdicts-cheap always inline dictionaries
-- -fmax-simplifier-iterations20 this is necessary sometimes
-- -fsimplifier-phases=3 we use an additional simplifier phase
-- for fusion
-- -fno-spec-constr-threshold run SpecConstr even for big loops
-- -fno-spec-constr-count SpecConstr as much as possible
-- -finline-enough-args hack to prevent excessive inlining
-- -fsimplifier-phases=3 we use an additional simplifier phase for fusion
--
setDPHOpt :: DynFlags -> DynFlags
setDPHOpt dflags = setOptLevel 2 (dflags { maxSimplIterations = 20
, simplPhases = 3
, specConstrThreshold = Nothing
, specConstrCount = Nothing
})
`dopt_set` Opt_DictsCheap
data DPHBackend = DPHPar
| DPHSeq
| DPHThis
-- Determines the package used by the vectoriser for the symbols of the vectorised code.
-- 'DPHNone' indicates that no data-parallel backend library is available; hence, the
-- vectoriser cannot be used.
--
data DPHBackend = DPHPar -- "dph-par"
| DPHSeq -- "dph-seq"
| DPHThis -- the currently compiled package
| DPHNone -- no DPH library available
deriving(Eq, Ord, Enum, Show)
setDPHBackend :: DPHBackend -> DynP ()
setDPHBackend backend
= do
upd $ \dflags -> dflags { dphBackend = backend }
mapM_ exposePackage (dph_packages backend)
where
dph_packages DPHThis = []
dph_packages DPHPar = ["dph-prim-par", "dph-par"]
dph_packages DPHSeq = ["dph-prim-seq", "dph-seq"]
setDPHBackend backend = upd $ \dflags -> dflags { dphBackend = backend }
-- Query the DPH backend package to be used by the vectoriser.
--
dphPackage :: DynFlags -> PackageId
dphPackage dflags = case dphBackend dflags of
DPHPar -> dphParPackageId
DPHSeq -> dphSeqPackageId
DPHThis -> thisPackage dflags
dphPackage dflags
= case dphBackend dflags of
DPHPar -> dphParPackageId
DPHSeq -> dphSeqPackageId
DPHThis -> thisPackage dflags
DPHNone -> ghcError (CmdLineError dphBackendError)
dphBackendError :: String
dphBackendError = "To use -fvectorise select a DPH backend with -fdph-par or -fdph-seq"
setMainIs :: String -> DynP ()
setMainIs arg
......
......@@ -36,7 +36,7 @@ where
#include "HsVersions.h"
import PackageConfig
import DynFlags ( dopt, DynFlag(..), DynFlags(..), PackageFlag(..) )
import DynFlags ( dopt, DynFlag(..), DynFlags(..), PackageFlag(..), DPHBackend(..) )
import StaticFlags
import Config ( cProjectVersion )
import Name ( Name, nameModule_maybe )
......@@ -622,7 +622,6 @@ mkPackageState
-> IO (PackageState,
[PackageId], -- new packages to preload
PackageId) -- this package, might be modified if the current
-- package is a wired-in package.
mkPackageState dflags pkgs0 preload0 this_package = do
......@@ -666,7 +665,13 @@ mkPackageState dflags pkgs0 preload0 this_package = do
-}
let
flags = reverse (packageFlags dflags)
flags = reverse (packageFlags dflags) ++ dphPackage
-- expose the appropriate DPH backend library
dphPackage = case dphBackend dflags of
DPHPar -> [ExposePackage "dph-prim-par", ExposePackage "dph-par"]
DPHSeq -> [ExposePackage "dph-prim-seq", ExposePackage "dph-seq"]
DPHThis -> []
DPHNone -> []
-- pkgs0 with duplicate packages filtered out. This is
-- important: it is possible for a package in the global package
......@@ -750,19 +755,19 @@ mkPackageState dflags pkgs0 preload0 this_package = do
-- set up preloaded package when we are just building it
preload3 = nub $ filter (/= this_package)
$ (basicLinkedPackages ++ preload2)
-- Close the preload packages with their dependencies
dep_preload <- closeDeps pkg_db ipid_map (zip preload3 (repeat Nothing))
let new_dep_preload = filter (`notElem` preload0) dep_preload
let pstate = PackageState{ preloadPackages = dep_preload,
pkgIdMap = pkg_db,
moduleToPkgConfAll = mkModuleMap pkg_db,
pkgIdMap = pkg_db,
moduleToPkgConfAll = mkModuleMap pkg_db,
installedPackageIdMap = ipid_map
}
}
return (pstate, new_dep_preload, this_package)
-- -----------------------------------------------------------------------------
-- Make the mapping from module to package info
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment