[Beignet] [PATCH 2/7] add helper functions in gbe::Program

Zhigang Gong zhigang.gong at linux.intel.com
Sat Apr 27 03:34:20 PDT 2013


LGTM. Thanks.

On Thu, Apr 25, 2013 at 02:21:19PM +0800, Homer Hsing wrote:
> for get global constant related information
> 
> Signed-off-by: Homer Hsing <homer.xing at intel.com>
> ---
>  backend/src/backend/program.cpp | 20 +++++++++++++++++++-
>  backend/src/backend/program.h   | 10 ++++++++++
>  backend/src/backend/program.hpp |  8 ++++++++
>  3 files changed, 37 insertions(+), 1 deletion(-)
> 
> diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
> index 0882e5a..38cc236 100644
> --- a/backend/src/backend/program.cpp
> +++ b/backend/src/backend/program.cpp
> @@ -63,9 +63,10 @@ namespace gbe {
>      return it->offset; // we found it!
>    }
>  
> -  Program::Program(void) {}
> +  Program::Program(void) : constantSet(NULL) {}
>    Program::~Program(void) {
>      for (auto &kernel : kernels) GBE_DELETE(kernel.second);
> +    if (constantSet) delete constantSet;
>    }
>  
>    BVAR(OCL_OUTPUT_GEN_IR, false);
> @@ -81,6 +82,7 @@ namespace gbe {
>    }
>  
>    bool Program::buildFromUnit(const ir::Unit &unit, std::string &error) {
> +    constantSet = new ir::ConstantSet(unit.getConstantSet());
>      const auto &set = unit.getFunctionSet();
>      const uint32_t kernelNum = set.size();
>      if (OCL_OUTPUT_GEN_IR) std::cout << unit;
> @@ -146,6 +148,18 @@ namespace gbe {
>      return p;
>    }
>  
> +  static size_t programGetGlobalConstantSize(gbe_program gbeProgram) {
> +    if (gbeProgram == NULL) return 0;
> +    const gbe::Program *program = (const gbe::Program*) gbeProgram;
> +    return program->getGlobalConstantSize();
> +  }
> +
> +  static void programGetGlobalConstantData(gbe_program gbeProgram, char *mem) {
> +    if (gbeProgram == NULL) return;
> +    const gbe::Program *program = (const gbe::Program*) gbeProgram;
> +    program->getGlobalConstantData(mem);
> +  }
> +
>    static uint32_t programGetKernelNum(gbe_program gbeProgram) {
>      if (gbeProgram == NULL) return 0;
>      const gbe::Program *program = (const gbe::Program*) gbeProgram;
> @@ -244,6 +258,8 @@ namespace gbe {
>  GBE_EXPORT_SYMBOL gbe_program_new_from_source_cb *gbe_program_new_from_source = NULL;
>  GBE_EXPORT_SYMBOL gbe_program_new_from_binary_cb *gbe_program_new_from_binary = NULL;
>  GBE_EXPORT_SYMBOL gbe_program_new_from_llvm_cb *gbe_program_new_from_llvm = NULL;
> +GBE_EXPORT_SYMBOL gbe_program_get_global_constant_size_cb *gbe_program_get_global_constant_size = NULL;
> +GBE_EXPORT_SYMBOL gbe_program_get_global_constant_data_cb *gbe_program_get_global_constant_data = NULL;
>  GBE_EXPORT_SYMBOL gbe_program_delete_cb *gbe_program_delete = NULL;
>  GBE_EXPORT_SYMBOL gbe_program_get_kernel_num_cb *gbe_program_get_kernel_num = NULL;
>  GBE_EXPORT_SYMBOL gbe_program_get_kernel_by_name_cb *gbe_program_get_kernel_by_name = NULL;
> @@ -269,6 +285,8 @@ namespace gbe
>    {
>      CallBackInitializer(void) {
>        gbe_program_new_from_source = gbe::programNewFromSource;
> +      gbe_program_get_global_constant_size = gbe::programGetGlobalConstantSize;
> +      gbe_program_get_global_constant_data = gbe::programGetGlobalConstantData;
>        gbe_program_delete = gbe::programDelete;
>        gbe_program_get_kernel_num = gbe::programGetKernelNum;
>        gbe_program_get_kernel_by_name = gbe::programGetKernelByName;
> diff --git a/backend/src/backend/program.h b/backend/src/backend/program.h
> index 4273a77..575196a 100644
> --- a/backend/src/backend/program.h
> +++ b/backend/src/backend/program.h
> @@ -69,6 +69,8 @@ enum gbe_curbe_type {
>    GBE_CURBE_GROUP_NUM_X,
>    GBE_CURBE_GROUP_NUM_Y,
>    GBE_CURBE_GROUP_NUM_Z,
> +  GBE_CURBE_GLOBAL_CONSTANT_OFFSET,
> +  GBE_CURBE_GLOBAL_CONSTANT_DATA,
>    GBE_CURBE_IMAGE_WIDTH,
>    GBE_CURBE_IMAGE_HEIGHT,
>    GBE_CURBE_IMAGE_DEPTH,
> @@ -104,6 +106,14 @@ typedef gbe_program (gbe_program_new_from_llvm_cb)(const char *fileName,
>                                                     size_t *err_size);
>  extern gbe_program_new_from_llvm_cb *gbe_program_new_from_llvm;
>  
> +/*! Get the size of global constants */
> +typedef size_t (gbe_program_get_global_constant_size_cb)(gbe_program gbeProgram);
> +extern gbe_program_get_global_constant_size_cb *gbe_program_get_global_constant_size;
> +
> +/*! Get the content of global constants */
> +typedef void (gbe_program_get_global_constant_data_cb)(gbe_program gbeProgram, char *mem);
> +extern gbe_program_get_global_constant_data_cb *gbe_program_get_global_constant_data;
> +
>  /*! Destroy and deallocate the given program */
>  typedef void (gbe_program_delete_cb)(gbe_program);
>  extern gbe_program_delete_cb *gbe_program_delete;
> diff --git a/backend/src/backend/program.hpp b/backend/src/backend/program.hpp
> index e7584d9..e754899 100644
> --- a/backend/src/backend/program.hpp
> +++ b/backend/src/backend/program.hpp
> @@ -27,6 +27,8 @@
>  
>  #include "backend/program.h"
>  #include "backend/context.hpp"
> +#include "ir/constant.hpp"
> +#include "ir/unit.hpp"
>  #include "sys/hash_map.hpp"
>  #include "sys/vector.hpp"
>  #include <string>
> @@ -157,11 +159,17 @@ namespace gbe {
>      bool buildFromLLVMFile(const char *fileName, std::string &error);
>      /*! Buils a program from a OCL string */
>      bool buildFromSource(const char *source, std::string &error);
> +    /*! Get size of the global constant arrays */
> +    size_t getGlobalConstantSize(void) const { return constantSet->getDataSize(); }
> +    /*! Get the content of global constant arrays */
> +    void getGlobalConstantData(char *mem) const { constantSet->getData(mem); }
>    protected:
>      /*! Compile a kernel */
>      virtual Kernel *compileKernel(const ir::Unit &unit, const std::string &name) = 0;
>      /*! Kernels sorted by their name */
>      hash_map<std::string, Kernel*> kernels;
> +    /*! Global (constants) outside any kernel */
> +    ir::ConstantSet *constantSet;
>      /*! Use custom allocators */
>      GBE_CLASS(Program);
>    };
> -- 
> 1.8.1.2
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list