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 1398, Wed Jun 29 17:20:05 2011 UTC revision 1421, Thu Jun 30 21:22:28 2011 UTC
# Line 28  Line 28 
28              | _ => raise Fail(concat["TreeToC.trType(", Ty.toString ty, ")"])              | _ => raise Fail(concat["TreeToC.trType(", Ty.toString ty, ")"])
29            (* end case *))            (* end case *))
30    
31       (* translate TreeIL types to shadow types *)
32        fun convertToShadow (ty,name) = (case ty
33               of Ty.IVecTy 1 => CL.mkAssign(CL.mkSelect(CL.mkVar(RN.shadowGlaobalsName),name),
34                                    CL.mkIndirect(CL.mkVar(RN.globalsVarName), name))
35                | Ty.TensorTy[n]=> CL.mkCall(RN.convertToShadowVec n,[
36                             CL.mkSelect(CL.mkVar(RN.shadowGlaobalsName),name),
37                              CL.mkIndirect(CL.mkVar(RN.globalsVarName), name)])
38                | Ty.ImageTy(ImageInfo.ImgInfo{dim, ...}) =>  CL.mkCall(RN.shadowImageFunc dim, [
39                             CL.mkVar "context",
40                             CL.mkUnOp(CL.%&,CL.mkSelect(CL.mkVar(RN.shadowGlaobalsName),name)),
41                             CL.mkIndirect(CL.mkVar(RN.globalsVarName),name)
42                             ])
43                | Ty.TensorTy[n, m] => CL.mkCall(RN.convertToShadowMat(m,n),[
44                             CL.mkSelect(CL.mkVar(RN.shadowGlaobalsName),name),
45                              CL.mkIndirect(CL.mkVar(RN.globalsVarName), name)])
46                | _ => CL.mkAssign(CL.mkSelect(CL.mkVar(RN.shadowGlaobalsName),name),
47                                    CL.mkIndirect(CL.mkVar(RN.globalsVarName), name))
48               (*end case *))
49    
50    (* helper functions for specifying parameters in various address spaces *)    (* helper functions for specifying parameters in various address spaces *)
51      fun clParam (spc, ty, x) = CL.PARAM([spc], ty, x)      fun clParam (spc, ty, x) = CL.PARAM([spc], ty, x)
52      fun globalParam (ty, x) = CL.PARAM(["__global"], ty, x)      fun globalParam (ty, x) = CL.PARAM(["__global"], ty, x)
# Line 35  Line 54 
54      fun localParam (ty, x) = CL.PARAM(["__local"], ty, x)      fun localParam (ty, x) = CL.PARAM(["__local"], ty, x)
55      fun privateParam (ty, x) = CL.PARAM(["__private"], ty, x)      fun privateParam (ty, x) = CL.PARAM(["__private"], ty, x)
56    
57      (* OpenCL global pointer type *)
58        fun globalPtr ty = CL.T_Qual("__global", CL.T_Ptr ty)
59    
60    (* C variable translation *)    (* C variable translation *)
61      structure TrCVar =      structure TrCVar =
62        struct        struct
# Line 79  Line 101 
101              hostTy : CL.ty,             (* variable type on Host (i.e., C type) *)              hostTy : CL.ty,             (* variable type on Host (i.e., C type) *)
102              shadowTy : CL.ty,           (* host-side shadow type of GPU type *)              shadowTy : CL.ty,           (* host-side shadow type of GPU type *)
103              gpuTy : CL.ty,              (* variable's type on GPU (i.e., OpenCL type) *)              gpuTy : CL.ty,              (* variable's type on GPU (i.e., OpenCL type) *)
104                hToS: stm,                                  (*the statement that converts the variable to its shadow representation *)
105              var : CL.var                (* variable name *)              var : CL.var                (* variable name *)
106            }            }
107    
# Line 173  Line 196 
196                  hostTy = ToC.trType ty,                  hostTy = ToC.trType ty,
197                  shadowTy = shadowTy ty,                  shadowTy = shadowTy ty,
198                  gpuTy = ToCL.trType ty,                  gpuTy = ToCL.trType ty,
199                    hToS = convertToShadow(ty,name),
200                  var = name                  var = name
201                }                }
202          fun name (ToCL.V(_, name)) = name          fun name (ToCL.V(_, name)) = name
# Line 406  Line 430 
430                fun errorFn msg = CL.mkIfThen(CL.mkBinOp(CL.E_Var errVar, CL.#!=, CL.E_Var "CL_SUCCESS"),                fun errorFn msg = CL.mkIfThen(CL.mkBinOp(CL.E_Var errVar, CL.#!=, CL.E_Var "CL_SUCCESS"),
431                      CL.mkBlock([CL.mkCall("fprintf",[CL.E_Var "stderr", CL.E_Str msg]),                      CL.mkBlock([CL.mkCall("fprintf",[CL.E_Var "stderr", CL.E_Str msg]),
432                      CL.mkCall("exit",[CL.mkInt 1])]))                      CL.mkCall("exit",[CL.mkInt 1])]))
433                val shadowTypeDecl = CL.mkDecl(CL.T_Named(RN.shadowGlobalsTy),RN.shadowGlaobalsName,NONE)                val shadowTypeDecl =
434                val globalImagesToShadowStms = List.map (fn (var,nDims) =>                      CL.mkDecl(CL.T_Named(RN.shadowGlobalsTy), RN.shadowGlaobalsName, NONE)
435                      CL.mkCall((RN.shadowImageFunc nDims), [                val globalToShadowStms = List.map (fn (x:mirror_var) => #hToS x ) globals
                          CL.mkVar contextVar,  
                          CL.mkUnOp(CL.%&,CL.mkSelect(CL.mkVar(RN.shadowGlaobalsName),var)),  
                          CL.mkIndirect(CL.mkVar(RN.globalsVarName),var)  
                          ])) imgGlobals  
               (* Converts only the non-image-field types into their corresponding global shadow types *)  
               fun convertToShadow ((global:mirror_var)::rest,(imgGlobal,nDim)::restImages) =  
                      if (#var global) = imgGlobal then  
                         convertToShadow(rest,restImages)  
                     else  
                         CL.mkAssign(CL.mkSelect(CL.mkVar(RN.shadowGlaobalsName),#var global),  
                                 CL.mkIndirect(CL.mkVar(RN.globalsVarName), #var global))::  
                                     convertToShadow(rest,(imgGlobal,nDim)::restImages)  
                 | convertToShadow ([], _) = []  
                 | convertToShadow ((global:mirror_var)::rest, []) =  
                       CL.mkAssign(CL.mkSelect(CL.mkVar(RN.shadowGlaobalsName),#var global),  
                                 CL.mkIndirect(CL.mkVar(RN.globalsVarName), #var global))::  
                                     convertToShadow(rest,[])  
   
               val globalToShadowStms = convertToShadow(globals,imgGlobals)  
436                val globalBufferDecl = CL.mkDecl(clMemoryTy,concat[RN.globalsVarName,"_cl"],NONE)                val globalBufferDecl = CL.mkDecl(clMemoryTy,concat[RN.globalsVarName,"_cl"],NONE)
437                val globalBuffer = CL.mkAssign(CL.mkVar(concat[RN.globalsVarName,"_cl"]),                val globalBuffer = CL.mkAssign(CL.mkVar(concat[RN.globalsVarName,"_cl"]),
438                      CL.mkApply("clCreateBuffer", [                      CL.mkApply("clCreateBuffer", [
439                          CL.mkVar contextVar,                          CL.mkVar contextVar,
440                          CL.mkVar "CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR",                          CL.mkBinOp(CL.mkVar "CL_MEM_READ_ONLY", CL.#|, CL.mkVar "CL_MEM_COPY_HOST_PTR"),
441                          CL.mkSizeof(CL.T_Named RN.shadowGlobalsTy),                          CL.mkSizeof(CL.T_Named RN.shadowGlobalsTy),
442                          CL.mkUnOp(CL.%&,CL.mkVar RN.shadowGlaobalsName),                          CL.mkUnOp(CL.%&,CL.mkVar RN.shadowGlaobalsName),
443                          CL.mkUnOp(CL.%&,CL.mkVar errVar)                          CL.mkUnOp(CL.%&,CL.mkVar errVar)
# Line 455  Line 460 
460                          genDataBuffers(globals,contextVar,errVar,errFn)                          genDataBuffers(globals,contextVar,errVar,errFn)
461                      end                      end
462                in                in
463                  [shadowTypeDecl] @ globalImagesToShadowStms @ globalToShadowStms                  [shadowTypeDecl] @ globalToShadowStms
464                  @ [globalBufferDecl, globalBuffer,errorFn(globalBuffErr)]                  @ [globalBufferDecl, globalBuffer,errorFn(globalBuffErr)]
465                  @ genDataBuffers(imgGlobals,contextVar,errVar,errorFn)                  @ genDataBuffers(imgGlobals,contextVar,errVar,errorFn)
466                end                end
# Line 520  Line 525 
525                val outState = "strand_out"                val outState = "strand_out"
526                val tempVar = "tmp"                val tempVar = "tmp"
527                val params = [                val params = [
528                        CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named tyName), "selfIn"),                        globalParam(CL.T_Ptr(CL.T_Named tyName), "selfIn"),
529                        CL.PARAM(["__global"], CL.T_Ptr(CL.T_Named tyName), "selfOut"),                        globalParam(CL.T_Ptr(CL.T_Named tyName), "selfOut"),
530                        CL.PARAM(["__global"], CL.T_Ptr(CL.T_Num(RawTypes.RT_UInt8)), "strandStatus"),                        globalParam(CL.T_Ptr(CL.T_Num(RawTypes.RT_UInt8)), "strandStatus"),
531                        CL.PARAM(["__global"], CL.intTy, "width"),                        CL.PARAM([], CL.intTy, "width"),
532                        CL.PARAM(["__global"], globPtrTy, RN.globalsVarName)                        globalParam(globPtrTy, RN.globalsVarName)
533                      ] @ genKeneralGlobalParams(!imgGlobals)                      ] @ genKeneralGlobalParams(!imgGlobals)
534                val thread_ids = if nDims = 1                val thread_ids = if nDims = 1
535                        then [                        then [
# Line 540  Line 545 
545                          ]                          ]
546                      else raise Fail "nDims > 2"                      else raise Fail "nDims > 2"
547                val strandDecl = [                val strandDecl = [
548                        CL.mkDecl(CL.T_Ptr(CL.T_Named (concat["__global ",tyName])), inState, NONE),                        CL.mkAttrDecl(["__global"], CL.T_Ptr(CL.T_Named tyName), inState, NONE),
549                        CL.mkDecl(CL.T_Ptr(CL.T_Named (concat["__global ",tyName])), outState, NONE),                        CL.mkAttrDecl(["__global"], CL.T_Ptr(CL.T_Named tyName), outState, NONE),
550                        CL.mkDecl(CL.T_Ptr(CL.T_Named (concat["__global ",tyName])), tempVar, NONE)                        CL.mkAttrDecl(["__global"], CL.T_Ptr(CL.T_Named tyName), tempVar, NONE)
551                      ]                      ]
552                val imageDataDecl = CL.mkDecl(CL.T_Named(RN.imageDataType),RN.globalImageDataName,NONE)                val imageDataDecl = CL.mkDecl(CL.T_Named(RN.imageDataType),RN.globalImageDataName,NONE)
553                val imageDataStms = List.map (fn (x,_) =>                val imageDataStms = List.map (fn (x,_) =>
# Line 604  Line 609 
609    
610        (* generate a global structure type definition from the image data of the image globals *)        (* generate a global structure type definition from the image data of the image globals *)
611          fun genImageDataStruct (imgGlobals, tyName) = let          fun genImageDataStruct (imgGlobals, tyName) = let
612                val globs = List.map (fn (x,_) => (CL.T_Ptr(CL.imageDataTy "__global"),(RN.imageDataName x))) imgGlobals                val globs = List.map
613                        (fn (x, _) => (globalPtr CL.voidTy, RN.imageDataName x))
614                          imgGlobals
615                in                in
616                  CL.D_StructDef(globs, tyName)                  CL.D_StructDef(globs, tyName)
617                end                end

Legend:
Removed from v.1398  
changed lines
  Added in v.1421

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