[Beignet] [PATCH V3] GBE: add param to switch the behavior of math func

Zhigang Gong zhigang.gong at linux.intel.com
Thu Feb 20 19:14:20 PST 2014


LGTM, will push latter, thanks.

On Tue, Feb 18, 2014 at 05:30:27AM +0800, Guo Yejun wrote:
> Add OCL_STRICT_CONFORMANCE to switch the behavior of math func,
> The funcs will be high precision with perf drops if it is 1, Fast
> path with good enough precision will be selected if it is 0.
> 
> This change is to add the code basis, with 'sin' and 'cos' implemented
> as examples, other math functions support will be added later.
> 
> Signed-off-by: Guo Yejun <yejun.guo at intel.com>
> ---
>  backend/src/backend/program.cpp      |   12 ++++++++++++
>  backend/src/builtin_vector_proto.def |    4 ++++
>  backend/src/ocl_stdlib.tmpl.h        |    8 ++++++++
>  3 files changed, 24 insertions(+)
> 
> diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
> index 2492a8b..98fcded 100644
> --- a/backend/src/backend/program.cpp
> +++ b/backend/src/backend/program.cpp
> @@ -459,12 +459,20 @@ namespace gbe {
>  
>    /*********************** End of Program class member function *************************/
>  
> +#define REDEF_MATH_FUNC(x) "#ifdef "#x"\n#undef "#x"\n#endif\n#define "#x" __gen_ocl_internal_fastpath_"#x"\n"
> +  std::string ocl_mathfunc_fastpath_str =
> +    REDEF_MATH_FUNC(sin)
> +    REDEF_MATH_FUNC(cos)
> +    "\n"
> +  ;
> +
>    static void programDelete(gbe_program gbeProgram) {
>      gbe::Program *program = (gbe::Program*)(gbeProgram);
>      GBE_SAFE_DELETE(program);
>    }
>  
>    BVAR(OCL_OUTPUT_BUILD_LOG, false);
> +  BVAR(OCL_STRICT_CONFORMANCE, true);
>    SVAR(OCL_PCH_PATH, PCH_OBJECT_DIR);
>    SVAR(OCL_PCM_PATH, PCM_OBJECT_DIR);
>  
> @@ -760,6 +768,10 @@ namespace gbe {
>      } else
>        fwrite(ocl_stdlib_str.c_str(), strlen(ocl_stdlib_str.c_str()), 1, clFile);
>  
> +    if (!OCL_STRICT_CONFORMANCE) {
> +        fwrite(ocl_mathfunc_fastpath_str.c_str(), strlen(ocl_mathfunc_fastpath_str.c_str()), 1, clFile);
> +    }
> +
>      // Write the source to the cl file
>      fwrite(source, strlen(source), 1, clFile);
>      fclose(clFile);
> diff --git a/backend/src/builtin_vector_proto.def b/backend/src/builtin_vector_proto.def
> index 4393ad5..7bc7c48 100644
> --- a/backend/src/builtin_vector_proto.def
> +++ b/backend/src/builtin_vector_proto.def
> @@ -129,6 +129,10 @@ gentype tanpi (gentype x)
>  gentype tgamma (gentype)
>  gentype trunc (gentype)
>  
> +##math function fast path
> +gentype __gen_ocl_internal_fastpath_sin (gentype)
> +gentype __gen_ocl_internal_fastpath_cos (gentype)
> +
>  ##half_native_math
>  #gentype half_cos (gentype x)
>  #gentype half_divide (gentype x, gentype y)
> diff --git a/backend/src/ocl_stdlib.tmpl.h b/backend/src/ocl_stdlib.tmpl.h
> index d191b8e..6f60577 100755
> --- a/backend/src/ocl_stdlib.tmpl.h
> +++ b/backend/src/ocl_stdlib.tmpl.h
> @@ -4462,6 +4462,14 @@ INLINE_OVERLOADABLE  size_t get_image_array_size(image1d_array_t image)
>    { return __gen_ocl_get_image_array_size(image); }
>  #endif
>  
> +INLINE_OVERLOADABLE float __gen_ocl_internal_fastpath_sin(float x) {
> +    return native_sin(x);
> +}
> +
> +INLINE_OVERLOADABLE float __gen_ocl_internal_fastpath_cos(float x) {
> +    return native_cos(x);
> +}
> +
>  #pragma OPENCL EXTENSION cl_khr_fp64 : disable
>  
>  #undef DECL_IMAGE
> -- 
> 1.7.9.5
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list