| 202 | template <typename LhsScalar, typename RhsScalar, typename AccumScalar, |
| 203 | typename DstScalar, QuantizationFlavor quantization_flavor> |
| 204 | void ValidateParams( |
| 205 | const MatrixParams<LhsScalar>& lhs_params, |
| 206 | const MatrixParams<RhsScalar>& rhs_params, |
| 207 | const MatrixParams<DstScalar>& dst_params, |
| 208 | const GemmParams<AccumScalar, DstScalar, quantization_flavor>& params) { |
| 209 | (void)detail::ValidateTypes<LhsScalar, RhsScalar, AccumScalar, DstScalar, |
| 210 | quantization_flavor>(); |
| 211 | ValidateGemmParams(params); |
| 212 | // For now, Gemm only supports this particular combination of storage orders. |
| 213 | // Actually the generic ruy path already supports all combinations (with |
| 214 | // various performance penalties). On the other hand, gemmlowp and Eigen |
| 215 | // paths would require more source code and larger binary code to handle |
| 216 | // other combinations (because orders are template parameters in gemmlowp |
| 217 | // and Eigen). Since this is TFLite's own internal Gemm library, there is |
| 218 | // no point in supporting more than what TFlite currently uses, and that |
| 219 | // is for now this single combination. |
| 220 | TFLITE_DCHECK(lhs_params.order == Order::kRowMajor); |
| 221 | TFLITE_DCHECK(rhs_params.order == Order::kColMajor); |
| 222 | TFLITE_DCHECK(dst_params.order == Order::kColMajor); |
| 223 | } |
| 224 | |
| 225 | } // namespace cpu_backend_gemm |
| 226 |
no test coverage detected