MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / GiExpPsFloat32

Function GiExpPsFloat32

dnn/src/fallback/elemwise/gi_impl/gi_mathfun.cpp:133–179  ·  view source on GitHub ↗

exp() computed for 4 float at once */

Source from the content-addressed store, hash-verified

131
132/* exp() computed for 4 float at once */
133v4sf GiExpPsFloat32(v4sf x) {
134 v4sf tmp, fx;
135
136 v4sf one = GiBroadcastFloat32(1);
137 x = GiMinimumFloat32(x, GiBroadcastFloat32(c_exp_hi));
138 x = GiMaximumFloat32(x, GiBroadcastFloat32(c_exp_lo));
139
140 /* express exp(x) as exp(g + n*log(2)) */
141 fx = GiMultiplyAddFloat32(
142 GiBroadcastFloat32(0.5f), x, GiBroadcastFloat32(c_cephes_LOG2EF));
143
144 /* perform a floorf */
145 tmp = GiCastToFloat32(GiCastToInt32(fx));
146
147 /* if greater, subtract 1 */
148 v4su mask = GiGreaterThanFloat32(tmp, fx);
149 v4sf mask_float = GiAndFloat32(GiReintUint32ToFloat32(mask), one);
150
151 fx = GiSubtractFloat32(tmp, mask_float);
152
153 tmp = GiMultiplyFloat32(fx, GiBroadcastFloat32(c_cephes_exp_C1));
154 v4sf z = GiMultiplyFloat32(fx, GiBroadcastFloat32(c_cephes_exp_C2));
155 x = GiSubtractFloat32(x, tmp);
156 x = GiSubtractFloat32(x, z);
157
158 z = GiMultiplyFloat32(x, x);
159
160 v4sf y = GiBroadcastFloat32(c_cephes_exp_p0);
161 y = GiMultiplyAddFloat32(GiBroadcastFloat32(c_cephes_exp_p1), y, x);
162 y = GiMultiplyAddFloat32(GiBroadcastFloat32(c_cephes_exp_p2), y, x);
163 y = GiMultiplyAddFloat32(GiBroadcastFloat32(c_cephes_exp_p3), y, x);
164 y = GiMultiplyAddFloat32(GiBroadcastFloat32(c_cephes_exp_p4), y, x);
165 y = GiMultiplyAddFloat32(GiBroadcastFloat32(c_cephes_exp_p5), y, x);
166
167 y = GiMultiplyAddFloat32(x, y, z);
168 y = GiAddFloat32(y, one);
169
170 /* build 2^n */
171 v4si mm;
172 mm = GiCastToInt32(fx);
173 mm = GiAddInt32(mm, GiBroadcastInt32(0x7f));
174 mm = GiShiftLeft23Int32(mm);
175 v4sf pow2n = GiReintInt32ToFloat32(mm);
176
177 y = GiMultiplyFloat32(y, pow2n);
178 return y;
179}
180
181#define c_minus_cephes_DP1 -0.78515625
182#define c_minus_cephes_DP2 -2.4187564849853515625e-4

Callers 1

do_softmaxFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected