[MatMul] Add implementation of MatMul export as MatMulCPP
Context
Add implementation of export for MAtMul in exportCPP.
Choice to provide a dedicated matmul.hpp kernel as mapping to FC does not really scale to 2-Dims and N-dims matmults,
- supports scalar/1D inputs as MatMul::forwardDims does, see below
- provision for activation as done in elemwise operators
- new kernel matmul.hpp provided
- as of now do not support >2D inputs/broadcasts, see below
Notes:
- 2D+ support: This change does no include the support for >2D inputs. It would require managing multi broadcast which is also not supported for CPP export of elemwise operators. This support is delayed until a further change factorizing multi-broadcast on elemwise/matmul and after availability of a more comprehensive unit tests suite.
- scalar support: added scalar support, i.e.: 2 @ 3 == 6, which is actually equivalent to [2] @ [3] == 6 (or with mul operator: 2 * 3 == 6)
I added this support as in the aidge_core defined MatMul::forwardDims(), scalar @ scalar -> scalar is supported (forwards a scalar dim)
Note, though that this is more general than
np.matmul
which does not support scalar inputs, don't know if it was expected. This seems reasonable to me, but for instance the backend_cpu does not support it.
Modified files
Add in operator export file operators.py
the single class MatMulCPP
,
plus the templates/kernel files.
Detailed major modifications
No major modification. Feature added as Matmul is now supported in export CPP.
TODO
No TODO forecasted, as explained above I prefer to add the >2D inputs support at a later stage if you don't mind.
Edited by Christophe Guillon