| 3672 | } |
| 3673 | |
| 3674 | void ecall_batchnorm(float* input,float* scale,float* offset,float* mean_x,float* variance, int N,int M,int H,int W, float* output,float epsilon){ |
| 3675 | float *x = (float*)malloc(sizeof(float)*N); |
| 3676 | memset(x, 0, sizeof(float)*N); |
| 3677 | for(int j=0;j<N;j++){ |
| 3678 | x[j] = 0.0f; |
| 3679 | float sum = input[insert*N+j]; |
| 3680 | float c = 0.0f; |
| 3681 | for(int i=0;i<Nt;i++){ |
| 3682 | float y = input[indexs[i]*N+j] - c; |
| 3683 | float t = sum + y; |
| 3684 | c = (t - sum) - y; |
| 3685 | sum = t; |
| 3686 | } |
| 3687 | x[j] = sum; |
| 3688 | |
| 3689 | } |
| 3690 | float *mu = (float*)malloc(sizeof(float)*M*H); |
| 3691 | memset(mu, 0, sizeof(float)*M*H); |
| 3692 | for(int j=0;j<M*H;j++){ |
| 3693 | mu[j] = 0.0f; |
| 3694 | float sum = mean_x[insert*M*H+j]; |
| 3695 | float c = 0.0f; |
| 3696 | for(int i=0;i<Nt;i++){ |
| 3697 | float y = mean_x[indexs[i]*M*H+j] - c; |
| 3698 | float t = sum + y; |
| 3699 | c = (t - sum) - y; |
| 3700 | sum = t; |
| 3701 | } |
| 3702 | mu[j] = sum; |
| 3703 | } |
| 3704 | float *sig = (float*)malloc(sizeof(float)*M*H); |
| 3705 | memset(sig, 0, sizeof(float)*M*H); |
| 3706 | for(int j=0;j<M*H;j++){ |
| 3707 | sig[j] = 0.0f; |
| 3708 | float sum = variance[insert*M*H+j]; |
| 3709 | float c = 0.0f; |
| 3710 | for(int i=0;i<Nt;i++){ |
| 3711 | float y = variance[indexs[i]*M*H+j] - c; |
| 3712 | float t = sum + y; |
| 3713 | c = (t - sum) - y; |
| 3714 | sum = t; |
| 3715 | } |
| 3716 | sig[j] = sum; |
| 3717 | } |
| 3718 | |
| 3719 | for(int i = 0;i<W;i++){ |
| 3720 | for(int j = 0;j<M;j++){ |
| 3721 | for(int k = 0;k<H;k++){ |
| 3722 | x[j*H*W+k*W+i] = scale[i] * (x[j*H*W+k*W+i] - mu[j*H+k]) / sqrt(sig[j*H+k] + epsilon) + offset[i]; |
| 3723 | }}} |
| 3724 | |
| 3725 | float mean = 0.0f, std, mean_sqr = 0.0f; |
| 3726 | float c_mean = 0.0f, c_mean_sqr = 0.0f; |
| 3727 | for (int j = 0; j < N; j++) { |
| 3728 | float y = (x[j]/static_cast<float>(N)) - c_mean; |
| 3729 | float t = mean + y; |
| 3730 | c_mean = (t - mean) - y; |
| 3731 | mean = t; |