From 1a54989a6d585599ab328458c5d29d1b0b66cc6f Mon Sep 17 00:00:00 2001 From: BUG1989 <248857878@qq.com> Date: Mon, 24 May 2021 22:20:04 +0800 Subject: [PATCH] add the omp for sigmod ref op (#685) --- source/device/cpu/cpu_dump.c | 2 +- source/device/cpu/op/sigmoid/sigmoid_ref.c | 51 ++++++++++++++++------ 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/source/device/cpu/cpu_dump.c b/source/device/cpu/cpu_dump.c index ac0e307c..9a94198a 100644 --- a/source/device/cpu/cpu_dump.c +++ b/source/device/cpu/cpu_dump.c @@ -622,7 +622,7 @@ void extract_node_executed_time(struct subgraph* subgraph, int node_id) sum_of_min_time += timer[j]; } - fprintf(stdout, "%2d [%5.2f%% : %4.1f ms] %13s idx: %2d ", i, timer[i] / sum_of_min_time * 100, + fprintf(stdout, "%4d [%5.2f%% : %6.1f ms] %13s idx: %4d ", i, timer[i] / sum_of_min_time * 100, timer[i], get_op_name_from_type(node->ir_node->op.type), node->ir_node->index); struct tensor* input_tensor = get_ir_graph_tensor(subgraph->graph, node->ir_node->input_tensors[0]); diff --git a/source/device/cpu/op/sigmoid/sigmoid_ref.c b/source/device/cpu/op/sigmoid/sigmoid_ref.c index 994be5e2..105ae8f5 100644 --- a/source/device/cpu/op/sigmoid/sigmoid_ref.c +++ b/source/device/cpu/op/sigmoid/sigmoid_ref.c @@ -40,17 +40,43 @@ int ref_sigmoid_fp32(struct tensor* input_tensor, struct tensor* output_tensor, int num_thread) { + int dim_num = input_tensor->dim_num; - uint32_t elem_num = input_tensor->elem_num; - float* input_data = input_tensor->data; - float* output_data = output_tensor->data; - - for (int i = 0; i < elem_num; i++) + if (dim_num == 4) { - output_data[i] = SIGMOID_MIN(input_data[i], 30.0f); - output_data[i] = SIGMOID_MAX(input_data[i], -30.0f); - - output_data[i] = 1 / (1 + exp(-output_data[i])); + int batch = input_tensor->dims[0]; + int channel = input_tensor->dims[1]; + int cstep = input_tensor->dims[2] * input_tensor->dims[3]; + int bstep = channel * cstep; + + for (int n=0; ndata + n * bstep + c * cstep; + float* output_data = (float*)output_tensor->data + n * bstep + c * cstep; + for (int i=0; ielem_num; + float* input_data = input_tensor->data; + float* output_data = output_tensor->data; + + for (int i = 0; i < elem_num; i++) + { + output_data[i] = SIGMOID_MIN(input_data[i], 30.0f); + output_data[i] = SIGMOID_MAX(input_data[i], -30.0f); + output_data[i] = 1.f / (1 + expf(-output_data[i])); + } } return 0; @@ -139,11 +165,8 @@ static int run(struct node_ops* node_ops, struct exec_node* exec_node, struct ex { struct node* ir_node = exec_node->ir_node; struct graph* ir_graph = ir_node->graph; - struct tensor* input_tensor; - struct tensor* output_tensor; - - input_tensor = get_ir_graph_tensor(ir_graph, ir_node->input_tensors[0]); - output_tensor = get_ir_graph_tensor(ir_graph, ir_node->output_tensors[0]); + struct tensor* input_tensor = get_ir_graph_tensor(ir_graph, ir_node->input_tensors[0]); + struct tensor* output_tensor = get_ir_graph_tensor(ir_graph, ir_node->output_tensors[0]); int ret = -1; if (input_tensor->data_type == TENGINE_DT_FP32) -- GitLab