Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/compiler/cl-target/cl-target.sml
ViewVC logotype

Diff of /branches/pure-cfg/src/compiler/cl-target/cl-target.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1459, Sun Aug 7 17:12:19 2011 UTC revision 1460, Sun Aug 7 20:31:00 2011 UTC
# Line 185  Line 185 
185                  case scope                  case scope
186  (* NOTE: if we move strand initialization to the GPU, then we'll have to change the following code! *)  (* NOTE: if we move strand initialization to the GPU, then we'll have to change the following code! *)
187                   of StrandScope stateVars =>                   of StrandScope stateVars =>
188                        ToCL.trBlock (vMap, saveState "StrandScope" stateVars ToCL.trAssign, blk)                        ToC.trBlock (vMap, saveState "StrandScope" stateVars ToC.trAssign, blk)
189                    | MethodScope(name, stateVars) =>                    | MethodScope(name, stateVars) =>
190                        ToCL.trBlock (vMap, saveState "MethodScope" stateVars ToCL.trAssign, blk)                        ToCL.trBlock (vMap, saveState "MethodScope" stateVars ToCL.trAssign, blk)
191                    | InitiallyScope => ToCL.trBlock (vMap, fn (_, _, stm) => [stm], blk)                    | InitiallyScope => ToCL.trBlock (vMap, fn (_, _, stm) => [stm], blk)
# Line 382  Line 382 
382   *)   *)
383          fun genStrandPrint (Strand{name, tyName, state, output, code, ...}) = let          fun genStrandPrint (Strand{name, tyName, state, output, code, ...}) = let
384              (* the print function *)              (* the print function *)
385                val prFnName = concat[name, "Print"]                val prFnName = concat[name, "_print"]
386                val prFn = let                val prFn = let
387                      val params = [                      val params = [
388                              CL.PARAM([], CL.T_Ptr(CL.T_Named "FILE"), "outS"),                              CL.PARAM([], CL.T_Ptr(CL.T_Named "FILE"), "outS"),
# Line 393  Line 393 
393                      val prArgs = (case ty                      val prArgs = (case ty
394                             of Ty.IVecTy 1 => [CL.E_Str(!N.gIntFormat ^ "\n"), outState]                             of Ty.IVecTy 1 => [CL.E_Str(!N.gIntFormat ^ "\n"), outState]
395                              | Ty.IVecTy d => let                              | Ty.IVecTy d => let
396                                  fun sel i = CL.mkSubscript(CL.mkSelect(outState, "s"),                                  val fmt = CL.E_Str(
                                       CL.mkInt(IntInf.fromInt i))  
                                 val fmt = CL.mkStr(  
397                                        String.concatWith " " (List.tabulate(d, fn _ => !N.gIntFormat))                                        String.concatWith " " (List.tabulate(d, fn _ => !N.gIntFormat))
398                                        ^ "\n")                                        ^ "\n")
399                                  val args = List.tabulate (d, sel)                                  val args = List.tabulate (d, fn i => ToC.ivecIndex(outState, d, i))
400                                  in                                  in
401                                    fmt :: args                                    fmt :: args
402                                  end                                  end
403                              | Ty.TensorTy[] => [CL.mkStr "%f\n", outState]                              | Ty.TensorTy[] => [CL.E_Str "%f\n", outState]
404                              | Ty.TensorTy[d] => let                              | Ty.TensorTy[d] => let
405                                  fun sel i = CL.mkSubscript(CL.mkSelect(outState, "s"),                                  val fmt = CL.E_Str(
                                       CL.mkInt(IntInf.fromInt i))  
                                 val fmt = CL.mkStr(  
406                                        String.concatWith " " (List.tabulate(d, fn _ => "%f"))                                        String.concatWith " " (List.tabulate(d, fn _ => "%f"))
407                                        ^ "\n")                                        ^ "\n")
408                                  val args = List.tabulate (d, sel)                                  val args = List.tabulate (d, fn i => ToC.vecIndex(outState, d, i))
409                                  in                                  in
410                                    fmt :: args                                    fmt :: args
411                                  end                                  end
# Line 432  Line 428 
428    
429           fun genStrandCopy(Strand{tyName,name,state,...}) = let           fun genStrandCopy(Strand{tyName,name,state,...}) = let
430                val params = [                val params = [
431                        CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named tyName), "selfIn"),                        CL.PARAM([""], CL.T_Ptr(CL.T_Named tyName), "selfIn"),
432                        CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named tyName), "selfOut")                        CL.PARAM([""], CL.T_Ptr(CL.T_Named tyName), "selfOut")
433                    ]                    ]
434                  val assignStms = List.rev(List.map(fn x => CL.mkAssign(CL.mkIndirect(CL.E_Var "selfOut", #var x),                  val assignStms = List.rev(List.map(fn x => CL.mkAssign(CL.mkIndirect(CL.E_Var "selfOut", #var x),
435                                                                                                         CL.mkIndirect(CL.E_Var "selfIn", #var x))) (!state))                                                                                                         CL.mkIndirect(CL.E_Var "selfIn", #var x))) (!state))
# Line 539  Line 535 
535          fun genKernelFun (strand, nDims, globals, imgGlobals) = let          fun genKernelFun (strand, nDims, globals, imgGlobals) = let
536                val Strand{name, tyName, state, output, code,...} = strand                val Strand{name, tyName, state, output, code,...} = strand
537                val fName = RN.kernelFuncName;                val fName = RN.kernelFuncName;
538                val inState = "strand_in"                val inState = "selfIn"
539                val outState = "strand_out"                val outState = "selfOut"
540                val tempVar = "tmp"                val tempVar = "tmp"
541    
542                val (workerOffset,localOffset) = if nDims = 1 then                val (workerOffset,localOffset) = if nDims = 1 then
# Line 558  Line 554 
554    
555              val params = [              val params = [
556                        globalParam(CL.T_Ptr(CL.T_Named tyName), "strands"),                        globalParam(CL.T_Ptr(CL.T_Named tyName), "strands"),
557                        globalParam(CL.T_Ptr(CL.T_Num(RawTypes.RT_UInt8)), "strandStatus"),                        globalParam(CL.T_Ptr(CL.intTy), "strandStatus"),
558                        globalParam(CL.T_Ptr(CL.intTy), "workerQueue"),                        globalParam(CL.T_Ptr(CL.intTy), "workerQueue"),
559                        globalParam(CL.T_Ptr(CL.intTy),"numAvail"),                        globalParam(CL.T_Ptr(CL.intTy),"numAvail"),
560                        clParam("",CL.intTy,"numStrands"),                        clParam("",CL.intTy,"numStrands"),
# Line 570  Line 566 
566                            CL.mkDecl(CL.intTy, "workerIndex",                            CL.mkDecl(CL.intTy, "workerIndex",
567                              SOME(CL.I_Exp(workerOffset))),                              SOME(CL.I_Exp(workerOffset))),
568                            CL.mkDecl(CL.intTy, "strandIndex",                            CL.mkDecl(CL.intTy, "strandIndex",
569                              SOME(CL.I_Exp(CL.mkBinOp(CL.mkBinOp(CL.mkSubscript(CL.mkVar "workQueue",CL.mkVar "workerIndex"),CL.#+,localOffset),CL.#*,CL.mkVar "limit"))))                              SOME(CL.I_Exp(CL.mkBinOp(CL.mkSubscript(CL.mkVar "workQueue",CL.mkVar "workerIndex"),CL.#+,CL.mkBinOp(localOffset,CL.#*,CL.mkVar "limit")))))
570                          ]                          ]
571    
572              val strandDecl = [              val strandDecl = [
# Line 588  Line 584 
584         fun strandCopy(inStrand, outStrand) = CL.mkCall(RN.strandCopy name,[inStrand,outStrand])         fun strandCopy(inStrand, outStrand) = CL.mkCall(RN.strandCopy name,[inStrand,outStrand])
585         val updateStm =  CL.mkAssign(CL.mkVar "status",         val updateStm =  CL.mkAssign(CL.mkVar "status",
586                          CL.mkApply(RN.strandUpdate name,                          CL.mkApply(RN.strandUpdate name,
587                            [CL.mkVar inState,                            [CL.mkUnOp(CL.%&,CL.mkVar inState),
588                             CL.mkVar outState,                             CL.mkUnOp(CL.%&,CL.mkVar outState),
589                             CL.mkVar RN.globalsVarName,                             CL.mkVar RN.globalsVarName,
590                             CL.mkVar RN.globalImageDataName]))                             CL.mkVar RN.globalImageDataName]))
591    
# Line 616  Line 612 
612                                                                       CL.mkBinOp(CL.mkVar "strandIndex", CL.#<, CL.mkVar "numStrands")),                                                                       CL.mkBinOp(CL.mkVar "strandIndex", CL.#<, CL.mkVar "numStrands")),
613                                         [CL.mkPostOp(CL.mkVar "idx", CL.^++)], CL.mkBlock(                                         [CL.mkPostOp(CL.mkVar "idx", CL.^++)], CL.mkBlock(
614                                         [                                         [
615                                           strandCopy(CL.mkUnOp(CL.%&,CL.mkVar "selfIn"),CL.mkBinOp(CL.mkVar "strands", CL.#+, CL.mkVar "strandIndex")),                                           strandCopy(CL.mkBinOp(CL.mkVar "strands", CL.#+, CL.mkVar "strandIndex"),CL.mkUnOp(CL.%&,CL.mkVar "selfIn")),
616                                           updateStm,                                           updateStm,
617                                           statusIf,                                           statusIf,
618                                           incStrand                                           incStrand
# Line 668  Line 664 
664                            ("outputSzb", CL.I_Exp(CL.mkSizeof(ToC.trTy outTy))),                            ("outputSzb", CL.I_Exp(CL.mkSizeof(ToC.trTy outTy))),
665  *)  *)
666                            ("update", fnPtr("update_method_t", "0")),                            ("update", fnPtr("update_method_t", "0")),
667                            ("print", fnPtr("print_method_t", name ^ "Print"))                            ("print", fnPtr("print_method_t", name ^ "_print"))
668                          ]                          ]
669                      end                      end
670                val desc = CL.D_Var([], CL.T_Named N.strandDescTy, N.strandDesc name, SOME descI)                val desc = CL.D_Var([], CL.T_Named N.strandDescTy, N.strandDesc name, SOME descI)
# Line 733  Line 729 
729                  cppDecl (genGlobalStruct (#shadowTy, !globals, RN.shadowGlobalsTy));                  cppDecl (genGlobalStruct (#shadowTy, !globals, RN.shadowGlobalsTy));
730  (* FIXME: does this really need to be a global? *)  (* FIXME: does this really need to be a global? *)
731                  cppDecl (CL.D_Var(["static"], globPtrTy, RN.globalsVarName, NONE));                  cppDecl (CL.D_Var(["static"], globPtrTy, RN.globalsVarName, NONE));
732                  cppDecl (genStrandTyDef (#shadowTy, strand, tyName));                  cppDecl (genStrandTyDef (#hostTy, strand, tyName));
733                  cppDecl  (!init_code);                  cppDecl  (!init_code);
734                  cppDecl (genStrandPrint strand);                  cppDecl (genStrandPrint strand);
735                  List.app cppDecl (List.rev (!topDecls));                  List.app cppDecl (List.rev (!topDecls));
# Line 802  Line 798 
798          fun init (Strand{name, tyName, code, init_code, ...}, params, init) = let          fun init (Strand{name, tyName, code, init_code, ...}, params, init) = let
799                val fName = RN.strandInit name                val fName = RN.strandInit name
800                val params =                val params =
801                      globalParam (globPtrTy, RN.globalsVarName) ::                      clParam ("",CL.T_Ptr(CL.T_Named tyName), "selfOut") ::
                     globalParam (CL.T_Ptr(CL.T_Named tyName), "selfOut") ::  
802                        List.map (fn (ToCL.V(ty, x)) => CL.PARAM([], ty, x)) params                        List.map (fn (ToCL.V(ty, x)) => CL.PARAM([], ty, x)) params
803                val initFn = CL.D_Func([], CL.voidTy, fName, params, init)                val initFn = CL.D_Func([], CL.voidTy, fName, params, init)
804                in                in
# Line 814  Line 809 
809          fun method (Strand{name, tyName, code,...}, methName, body) = let          fun method (Strand{name, tyName, code,...}, methName, body) = let
810                val fName = concat[name, "_", MethodName.toString methName]                val fName = concat[name, "_", MethodName.toString methName]
811                val params = [                val params = [
812                        globalParam (CL.T_Ptr(CL.T_Named tyName), "selfIn"),                        clParam ("",CL.T_Ptr(CL.T_Named tyName), "selfIn"),
813                        globalParam (CL.T_Ptr(CL.T_Named tyName), "selfOut"),                        clParam ("",CL.T_Ptr(CL.T_Named tyName), "selfOut"),
814                        globalParam (CL.T_Ptr(CL.T_Named (RN.globalsTy)), RN.globalsVarName),                        globalParam (CL.T_Ptr(CL.T_Named (RN.globalsTy)), RN.globalsVarName),
815                        CL.PARAM([],CL.T_Named(RN.imageDataType),RN.globalImageDataName)                        CL.PARAM([],CL.T_Named(RN.imageDataType),RN.globalImageDataName)
816                      ]                      ]

Legend:
Removed from v.1459  
changed lines
  Added in v.1460

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0