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 1641, Fri Nov 18 12:44:32 2011 UTC revision 1642, Fri Nov 18 20:22:52 2011 UTC
# Line 15  Line 15 
15      structure ToCL = TreeToCL      structure ToCL = TreeToCL
16      structure N = CNames      structure N = CNames
17      structure P = Paths      structure P = Paths
18        structure HF = CLHeaderFrag
19        structure SF = CLSchedFrag
20    
21    (* revmap f l == List.rev(List.map f l) *)    (* revmap f l == List.rev(List.map f l) *)
22      fun revmap f = let      fun revmap f = let
# Line 559  Line 561 
561                        CL.PARAM([],CL.T_Named("cl_command_queue"), "cmdQ"),                        CL.PARAM([],CL.T_Named("cl_command_queue"), "cmdQ"),
562                        CL.PARAM([],CL.T_Named("int"), "argStart")                        CL.PARAM([],CL.T_Named("int"), "argStart")
563                      ]                      ]
564                val clGlobalBuffers = getGlobalDataBuffers(globals,!imgGlobals, "context", errVar)                val body = (case globals
565                val clGlobalArguments = genGlobalArguments(!imgGlobals, "argStart", "kernel", errVar)                             of [] => [CL.mkReturn(NONE)]
566                               |  _ => let
567                                 val clGlobalBuffers = getGlobalDataBuffers(globals,
568                                                                            !imgGlobals,
569                                                                            "context",
570                                                                            errVar)
571                                 val clGlobalArguments = genGlobalArguments(!imgGlobals,
572                                                                            "argStart",
573                                                                            "kernel",
574                                                                            errVar)
575              (* Body put all the statments together *)              (* Body put all the statments together *)
576                val body = CL.mkDecl(clIntTy, errVar, SOME(CL.I_Exp(CL.mkInt 0)))                              in
577                                    CL.mkDecl(clIntTy, errVar, SOME(CL.I_Exp(CL.mkInt 0)))
578                      :: clGlobalBuffers @ clGlobalArguments                      :: clGlobalBuffers @ clGlobalArguments
579                                end
580                            (*end of case*))
581                in                in
582                  CL.D_Func([],CL.voidTy,RN.globalsSetupName,params,CL.mkBlock(body))                  CL.D_Func([],CL.voidTy,RN.globalsSetupName,params,CL.mkBlock(body))
583                end                end
# Line 573  Line 587 
587                concat[line, "__global void *", RN.addBufferSuffixData name]                concat[line, "__global void *", RN.addBufferSuffixData name]
588            | genKeneralGlobalParams ([],line) = line            | genKeneralGlobalParams ([],line) = line
589            | genKeneralGlobalParams ((name,tyname)::rest, line) =            | genKeneralGlobalParams ((name,tyname)::rest, line) =
590                genKeneralGlobalParams(rest, concat[line, "__global void *", RN.addBufferSuffixData name, ":"])                genKeneralGlobalParams(rest, concat[line, "__global void *", RN.addBufferSuffixData name, ",\n"])
591    
592          fun genUpdateMethod (Strand{name, tyName, state,...},globals,imgGlobals) = let          fun genUpdateMethod (Strand{name, tyName, state,...},globals,imgGlobals) = let
593  (* FIXME: read the file using TextIO.inputAll *)  (* FIXME: read the file using TextIO.inputAll *)
# Line 591  Line 605 
605                val imageDataStms = List.map                val imageDataStms = List.map
606                        (fn (x,_) => concat[                        (fn (x,_) => concat[
607                            RN.globalImageDataName, ".", RN.imageDataName x, " = ",                            RN.globalImageDataName, ".", RN.imageDataName x, " = ",
608                            RN.addBufferSuffixData x, ";"                            RN.addBufferSuffixData x, ";","\n"
609                          ])                          ])
610                          (!imgGlobals)                          (!imgGlobals)
611                val placeHolders = [(RN.place_holders, tyName),                val placeHolders = [(RN.place_holders, tyName),
# Line 607  Line 621 
621                                                      of [] => ""                                                      of [] => ""
622                                                      |  _ => "__global Diderot_Globals_t *diderotGlobals"                                                      |  _ => "__global Diderot_Globals_t *diderotGlobals"
623                                                     (*end of case*))),                                                     (*end of case*))),
624                                      (RN.p_globalVar, (case !globals
625                                                        of [] => "0"
626                                                        |  _ => RN.globalsVarName
627                                                       (*end of case*))),
628                                      (RN.p_dataVar, (case !globals
629                                                        of [] => "0"
630                                                        |  _ => RN.globalImageDataName
631                                                       (*end of case*))),
632                                    (RN.p_dataPtr, genKeneralGlobalParams (!imgGlobals, "")),                                    (RN.p_dataPtr, genKeneralGlobalParams (!imgGlobals, "")),
633                                    (RN.p_dataAssign,  (case !imgGlobals                                    (RN.p_dataAssign,  (case !imgGlobals
634                                                      of [] => ""                                                      of [] => ""
635                                                      |  _ => concat["Diderot_data_ptr_t diderotDataPtrs;",                                                      |  _ => concat["Diderot_data_ptr_t diderotDataPtrs;\n",
636                                                       String.concat imageDataStms]                                                       String.concat imageDataStms]
637                                                     (*end of case*)))]                                                     (*end of case*)))]
638                in                in
# Line 739  Line 761 
761                val [strand as Strand{name, tyName, code, init_code, ...}] = strands                val [strand as Strand{name, tyName, code, init_code, ...}] = strands
762                in                in
763                (* Generate the OpenCl file *)                (* Generate the OpenCl file *)
764                    (*Retrieve the Header information *)
765                    clppDecl (CL.D_Verbatim[HF.text]);
766                  clppDecl (CL.D_Verbatim[                  clppDecl (CL.D_Verbatim[
767                    (* if the target supports OpenCL 1.1, then 32-bit atomics are part of the core. *)                    (case !globals
768                      "#if (DIDEROT_CL_VERSION == 100)\n",                       of [] => concat["typedef void ", RN.globalsTy, ";\n"]
769                      "#  pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics: enable\n",                        |  _ => ""
770                      "#  pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics: enable\n",                       (*end of case*))
771                      "#endif\n",                    ]);
772                      if double                  clppDecl (CL.D_Verbatim[
773                        then "#define DIDEROT_DOUBLE_PRECISION\n"                    (case !imgGlobals
774                        else "#define DIDEROT_SINGLE_PRECISION\n",                       of [] => concat["typedef void * ", RN.imageDataType, ";\n"]
775                      "#define DIDEROT_INT\n",                        |  _ => ""
776                      "#define DIDEROT_TARGET_CL\n",                       (*end of case*))
                     "#include \"Diderot/cl-diderot.h\"\n"  
777                    ]);                    ]);
778                    (*Retrieve the Scheduler kernels and functions *)
779                    clppDecl (CL.D_Verbatim[SF.text]);
780                  clppDecl (genGlobalStruct (#gpuTy, !globals, RN.globalsTy));                  clppDecl (genGlobalStruct (#gpuTy, !globals, RN.globalsTy));
781                  clppDecl (genImageDataStruct(!imgGlobals,RN.imageDataType));                  clppDecl (genImageDataStruct(!imgGlobals,RN.imageDataType));
782                  clppDecl (genStrandTyDef(#gpuTy, strand,tyName));                  clppDecl (genStrandTyDef(#gpuTy, strand,tyName));
# Line 767  Line 792 
792                      "#define DIDEROT_TARGET_CL\n",                      "#define DIDEROT_TARGET_CL\n",
793                      "#include \"Diderot/diderot.h\"\n"                      "#include \"Diderot/diderot.h\"\n"
794                    ]);                    ]);
795                    cppDecl (CL.D_Verbatim[
796                      (case !globals
797                         of [] => concat["typedef void ", RN.globalsTy,";\n"]
798                          |  _ => ""
799                         (*end of case*))
800                      ]);
801                  cppDecl (CL.D_Var(["static"], CL.charPtr, "ProgramName",                  cppDecl (CL.D_Var(["static"], CL.charPtr, "ProgramName",
802                    SOME(CL.I_Exp(CL.mkStr progName))));                    SOME(CL.I_Exp(CL.mkStr progName))));
803                  cppDecl (genGlobalStruct (#hostTy, !globals, RN.globalsTy));                  cppDecl (genGlobalStruct (#hostTy, !globals, RN.globalsTy));

Legend:
Removed from v.1641  
changed lines
  Added in v.1642

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