MCPcopy Create free account
hub / github.com/OAID/Tengine / Run

Method Run

executor/operator/arm32/sigmoid_float.cpp:93–142  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

91 }
92
93 bool Run(Node* node)
94 {
95 Tensor* input_tensor = node->GetInputTensor(0);
96 Tensor* output_tensor = node->GetOutputTensor(0);
97 const TShape& shape = input_tensor->GetShape();
98 int elem_num = shape.GetSize();
99 float* input = ( float* )get_tensor_mem(input_tensor);
100 float* output = ( float* )get_tensor_mem(output_tensor);
101 /// void* data = get_tensor_mem(input_tensor);
102 /// int ret = kernel_run(data, elem_num, &op_param);
103#define SIGMOID_MAX(a, b) ((a) > (b) ? (a) : (b))
104#define SIGMOID_MIN(a, b) ((a) < (b) ? (a) : (b))
105 /*
106 for(int i = 0; i < elem_num; i++)
107 {
108 input[i] = SIGMOID_MIN(input[i], 30.0f);
109 input[i] = SIGMOID_MAX(input[i], -30.0f);
110 std::cout<< input[i] << " ";
111 float tmp_exp = exp8mul(-input[i]);
112 output[i] = 1 / (1 + tmp_exp);
113 std::cout<< tmp_exp << " " <<output[i] << "\n";
114 }
115 */
116
117 float32x4_t min = vdupq_n_f32(-30.0f);
118 float32x4_t max = vdupq_n_f32(30.0f);
119 float32x4_t tmp_vec = vdupq_n_f32(1);
120 for(int i = 0; i < (elem_num & -4); i += 4)
121 {
122 float32x4_t _input = vld1q_f32(input + i);
123 _input = vmaxq_f32(_input, min);
124 _input = vminq_f32(_input, max);
125 float32x4_t tmp_exp = vaddq_f32(tmp_vec, vexpq10_f32(vmulq_n_f32(_input, -1.0f)));
126 /// float32x4_t tmp_exp = vaddq_f32(tmp_vec, vexpq_f32(vmulq_n_f32(_input, -1.0f)));
127 float32x4_t out = vrecpeq_f32(tmp_exp);
128 out = vmulq_f32(vrecpsq_f32(tmp_exp, out), out);
129 out = vmulq_f32(vrecpsq_f32(tmp_exp, out), out);
130 vst1q_f32(output, out);
131 output += 4;
132 }
133 for(int i = elem_num & ~3; i < elem_num; i++)
134 {
135 input[i] = SIGMOID_MIN(input[i], 30.0f);
136 input[i] = SIGMOID_MAX(input[i], -30.0f);
137 float tmp_exp = exp10_f32(-input[i]);
138 *output++ = 1 / (1 + tmp_exp);
139 }
140
141 return true;
142 }
143};
144
145NodeOps* SelectFunc(const CPUInfo* info, Node* node)

Callers

nothing calls this directly

Calls 6

get_tensor_memFunction · 0.85
vexpq10_f32Function · 0.70
exp10_f32Function · 0.70
GetInputTensorMethod · 0.45
GetOutputTensorMethod · 0.45
GetSizeMethod · 0.45

Tested by

no test coverage detected