/src/Simd/src/Simd/SimdSynetConvolution32fCommon.h
Line | Count | Source |
1 | | /* |
2 | | * Simd Library (http://ermig1979.github.io/Simd). |
3 | | * |
4 | | * Copyright (c) 2011-2024 Yermalayeu Ihar. |
5 | | * |
6 | | * Permission is hereby granted, free of charge, to any person obtaining a copy |
7 | | * of this software and associated documentation files (the "Software"), to deal |
8 | | * in the Software without restriction, including without limitation the rights |
9 | | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
10 | | * copies of the Software, and to permit persons to whom the Software is |
11 | | * furnished to do so, subject to the following conditions: |
12 | | * |
13 | | * The above copyright notice and this permission notice shall be included in |
14 | | * all copies or substantial portions of the Software. |
15 | | * |
16 | | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
17 | | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
18 | | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
19 | | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
20 | | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
21 | | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
22 | | * SOFTWARE. |
23 | | */ |
24 | | #ifndef __SimdSynetConvolution32fCommon_h__ |
25 | | #define __SimdSynetConvolution32fCommon_h__ |
26 | | |
27 | | #include "Simd/SimdSynetActivation.h" |
28 | | |
29 | | namespace Simd |
30 | | { |
31 | | enum TermType |
32 | | { |
33 | | TermLast, |
34 | | TermInterim, |
35 | | TermSize |
36 | | }; |
37 | | |
38 | | namespace Base |
39 | | { |
40 | | template<SimdConvolutionActivationType type> void DepthwiseConvolution(const float* src, const SimdConvolutionParameters& p, |
41 | | size_t maC, size_t yBeg, size_t yEnd, const size_t bufH[2], const float* weight, const float* bias, const float* params, float* dst, int first) |
42 | 0 | { |
43 | 0 | assert(p.group == p.srcC && p.group == p.dstC); |
44 | 0 | size_t srcH = p.srcH, srcW = p.srcW, srcC = p.srcC, dstW = p.dstW; |
45 | 0 | size_t kernelY = p.kernelY, kernelX = p.kernelX, strideY = p.strideY, strideX = p.strideX, padY = p.padY, padX = p.padX; |
46 | 0 | for (size_t dy = yBeg; dy < yEnd; ++dy) |
47 | 0 | { |
48 | 0 | for (size_t dx = 0; dx < dstW; ++dx) |
49 | 0 | { |
50 | 0 | for (size_t c = 0; c < srcC; ++c) |
51 | 0 | { |
52 | 0 | float sum = bias ? bias[c] : 0; |
53 | 0 | for (size_t ky = 0; ky < kernelY; ++ky) |
54 | 0 | { |
55 | 0 | size_t sy = dy * strideY + ky - padY; |
56 | 0 | if (sy < srcH) |
57 | 0 | { |
58 | 0 | for (size_t kx = 0; kx < kernelX; ++kx) |
59 | 0 | { |
60 | 0 | size_t sx = dx * strideX + kx - padX; |
61 | 0 | if (sx < srcW) |
62 | 0 | { |
63 | 0 | const float* pw = weight + (ky * kernelX + kx) * srcC + c; |
64 | 0 | const float* ps = src + (sy * srcW + sx) * srcC + c; |
65 | 0 | sum += ps[0] * pw[0]; |
66 | 0 | } |
67 | 0 | } |
68 | 0 | } |
69 | 0 | } |
70 | 0 | dst[c] = Activate<type>(sum, params, c); |
71 | 0 | } |
72 | 0 | dst += srcC; |
73 | 0 | } |
74 | 0 | } |
75 | 0 | } Unexecuted instantiation: void Simd::Base::DepthwiseConvolution<(SimdConvolutionActivationType)0>(float const*, SimdConvolutionParameters const&, unsigned long, unsigned long, unsigned long, unsigned long const*, float const*, float const*, float const*, float*, int) Unexecuted instantiation: void Simd::Base::DepthwiseConvolution<(SimdConvolutionActivationType)1>(float const*, SimdConvolutionParameters const&, unsigned long, unsigned long, unsigned long, unsigned long const*, float const*, float const*, float const*, float*, int) Unexecuted instantiation: void Simd::Base::DepthwiseConvolution<(SimdConvolutionActivationType)2>(float const*, SimdConvolutionParameters const&, unsigned long, unsigned long, unsigned long, unsigned long const*, float const*, float const*, float const*, float*, int) Unexecuted instantiation: void Simd::Base::DepthwiseConvolution<(SimdConvolutionActivationType)3>(float const*, SimdConvolutionParameters const&, unsigned long, unsigned long, unsigned long, unsigned long const*, float const*, float const*, float const*, float*, int) Unexecuted instantiation: void Simd::Base::DepthwiseConvolution<(SimdConvolutionActivationType)4>(float const*, SimdConvolutionParameters const&, unsigned long, unsigned long, unsigned long, unsigned long const*, float const*, float const*, float const*, float*, int) Unexecuted instantiation: void Simd::Base::DepthwiseConvolution<(SimdConvolutionActivationType)5>(float const*, SimdConvolutionParameters const&, unsigned long, unsigned long, unsigned long, unsigned long const*, float const*, float const*, float const*, float*, int) Unexecuted instantiation: void Simd::Base::DepthwiseConvolution<(SimdConvolutionActivationType)6>(float const*, SimdConvolutionParameters const&, unsigned long, unsigned long, unsigned long, unsigned long const*, float const*, float const*, float const*, float*, int) Unexecuted instantiation: void Simd::Base::DepthwiseConvolution<(SimdConvolutionActivationType)7>(float const*, SimdConvolutionParameters const&, unsigned long, unsigned long, unsigned long, unsigned long const*, float const*, float const*, float const*, float*, int) Unexecuted instantiation: void Simd::Base::DepthwiseConvolution<(SimdConvolutionActivationType)8>(float const*, SimdConvolutionParameters const&, unsigned long, unsigned long, unsigned long, unsigned long const*, float const*, float const*, float const*, float*, int) Unexecuted instantiation: void Simd::Base::DepthwiseConvolution<(SimdConvolutionActivationType)9>(float const*, SimdConvolutionParameters const&, unsigned long, unsigned long, unsigned long, unsigned long const*, float const*, float const*, float const*, float*, int) Unexecuted instantiation: void Simd::Base::DepthwiseConvolution<(SimdConvolutionActivationType)10>(float const*, SimdConvolutionParameters const&, unsigned long, unsigned long, unsigned long, unsigned long const*, float const*, float const*, float const*, float*, int) |
76 | | } |
77 | | |
78 | | #ifdef SIMD_SSE41_ENABLE |
79 | | namespace Sse41 |
80 | | { |
81 | | template <TermType term> struct Term |
82 | | { |
83 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m128 value, const __m128 * bias, const __m128 * params); |
84 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m128 value, const __m128 * bias, const __m128 * params, size_t tail); |
85 | | }; |
86 | | |
87 | | template <> struct Term<TermLast> |
88 | | { |
89 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m128 value, const __m128 * bias, const __m128 * params) |
90 | 0 | { |
91 | 0 | _mm_storeu_ps(ptr, Activate<type>(_mm_add_ps(value, bias[index]), params, index)); |
92 | 0 | } Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) |
93 | | |
94 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m128 value, const __m128 * bias, const __m128 * params, size_t tail) |
95 | 0 | { |
96 | 0 | float tmp[F]; |
97 | 0 | _mm_storeu_ps(tmp, Activate<type>(_mm_add_ps(value, bias[index]), params, index)); |
98 | 0 | for (size_t i = 0; i < tail; ++i) |
99 | 0 | ptr[i] = tmp[i]; |
100 | 0 | } Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) |
101 | | }; |
102 | | |
103 | | template <> struct Term<TermInterim> |
104 | | { |
105 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m128 value, const __m128 * bias, const __m128 * params) |
106 | 0 | { |
107 | 0 | _mm_storeu_ps(ptr, value); |
108 | 0 | } Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) |
109 | | |
110 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m128 value, const __m128 * bias, const __m128 * params, size_t tail) |
111 | 0 | { |
112 | 0 | float tmp[F]; |
113 | 0 | _mm_storeu_ps(tmp, value); |
114 | 0 | for (size_t i = 0; i < tail; ++i) |
115 | 0 | ptr[i] = tmp[i]; |
116 | 0 | } Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 1>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 2>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) |
117 | | }; |
118 | | |
119 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save1(float* dst, __m128 val0, const __m128* bias, const __m128* params) |
120 | 0 | { |
121 | 0 | Term<term>::template Save<type, 0>(dst, val0, bias, params); |
122 | 0 | } Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*) |
123 | | |
124 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save1(float* dst, __m128 val0, const __m128* bias, const __m128* params, size_t tail) |
125 | 0 | { |
126 | 0 | Term<term>::template Save<type, 0>(dst, val0, bias, params, tail); |
127 | 0 | } Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) |
128 | | |
129 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save2(float* dst, __m128 val0, __m128 val1, const __m128* bias, const __m128* params) |
130 | 0 | { |
131 | 0 | Term<term>::template Save<type, 0>(dst + 0, val0, bias, params); |
132 | 0 | Term<term>::template Save<type, 1>(dst + F, val1, bias, params); |
133 | 0 | } Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) |
134 | | |
135 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save2(float* dst, __m128 val0, __m128 val1, const __m128* bias, const __m128* params, size_t tail) |
136 | 0 | { |
137 | 0 | Term<term>::template Save<type, 0>(dst + 0, val0, bias, params); |
138 | 0 | Term<term>::template Save<type, 1>(dst + F, val1, bias, params, tail); |
139 | 0 | } Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) |
140 | | |
141 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save3(float* dst, __m128 val0, __m128 val1, __m128 val2, const __m128* bias, const __m128* params) |
142 | 0 | { |
143 | 0 | Term<term>::template Save<type, 0>(dst + 0 * F, val0, bias, params); |
144 | 0 | Term<term>::template Save<type, 1>(dst + 1 * F, val1, bias, params); |
145 | 0 | Term<term>::template Save<type, 2>(dst + 2 * F, val2, bias, params); |
146 | 0 | } Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*) |
147 | | |
148 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save3(float* dst, __m128 val0, __m128 val1, __m128 val2, const __m128* bias, const __m128* params, size_t tail) |
149 | 0 | { |
150 | 0 | Term<term>::template Save<type, 0>(dst + 0 * F, val0, bias, params); |
151 | 0 | Term<term>::template Save<type, 1>(dst + 1 * F, val1, bias, params); |
152 | 0 | Term<term>::template Save<type, 2>(dst + 2 * F, val2, bias, params, tail); |
153 | 0 | } Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) Unexecuted instantiation: void Simd::Sse41::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(4), float __vector(4), float __vector(4), float __vector(4) const*, float __vector(4) const*, unsigned long) |
154 | | } |
155 | | #endif |
156 | | |
157 | | #ifdef SIMD_AVX2_ENABLE |
158 | | namespace Avx2 |
159 | | { |
160 | | template <TermType term> struct Term |
161 | | { |
162 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m256 value, const __m256 * bias, const __m256 * params); |
163 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m256 value, const __m256 * bias, const __m256 * params, size_t tail); |
164 | | }; |
165 | | |
166 | | template <> struct Term<TermLast> |
167 | | { |
168 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m256 value, const __m256 * bias, const __m256 * params) |
169 | 0 | { |
170 | 0 | _mm256_storeu_ps(ptr, Activate<type>(_mm256_add_ps(value, bias[index]), params, index)); |
171 | 0 | } Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) |
172 | | |
173 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m256 value, const __m256 * bias, const __m256 * params, size_t tail) |
174 | 0 | { |
175 | 0 | float tmp[F]; |
176 | 0 | _mm256_storeu_ps(tmp, Activate<type>(_mm256_add_ps(value, bias[index]), params, index)); |
177 | 0 | for (size_t i = 0; i < tail; ++i) |
178 | 0 | ptr[i] = tmp[i]; |
179 | 0 | } Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) |
180 | | }; |
181 | | |
182 | | template <> struct Term<TermInterim> |
183 | | { |
184 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m256 value, const __m256 * bias, const __m256 * params) |
185 | 0 | { |
186 | 0 | _mm256_storeu_ps(ptr, value); |
187 | 0 | } Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) |
188 | | |
189 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m256 value, const __m256 * bias, const __m256 * params, size_t tail) |
190 | 0 | { |
191 | 0 | float tmp[F]; |
192 | 0 | _mm256_storeu_ps(tmp, value); |
193 | 0 | for (size_t i = 0; i < tail; ++i) |
194 | 0 | ptr[i] = tmp[i]; |
195 | 0 | } Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 1>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 2>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) |
196 | | }; |
197 | | |
198 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save1(float* dst, __m256 val0, const __m256* bias, const __m256* params) |
199 | 0 | { |
200 | 0 | Term<term>::template Save<type, 0>(dst, val0, bias, params); |
201 | 0 | } Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*) |
202 | | |
203 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save1(float* dst, __m256 val0, const __m256* bias, const __m256* params, size_t tail) |
204 | 0 | { |
205 | 0 | Term<term>::template Save<type, 0>(dst, val0, bias, params, tail); |
206 | 0 | } Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) |
207 | | |
208 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save2(float* dst, __m256 val0, __m256 val1, const __m256* bias, const __m256* params) |
209 | 0 | { |
210 | 0 | Term<term>::template Save<type, 0>(dst + 0, val0, bias, params); |
211 | 0 | Term<term>::template Save<type, 1>(dst + F, val1, bias, params); |
212 | 0 | } Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) |
213 | | |
214 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save2(float* dst, __m256 val0, __m256 val1, const __m256* bias, const __m256* params, size_t tail) |
215 | 0 | { |
216 | 0 | Term<term>::template Save<type, 0>(dst + 0, val0, bias, params); |
217 | 0 | Term<term>::template Save<type, 1>(dst + F, val1, bias, params, tail); |
218 | 0 | } Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) |
219 | | |
220 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save3(float* dst, __m256 val0, __m256 val1, __m256 val2, const __m256* bias, const __m256* params) |
221 | 0 | { |
222 | 0 | Term<term>::template Save<type, 0>(dst + 0 * F, val0, bias, params); |
223 | 0 | Term<term>::template Save<type, 1>(dst + 1 * F, val1, bias, params); |
224 | 0 | Term<term>::template Save<type, 2>(dst + 2 * F, val2, bias, params); |
225 | 0 | } Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*) |
226 | | |
227 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save3(float* dst, __m256 val0, __m256 val1, __m256 val2, const __m256* bias, const __m256* params, size_t tail) |
228 | 0 | { |
229 | 0 | Term<term>::template Save<type, 0>(dst + 0 * F, val0, bias, params); |
230 | 0 | Term<term>::template Save<type, 1>(dst + 1 * F, val1, bias, params); |
231 | 0 | Term<term>::template Save<type, 2>(dst + 2 * F, val2, bias, params, tail); |
232 | 0 | } Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) Unexecuted instantiation: void Simd::Avx2::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(8), float __vector(8), float __vector(8), float __vector(8) const*, float __vector(8) const*, unsigned long) |
233 | | } |
234 | | #endif |
235 | | |
236 | | #ifdef SIMD_AVX512BW_ENABLE |
237 | | namespace Avx512bw |
238 | | { |
239 | | template <TermType term> struct Term |
240 | | { |
241 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m512 value, const __m512 * bias, const __m512 * params, __mmask16 tail = __mmask16(-1)); |
242 | | }; |
243 | | |
244 | | template <> struct Term<TermLast> |
245 | | { |
246 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m512 value, const __m512 * bias, const __m512 * params, __mmask16 tail = __mmask16(-1)) |
247 | 0 | { |
248 | 0 | _mm512_mask_storeu_ps(ptr, tail, Activate<type>(_mm512_add_ps(value, bias[index]), params, index)); |
249 | 0 | } Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 0>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 1>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 0>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 1>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 0>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 1>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 0>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 1>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 0>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 1>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 0>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 1>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 0>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 1>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 0>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 1>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)3, 2>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)4, 2>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)5, 2>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)6, 2>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)7, 2>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)8, 2>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)9, 2>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)0>::Save<(SimdConvolutionActivationType)10, 2>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) |
250 | | }; |
251 | | |
252 | | template <> struct Term<TermInterim> |
253 | | { |
254 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, __m512 value, const __m512 * bias, const __m512 * params, __mmask16 tail = __mmask16(-1)) |
255 | 0 | { |
256 | 0 | _mm512_mask_storeu_ps(ptr, tail, value); |
257 | 0 | } Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 0>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 1>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) Unexecuted instantiation: void Simd::Avx512bw::Term<(Simd::TermType)1>::Save<(SimdConvolutionActivationType)0, 2>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short) |
258 | | }; |
259 | | |
260 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save1(float* dst, __m512 val0, const __m512* bias, const __m512* params, const __mmask16 * tails) |
261 | 0 | { |
262 | 0 | Term<term>::template Save<type, 0>(dst, val0, bias, params, tails[0]); |
263 | 0 | } Unexecuted instantiation: void Simd::Avx512bw::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save1<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save1<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) |
264 | | |
265 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save2(float* dst, __m512 val0, __m512 val1, const __m512* bias, const __m512* params, const __mmask16* tails) |
266 | 0 | { |
267 | 0 | Term<term>::template Save<type, 0>(dst + 0, val0, bias, params); |
268 | 0 | Term<term>::template Save<type, 1>(dst + F, val1, bias, params, tails[1]); |
269 | 0 | } Unexecuted instantiation: void Simd::Avx512bw::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save2<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save2<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) |
270 | | |
271 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save3(float* dst, __m512 val0, __m512 val1, __m512 val2, const __m512* bias, const __m512* params, const __mmask16* tails) |
272 | 0 | { |
273 | 0 | Term<term>::template Save<type, 0>(dst + 0 * F, val0, bias, params); |
274 | 0 | Term<term>::template Save<type, 1>(dst + 1 * F, val1, bias, params); |
275 | 0 | Term<term>::template Save<type, 2>(dst + 2 * F, val2, bias, params, tails[2]); |
276 | 0 | } Unexecuted instantiation: void Simd::Avx512bw::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)3>(float*, float __vector(16), float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save3<(Simd::TermType)1, (SimdConvolutionActivationType)0>(float*, float __vector(16), float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)4>(float*, float __vector(16), float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)5>(float*, float __vector(16), float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)6>(float*, float __vector(16), float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)7>(float*, float __vector(16), float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)8>(float*, float __vector(16), float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)9>(float*, float __vector(16), float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) Unexecuted instantiation: void Simd::Avx512bw::Save3<(Simd::TermType)0, (SimdConvolutionActivationType)10>(float*, float __vector(16), float __vector(16), float __vector(16), float __vector(16) const*, float __vector(16) const*, unsigned short const*) |
277 | | } |
278 | | #endif |
279 | | |
280 | | #if defined(SIMD_AMXBF16_ENABLE) || (defined(SIMD_AVX512BW_ENABLE) && defined(SIMD_AMX_EMULATE)) |
281 | | namespace AmxBf16 |
282 | | { |
283 | | |
284 | | } |
285 | | #endif |
286 | | |
287 | | #ifdef SIMD_NEON_ENABLE |
288 | | namespace Neon |
289 | | { |
290 | | template<::SimdConvolutionActivationType type> SIMD_INLINE float32x4_t Activate(float32x4_t value, const float* params, size_t offset); |
291 | | |
292 | | template<> SIMD_INLINE float32x4_t Activate<::SimdConvolutionActivationIdentity>(float32x4_t value, const float* params, size_t offset) |
293 | | { |
294 | | return value; |
295 | | } |
296 | | |
297 | | template<> SIMD_INLINE float32x4_t Activate<::SimdConvolutionActivationRelu>(float32x4_t value, const float* params, size_t offset) |
298 | | { |
299 | | return vmaxq_f32(vdupq_n_f32(0.0f), value); |
300 | | } |
301 | | |
302 | | template<> SIMD_INLINE float32x4_t Activate<::SimdConvolutionActivationLeakyRelu>(float32x4_t value, const float* params, size_t offset) |
303 | | { |
304 | | return vmlaq_f32(vmaxq_f32(vdupq_n_f32(0.0f), value), vld1q_dup_f32(params + 0), vminq_f32(vdupq_n_f32(0.0f), value)); |
305 | | } |
306 | | |
307 | | template<> SIMD_INLINE float32x4_t Activate<::SimdConvolutionActivationRestrictRange>(float32x4_t value, const float* params, size_t offset) |
308 | | { |
309 | | return vminq_f32(vmaxq_f32(vld1q_dup_f32(params + 0), value), vld1q_dup_f32(params + 1)); |
310 | | } |
311 | | |
312 | | template<> SIMD_INLINE float32x4_t Activate<::SimdConvolutionActivationPrelu>(float32x4_t value, const float* params, size_t offset) |
313 | | { |
314 | | return vmlaq_f32(vmaxq_f32(vdupq_n_f32(0.0f), value), Load<false>(params + offset), vminq_f32(vdupq_n_f32(0.0f), value)); |
315 | | } |
316 | | |
317 | | template<> SIMD_INLINE float32x4_t Activate<::SimdConvolutionActivationElu>(float32x4_t value, const float* params, size_t offset) |
318 | | { |
319 | | return Neon::Elu(value, vld1q_dup_f32(params + 0)); |
320 | | } |
321 | | |
322 | | template<> SIMD_INLINE float32x4_t Activate<::SimdConvolutionActivationHswish>(float32x4_t value, const float* params, size_t offset) |
323 | | { |
324 | | return Neon::SynetHswish32f(value, vld1q_dup_f32(params + 0), vld1q_dup_f32(params + 1)); |
325 | | } |
326 | | |
327 | | template<> SIMD_INLINE float32x4_t Activate<::SimdConvolutionActivationMish>(float32x4_t value, const float* params, size_t offset) |
328 | | { |
329 | | return Neon::Mish<1>(value, vld1q_dup_f32(params + 0)); |
330 | | } |
331 | | |
332 | | template<> SIMD_INLINE float32x4_t Activate<::SimdConvolutionActivationHardSigmoid>(float32x4_t value, const float* params, size_t offset) |
333 | | { |
334 | | return Neon::SynetHardSigmoid32f(value, vld1q_dup_f32(params + 0), vld1q_dup_f32(params + 1)); |
335 | | } |
336 | | |
337 | | template<> SIMD_INLINE float32x4_t Activate<::SimdConvolutionActivationSwish>(float32x4_t value, const float* params, size_t offset) |
338 | | { |
339 | | return Neon::Swish<1>(value, vld1q_dup_f32(params + 0)); |
340 | | } |
341 | | |
342 | | template<> SIMD_INLINE float32x4_t Activate<::SimdConvolutionActivationGelu>(float32x4_t value, const float* params, size_t offset) |
343 | | { |
344 | | return Neon::Gelu<1>(value); |
345 | | } |
346 | | |
347 | | //------------------------------------------------------------------------------------------------- |
348 | | |
349 | | template <TermType term> struct Term |
350 | | { |
351 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, float32x4_t value, const float32x4_t * bias, const float32x4_t * params); |
352 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, float32x4_t value, const float32x4_t * bias, const float32x4_t * params, size_t tail); |
353 | | }; |
354 | | |
355 | | template <> struct Term<TermLast> |
356 | | { |
357 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, float32x4_t value, const float32x4_t * bias, const float32x4_t * params) |
358 | | { |
359 | | Store<false>(ptr, Activate<type>(vaddq_f32(value, bias[index]), params, index)); |
360 | | } |
361 | | |
362 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, float32x4_t value, const float32x4_t * bias, const float32x4_t * params, size_t tail) |
363 | | { |
364 | | float tmp[F]; |
365 | | Store<false>(tmp, Activate<type>(vaddq_f32(value, bias[index]), params, index)); |
366 | | for (size_t i = 0; i < tail; ++i) |
367 | | ptr[i] = tmp[i]; |
368 | | } |
369 | | }; |
370 | | |
371 | | template <> struct Term<TermInterim> |
372 | | { |
373 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, float32x4_t value, const float32x4_t * bias, const float32x4_t * params) |
374 | | { |
375 | | Store<false>(ptr, value); |
376 | | } |
377 | | |
378 | | template<SimdConvolutionActivationType type, int index> static SIMD_INLINE void Save(float * ptr, float32x4_t value, const float32x4_t * bias, const float32x4_t * params, size_t tail) |
379 | | { |
380 | | float tmp[F]; |
381 | | Store<false>(tmp, value); |
382 | | for (size_t i = 0; i < tail; ++i) |
383 | | ptr[i] = tmp[i]; |
384 | | } |
385 | | }; |
386 | | |
387 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save1(float* dst, float32x4_t val0, const float32x4_t* bias, const float32x4_t* params) |
388 | | { |
389 | | Term<term>::template Save<type, 0>(dst, val0, bias, params); |
390 | | } |
391 | | |
392 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save1(float* dst, float32x4_t val0, const float32x4_t* bias, const float32x4_t* params, size_t tail) |
393 | | { |
394 | | Term<term>::template Save<type, 0>(dst, val0, bias, params, tail); |
395 | | } |
396 | | |
397 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save2(float* dst, float32x4_t val0, float32x4_t val1, const float32x4_t* bias, const float32x4_t* params) |
398 | | { |
399 | | Term<term>::template Save<type, 0>(dst + 0, val0, bias, params); |
400 | | Term<term>::template Save<type, 1>(dst + F, val1, bias, params); |
401 | | } |
402 | | |
403 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save2(float* dst, float32x4_t val0, float32x4_t val1, const float32x4_t* bias, const float32x4_t* params, size_t tail) |
404 | | { |
405 | | Term<term>::template Save<type, 0>(dst + 0, val0, bias, params); |
406 | | Term<term>::template Save<type, 1>(dst + F, val1, bias, params, tail); |
407 | | } |
408 | | |
409 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save3(float* dst, float32x4_t val0, float32x4_t val1, float32x4_t val2, const float32x4_t* bias, const float32x4_t* params) |
410 | | { |
411 | | Term<term>::template Save<type, 0>(dst + 0 * F, val0, bias, params); |
412 | | Term<term>::template Save<type, 1>(dst + 1 * F, val1, bias, params); |
413 | | Term<term>::template Save<type, 2>(dst + 2 * F, val2, bias, params); |
414 | | } |
415 | | |
416 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save3(float* dst, float32x4_t val0, float32x4_t val1, float32x4_t val2, const float32x4_t* bias, const float32x4_t* params, size_t tail) |
417 | | { |
418 | | Term<term>::template Save<type, 0>(dst + 0 * F, val0, bias, params); |
419 | | Term<term>::template Save<type, 1>(dst + 1 * F, val1, bias, params); |
420 | | Term<term>::template Save<type, 2>(dst + 2 * F, val2, bias, params, tail); |
421 | | } |
422 | | |
423 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save4(float* dst, float32x4_t val0, float32x4_t val1, float32x4_t val2, float32x4_t val3, const float32x4_t* bias, const float32x4_t* params) |
424 | | { |
425 | | Term<term>::template Save<type, 0>(dst + 0 * F, val0, bias, params); |
426 | | Term<term>::template Save<type, 1>(dst + 1 * F, val1, bias, params); |
427 | | Term<term>::template Save<type, 2>(dst + 2 * F, val2, bias, params); |
428 | | Term<term>::template Save<type, 3>(dst + 3 * F, val3, bias, params); |
429 | | } |
430 | | |
431 | | template<TermType term, SimdConvolutionActivationType type> SIMD_INLINE void Save4(float* dst, float32x4_t val0, float32x4_t val1, float32x4_t val2, float32x4_t val3, const float32x4_t* bias, const float32x4_t* params, size_t tail) |
432 | | { |
433 | | Term<term>::template Save<type, 0>(dst + 0 * F, val0, bias, params); |
434 | | Term<term>::template Save<type, 1>(dst + 1 * F, val1, bias, params); |
435 | | Term<term>::template Save<type, 2>(dst + 2 * F, val2, bias, params); |
436 | | Term<term>::template Save<type, 3>(dst + 3 * F, val3, bias, params, tail); |
437 | | } |
438 | | } |
439 | | #endif |
440 | | } |
441 | | #endif |