SCM Repository
View of /branches/pure-cfg/src/compiler/cl-target/runtime-names.sml
Parent Directory
|
Revision Log
Revision 1316 -
(download)
(annotate)
Sat Jun 11 22:45:44 2011 UTC (11 years ago) by lamonts
File size: 5920 byte(s)
Sat Jun 11 22:45:44 2011 UTC (11 years ago) by lamonts
File size: 5920 byte(s)
OpenCL runtime now compiling correctly and contains hookups
(* runtime-names.sml * * COPYRIGHT (c) 2011 The Diderot Project (http://diderot-language.cs.uchicago.edu) * All rights reserved. *) structure RuntimeNames = struct local structure Ty = TreeIL.Ty structure F = Format in (* globals that specify the target characteristics. These should be initialized * when the program object is created. *) val doublePrecision = ref false val gVectorWid = ref 4 val gIntTy = ref CLang.int32 val gRealTy = ref CLang.float val gRealStem = ref "?" val gRealSuffix = ref "?" val gIntSuffix = ref "?" val gIntFormat = ref "?" (* initialize globals based on target precision *) fun initTargetSpec double = ( doublePrecision := double; if double then ( gVectorWid := 2; gIntTy := CLang.int64; gRealTy := CLang.double; gRealStem := "double"; gRealSuffix := "d"; gIntSuffix := "l"; gIntFormat := "%ld") else ( gVectorWid := 4; gIntTy := CLang.int32; gRealTy := CLang.float; gRealStem := "float"; gRealSuffix := "f"; gIntSuffix := "i"; gIntFormat := "%d")) fun addRealSuffix stem = stem ^ !gRealSuffix fun addVecSuffix stem n = concat[stem, Int.toString n, !gRealSuffix] fun addIVecSuffix stem n = concat[stem, Int.toString n, !gIntSuffix] fun addBufferSuffix stem = concat[stem, "_cl"] fun addBufferSuffixData stem = concat[stem, "_data_cl"] fun addTySuffix (stem, 1) = stem ^ !gRealSuffix | addTySuffix (stem, n) = addVecSuffix stem n fun vecTy n = concat[!gRealStem, Int.toString n] fun ivecTy n = concat["int", Int.toString n] fun imageTy n = concat["Diderot_image", Int.toString n, "D_t"] fun matTy (n, m) = concat["Diderot_Mat", Int.toString n, "x", Int.toString m, "_t"] (* names of generated tyes, functions, and globals *) val initGlobals = "Diderot_InitGlobals" (* function for initializing program globals *) val initGlobalsHelper = "Diderot_InitGlobals_Helper" (* function for initializing program globals *) val registerOpts = "Diderot_RegisterGlobalOpts" (* function for registering command-line options *) val initially = "Diderot_Initially" (* function for creating initial strands *) val shutdown = "Diderot_Shutdown" (* function that gets called at the end *) val globalsTy = "Diderot_Globals_t" val kernelFuncName = "Diderot_Kernel" fun strandInit strand = strand ^ "_InitState" val strandInitSetup = "Diderot_Strand_Init" fun strandTy strand = concat["Strand_", strand, "_t"] fun strandUpdate strand = concat[strand,"_update"] fun strandStabilize strand = concat[strand,"_stabilize"] fun strandDesc strand = concat["Strand_", strand] val numStrands = "Diderot_NumStrands" val strands = "Diderot_Strands" val clLoaderFN = "Diderot_LoadKernel" val getGlobalThreadId ="get_global_id" val globalsVarName = "diderotGlobals" val globalsVarNameCL = "cl_diderotGlobals" val globalsSetupName = "Diderot_LoadGlobals" (* scalar math functions *) val max = "max" val min = "min" val fabs = "fabs" (* clamp and lerp *) val clamp = "clamp" val lerp = "mix" (* vector math functions *) fun mkVec 3 = "VEC3" (* for OpenCL 1.0 *) | mkVec n = concat["(", !gRealStem, Int.toString n, ")"] (* cast syntax *) val truncToInt = addVecSuffix "truncToInt" val dot = "dot" val cross = "cross" val length = "length" val normalize = "normalize" fun vecitof n = concat["vec", Int.toString n, "ito", !gRealSuffix] fun vecftoi n = concat["vec", Int.toString n, !gRealSuffix, "toi"] (* matrix operations *) fun zeroMat (n, m) = concat["zero", Int.toString n, "x", Int.toString m, !gRealSuffix] fun identityMat n = concat["identity", Int.toString n, "x", Int.toString n, !gRealSuffix] fun trace n = concat["trace", Int.toString n, "x", Int.toString n, !gRealSuffix] fun norm (n, m) = concat["norm", Int.toString n, "x", Int.toString m, !gRealSuffix] fun copyMat (n, m) = concat["copy", Int.toString n, "x", Int.toString m, !gRealSuffix] fun scaleMat (n, m) = concat["scale", Int.toString n, "x", Int.toString m, !gRealSuffix] fun addMat (n, m) = concat["add", Int.toString n, "x", Int.toString m, !gRealSuffix] fun subMat (n, m) = concat["add", Int.toString n, "x", Int.toString m, !gRealSuffix] fun mulVecMat (m, n) = F.format "mulVec%dMat%dx%d%s" [F.INT m, F.INT m, F.INT n, F.STR(!gRealSuffix)] fun mulMatVec (m, n) = F.format "mulMat%dx%dVec%d%s" [F.INT n, F.INT m, F.INT n, F.STR(!gRealSuffix)] fun mulMatMat (m, n, p) = F.format "mulMat%dx%dMat%dx%d%s" [F.INT m, F.INT n, F.INT n, F.INT p, F.STR(!gRealSuffix)] (* Status_t symbols *) val kActive = "DIDEROT_ACTIVE" val kDie = "DIDEROT_DIE" val kStabilize = "DIDEROT_STABILIZE" (* Diderot runtime system hooks *) val statusTy = "Status_t" val toImageSpace = addVecSuffix "ToImageSpace" fun toWorldSpace ty = let val suffix = (case ty of Ty.TensorTy[d] => [Int.toString d, !gRealSuffix] | Ty.TensorTy[m,n] => [Int.toString n, "x", Int.toString n, !gRealSuffix] (* end case *)) in concat("ToWorldSpace" :: suffix) end val inside = addVecSuffix "Inside" fun loadImage dim = concat["Diderot_LoadImage", Int.toString dim, "D"] val strandDescTy = "Strand_t" val worldTy = "Diderot_World_t" val optionsTy = "Diderot_Options_t" val allocInitially = "Diderot_AllocInitially" val inState = "Diderot_InState" fun input ty = (case ty of Ty.StringTy => "Diderot_InputString" | Ty.TensorTy[] => "Diderot_Input" ^ !gRealSuffix | Ty.TensorTy[3] => "Diderot_InputVec3" ^ !gRealSuffix | ty => raise Fail("unsupported input type " ^ Ty.toString ty) (* end case *)) end (* local *) end
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |