[Beignet] [PATCH 3/3] Re-apply "improve the build performance of vector type built-in function."

Zhigang Gong zhigang.gong at linux.intel.com
Fri Oct 10 18:22:09 PDT 2014


This patch LGTM, although just as we discussed, this patch
will not accelerate most of the builtin vector function's
compilation. As those functions are precompiled with normal
optimization options, and the for loop will be unrolled by
default.

We may need to change the precompilation logic and don't
use the default compilation option in the future.

On Fri, Oct 10, 2014 at 03:01:27PM +0800, Ruiling Song wrote:
> This reverts commit c65c0087166a2194ece457d8739d06e86a857dbe.
> 
> As we have handled wide integers, we can enable it now.
> ---
>  backend/src/libocl/script/gen_vector.py |   45 ++++++++++++++++++++++++++-----
>  1 file changed, 39 insertions(+), 6 deletions(-)
> 
> diff --git a/backend/src/libocl/script/gen_vector.py b/backend/src/libocl/script/gen_vector.py
> index a91dfcf..de28552 100755
> --- a/backend/src/libocl/script/gen_vector.py
> +++ b/backend/src/libocl/script/gen_vector.py
> @@ -289,9 +289,42 @@ class builtinProto():
>              formatStr += ';'
>              self.append(formatStr)
>              return formatStr
> -        formatStr = self.append(formatStr, '{{return ({0}{1})('.format(vtype[0], vtype[1]))
> -        self.indent = len(formatStr)
> -        for j in range(0, vtype[1]):
> +        if self.functionName != 'select' and ptypeSeqs[0] == ptypeSeqs[self.paramCount-1] and ptype[1] > 4:
> +            formatStr += '\n{ \n  union{'
> +            formatStr = self.append(formatStr, '    {0} va[{1}];'.format(vtype[0], vtype[1]))
> +            formatStr = self.append(formatStr, '    {0}{1} vv{2};'.format(vtype[0], vtype[1], vtype[1]))
> +            formatStr += '\n  }uret;'
> +            formatStr += '\n  union{'
> +            formatStr = self.append(formatStr, '    {0} pa[{1}];'.format(ptype[0], ptype[1]))
> +            formatStr = self.append(formatStr, '    {0}{1} pv{2};'.format(ptype[0], ptype[1], ptype[1]))
> +            formatStr += '\n  }'
> +            for n in range(0, self.paramCount):
> +              formatStr += 'usrc{0}'.format(n)
> +              if n+1 != self.paramCount:
> +                formatStr +=', '
> +            formatStr += ';'
> +
> +            for n in range(0, self.paramCount):
> +              formatStr = self.append(formatStr, '  usrc{0}.pv{1} = param{2};'.format(n, ptype[1], n))
> +            formatStr = self.append(formatStr, '  for(int i =0; i < {0}; i++)'.format(ptype[1]))
> +            formatStr += '\n    uret.va[i] = '
> +            if self.prefix == 'relational' and self.functionName != 'bitselect' and self.functionName != 'select':
> +              formatStr += '-'
> +            formatStr += '{0}('.format(self.functionName)
> +
> +            for n in range(0, self.paramCount):
> +              formatStr += 'usrc{0}.pa[i]'.format(n)
> +              if n+1 != self.paramCount:
> +                formatStr +=', '
> +            formatStr += ');'
> +            formatStr = self.append(formatStr, ' return uret.vv{0};'.format(vtype[1]))
> +            formatStr += '\n}'
> +            formatStr = self.append(formatStr)
> +            return formatStr
> +        else:
> +          formatStr = self.append(formatStr, '{{return ({0}{1})('.format(vtype[0], vtype[1]))
> +          self.indent = len(formatStr)
> +          for j in range(0, vtype[1]):
>              if (j != 0):
>                  formatStr += ','
>                  if (j + 1) % 2 == 0:
> @@ -326,10 +359,10 @@ class builtinProto():
>  
>              formatStr += ')'
>  
> -        formatStr += '); }\n'
> -        self.append(formatStr)
> +          formatStr += '); }\n'
> +          self.append(formatStr)
>  
> -        return formatStr
> +          return formatStr
>  
>      def output(self):
>          for line in self.outputStr:
> -- 
> 1.7.10.4
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list