Skip to content
Snippets Groups Projects

Draft: Fused-multiply-add vectorization

Open Michael Kuron requested to merge fma into master
Viewing commit 8bebd100
Show latest version
3 files
+ 36
20
Preferences
Compare changes
Files
3
@@ -571,6 +571,11 @@ class CustomSympyPrinter(CCodePrinter):
return f"(({self._print(expr.args[0])}) / ({self._print(expr.args[1])}))"
elif expr.func == DivFunc:
return f'(({self._print(expr.divisor)}) / ({self._print(expr.dividend)}))'
elif isinstance(expr, Fma):
a = expr.args[0] * (-1 if expr.instruction[0] == '-' else 1)
b = expr.args[1]
c = expr.args[2] * (-1 if expr.instruction[-1] == '-' else 1)
return f"fma({self._print(a)}, {self._print(b)}, {self._print(c)})"
else:
name = expr.name if hasattr(expr, 'name') else expr.__class__.__name__
arg_str = ', '.join(self._print(a) for a in expr.args)
@@ -729,6 +734,9 @@ class VectorizedCustomSympyPrinter(CustomSympyPrinter):
elif isinstance(expr, fast_inv_sqrt):
raise ValueError("fast_inv_sqrt is only supported for Taget.GPU")
elif isinstance(expr, Fma):
result = self._scalarFallback('_print_Function', expr)
if result:
return result
return self.instruction_set[expr.instruction].format(self._print(expr.args[0]), self._print(expr.args[1]),
self._print(expr.args[2]), **self._kwargs)
elif isinstance(expr, vec_any) or isinstance(expr, vec_all):