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 1350, Wed Jun 15 16:54:21 2011 UTC revision 1351, Mon Jun 20 14:48:00 2011 UTC
# Line 387  Line 387 
387                  List.rev (List.map (fn x => (targetTy x, #var x)) (!state)),                  List.rev (List.map (fn x => (targetTy x, #var x)) (!state)),
388                  tyName)                  tyName)
389    
390            fun genStrandCopy(Strand{tyName,name,state,...}) = let
391                  val params = [
392                          CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named tyName), "selfIn"),
393                          CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named tyName), "selfOut")
394                      ]
395                    val assignStms = List.rev(List.map(fn x => CL.mkAssign(CL.mkIndirect(CL.E_Var "selfOut", #var x),
396                                                                                                                                    CL.mkIndirect(CL.E_Var "selfIn", #var x))) (!state))
397                     in
398                            CL.D_Func([""], CL.voidTy, RN.strandCopy name, params,CL.mkBlock(assignStms))
399                     end
400    
401        (* generates the load kernel function *)        (* generates the load kernel function *)
402    
403        (* generates the opencl buffers for the image data *)        (* generates the opencl buffers for the image data *)
# Line 546  Line 557 
557                        CL.mkDecl(CL.T_Ptr(CL.T_Named (concat["__global ",tyName])), outState, NONE),                        CL.mkDecl(CL.T_Ptr(CL.T_Named (concat["__global ",tyName])), outState, NONE),
558                        CL.mkDecl(CL.T_Ptr(CL.T_Named (concat["__global ",tyName])), tempVar, NONE)                        CL.mkDecl(CL.T_Ptr(CL.T_Named (concat["__global ",tyName])), tempVar, NONE)
559                      ]                      ]
560                val barrierCode = CL.mkIfThen(CL.mkBinOp(CL.E_Var "status",CL.#==,CL.E_Var "DIDEROT_ACTIVE"),                val barrierCode = CL.mkCall(RN.strandCopy name, [CL.E_Var outState, CL.E_Var inState])
                                                 CL.mkBlock ([CL.mkAssign(CL.E_Var tempVar, CL.E_Var inState),  
                                                              CL.mkAssign(CL.E_Var inState, CL.E_Var outState),  
                                                              CL.mkAssign(CL.E_Var outState, CL.E_Var tempVar)]))  
561                val barrierStm = CL.mkCall("barrier",[CL.E_Var "CLK_LOCAL_MEM_FENCE"])                val barrierStm = CL.mkCall("barrier",[CL.E_Var "CLK_LOCAL_MEM_FENCE"])
562                val index = if nDims = 1 then                val index = if nDims = 1 then
563                          CL.mkStr "x"                          CL.mkStr "x"
# Line 567  Line 575 
575                val status = CL.mkDecl(CL.intTy, "status", SOME(CL.I_Exp(CL.mkSubscript(CL.mkVar "strandStatus",index))))                val status = CL.mkDecl(CL.intTy, "status", SOME(CL.I_Exp(CL.mkSubscript(CL.mkVar "strandStatus",index))))
576                val strandInitStm = CL.mkCall(RN.strandInit name, [                val strandInitStm = CL.mkCall(RN.strandInit name, [
577                        CL.E_Var RN.globalsVarName,                        CL.E_Var RN.globalsVarName,
578                        CL.E_Var inState,                        CL.E_Var outState,
579                        CL.E_Var "x",                        CL.E_Var "x",
580  (* FIXME: if nDims = 1, then "y" is not defined! the arguments to this call should really come from  (* FIXME: if nDims = 1, then "y" is not defined! the arguments to this call should really come from
581   * the initially code!   * the initially code!
# Line 578  Line 586 
586                      @ strandDecl                      @ strandDecl
587                      @ strandObjects                      @ strandObjects
588                      @ [strandInitStm,status]                      @ [strandInitStm,status]
589                val while_exp = CL.mkBinOp(                val while_exp = CL.mkBinOp(CL.mkVar "status",CL.#==, CL.mkVar RN.kActive)
                     CL.mkBinOp(CL.mkVar "status",CL.#!=, CL.mkVar RN.kStabilize),  
                     CL.#&&,  
                     CL.mkBinOp(CL.mkVar "status", CL.#!=, CL.mkVar RN.kDie))  
590                val whileBody = CL.mkBlock ([barrierCode,barrierStm] @ [                val whileBody = CL.mkBlock ([barrierCode,barrierStm] @ [
591                        CL.mkAssign(CL.mkVar "status",                        CL.mkAssign(CL.mkVar "status",
592                          CL.mkApply(RN.strandUpdate name,                          CL.mkApply(RN.strandUpdate name,
# Line 665  Line 670 
670                  clppDecl (genGlobalStruct (#gpuTy, !globals));                  clppDecl (genGlobalStruct (#gpuTy, !globals));
671                  clppDecl (genStrandTyDef(#gpuTy, strand));                  clppDecl (genStrandTyDef(#gpuTy, strand));
672                  clppDecl  (!init_code);                  clppDecl  (!init_code);
673                    clppDecl  (genStrandCopy(strand));
674                  List.app clppDecl (!code);                  List.app clppDecl (!code);
675                  clppDecl (genKernelFun (strand, !numDims, globals, imgGlobals));                  clppDecl (genKernelFun (strand, !numDims, globals, imgGlobals));
676                (* Generate the Host C file *)                (* Generate the Host C file *)

Legend:
Removed from v.1350  
changed lines
  Added in v.1351

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