#pragma once #include #include #include #include #include #include #include "./StreamingBasisFunction.h" #include "../../sse_mathfun.h" namespace NeuralNetwork { namespace BasisFunction { class Linear: public StreamingBasisFunction { public: Linear() {} inline virtual float operator()(const std::vector& weights, const std::vector& input) const override { #ifdef USE_AVX //TODO: check sizes!!! std::size_t inputSize=input.size(); size_t alignedPrev=inputSize-inputSize%8; const float* weightsData=weights.data(); const float* inputData=input.data(); union { __m256 avx; float f[8]; } partialSolution; partialSolution.avx=_mm256_setzero_ps(); for(size_t k=0;k