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 1307, Sat Jun 11 13:58:02 2011 UTC revision 1308, Sat Jun 11 14:21:07 2011 UTC
# Line 130  Line 130 
130    (* TreeIL to target translations *)    (* TreeIL to target translations *)
131      structure Tr =      structure Tr =
132        struct        struct
       (* this function is used for the initially clause, so it generates OpenCL *)  
133          fun fragment (ENV{info, vMap, scope}, blk) = let          fun fragment (ENV{info, vMap, scope}, blk) = let
134                val (vMap, stms) = ToCL.trFragment (vMap, blk)                val (vMap, stms) = (case scope
135                         of GlobalScope => ToC.trFragment (vMap, blk)
136                          | _ => ToCL.trFragment (vMap, blk)
137                        (* end case *))
138                in                in
139                  (ENV{info=info, vMap=vMap, scope=scope}, stms)                  (ENV{info=info, vMap=vMap, scope=scope}, stms)
140                end                end
# Line 218  Line 220 
220                    prFn = ref(CL.D_Comment(["No Print Function"]))                    prFn = ref(CL.D_Comment(["No Print Function"]))
221                  })                  })
222        (* register the global initialization part of a program *)        (* register the global initialization part of a program *)
223    (* FIXME: unused code; can this be removed??
224            fun globalIndirects (globals,stms) = let            fun globalIndirects (globals,stms) = let
225                  fun getGlobals ({name,target as TargetUtil.TARGET_CL}::rest) =                  fun getGlobals ({name,target as TargetUtil.TARGET_CL}::rest) =
226                        CL.mkAssign(CL.mkIndirect(CL.mkVar RN.globalsVarName,name),CL.mkVar name)                        CL.mkAssign(CL.mkIndirect(CL.mkVar RN.globalsVarName,name),CL.mkVar name)
# Line 227  Line 230 
230                  in                  in
231                    stms @ getGlobals globals                    stms @ getGlobals globals
232                  end                  end
233    *)
234        (* register the code that is used to register command-line options for input variables *)        (* register the code that is used to register command-line options for input variables *)
235          fun inputs (Prog{topDecls, ...}, stm) = let          fun inputs (Prog{topDecls, ...}, stm) = let
236                val inputsFn = CL.D_Func(                val inputsFn = CL.D_Func(
# Line 372  Line 375 
375                  List.rev (List.map (fn x => (targetTy x, #var x)) (!state)),                  List.rev (List.map (fn x => (targetTy x, #var x)) (!state)),
376                  tyName)                  tyName)
377    
   
378          (* generates the load kernel function *)          (* generates the load kernel function *)
379    
380        (* generates the opencl buffers for the image data *)        (* generates the opencl buffers for the image data *)
# Line 386  Line 388 
388                          CL.mkVar RN.globalsVarName,                          CL.mkVar RN.globalsVarName,
389                          CL.mkUnOp(CL.%&,CL.mkVar errVar)                          CL.mkUnOp(CL.%&,CL.mkVar errVar)
390                        ]))                        ]))
   
391          fun genDataBuffers([],_,_) = []          fun genDataBuffers([],_,_) = []
392            | genDataBuffers((var,nDims)::globals,contextVar,errVar) = let            | genDataBuffers((var,nDims)::globals,contextVar,errVar) = let
393  (* FIXME: use CL constructors to  build expressions (not strings) *)  (* FIXME: use CL constructors to  build expressions (not strings) *)
394                val size = if nDims = 1                val size = if nDims = 1
395                      then CL.mkBinOp(CL.mkApply("sizeof",[CL.mkVar "float"]), CL.#*,                      then CL.mkBinOp(CL.mkApply("sizeof",[CL.mkVar "float"]), CL.#*,
396                                           CL.mkIndirect(CL.mkVar var, "size[0]"))                                           CL.mkIndirect(CL.mkVar var, "size[0]"))
397                                          else if nDims = 2 then                            else if nDims = 2
398                                          CL.mkBinOp(CL.mkApply("sizeof",[CL.mkVar "float"]), CL.#*,                              then CL.mkBinOp(CL.mkApply("sizeof",[CL.mkVar "float"]), CL.#*,
399                                            CL.mkIndirect(CL.mkVar var, concat["size[0]", " * ", var, "->size[1]"]))                                            CL.mkIndirect(CL.mkVar var, concat["size[0]", " * ", var, "->size[1]"]))
400                                          else                              else CL.mkBinOp(CL.mkApply("sizeof",[CL.mkVar "float"]), CL.#*,
                                          CL.mkBinOp(CL.mkApply("sizeof",[CL.mkVar "float"]), CL.#*,  
401                                            CL.mkIndirect(CL.mkVar var,concat["size[0]", " * ", var, "->size[1] * ", var, "->size[2]"]))                                            CL.mkIndirect(CL.mkVar var,concat["size[0]", " * ", var, "->size[1] * ", var, "->size[2]"]))
   
402                   in                   in
403                     CL.mkDecl(clMemoryTy, RN.addBufferSuffix var ,NONE)::                     CL.mkDecl(clMemoryTy, RN.addBufferSuffix var ,NONE)::
404                     CL.mkDecl(clMemoryTy, RN.addBufferSuffixData var ,NONE)::                     CL.mkDecl(clMemoryTy, RN.addBufferSuffixData var ,NONE)::
# Line 417  Line 416 
416                                                                  CL.mkUnOp(CL.%&,CL.mkVar errVar)])):: genDataBuffers(globals,contextVar,errVar)                                                                  CL.mkUnOp(CL.%&,CL.mkVar errVar)])):: genDataBuffers(globals,contextVar,errVar)
417                  end                  end
418                in                in
419                  [globalBufferDecl] @ [globalBuffer] @ genDataBuffers(globals,contextVar,errVar)                  globalBufferDecl :: globalBuffer :: genDataBuffers(globals,contextVar,errVar)
420                end                end
421    
422    
# Line 555  Line 554 
554                  List.app doVar globals                  List.app doVar globals
555                end                end
556    
557          fun genSrc (baseName, Prog{double,globals, topDecls, strands, initially,imgGlobals,numDims,...}) = let          fun genSrc (baseName, prog) = let
558                  val Prog{double, globals, topDecls, strands, initially, imgGlobals, numDims, ...} = prog
559                val clFileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "cl"}                val clFileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "cl"}
560                val cFileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "c"}                val cFileName = OS.Path.joinBaseExt{base=baseName, ext=SOME "c"}
561                val clOutS = TextIO.openOut clFileName                val clOutS = TextIO.openOut clFileName
# Line 592  Line 592 
592                    ]));                    ]));
593                  genGlobals (cppDecl, #hostTy, !globals);                  genGlobals (cppDecl, #hostTy, !globals);
594                  cppDecl (genGlobalStruct (#hostTy, !globals));                  cppDecl (genGlobalStruct (#hostTy, !globals));
595                  cppDecl (genStrandTyDef (#gpuTy, strand));                  cppDecl (genStrandTyDef (#hostTy, strand));
596                  cppDecl  (!init_code);                  cppDecl  (!init_code);
597                  cppDecl (genStrandPrint strand);                  cppDecl (genStrandPrint strand);
598                  List.app cppDecl (List.rev (!topDecls));                  List.app cppDecl (List.rev (!topDecls));

Legend:
Removed from v.1307  
changed lines
  Added in v.1308

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