MCPcopy Create free account
hub / github.com/conflow-dev/ConFlow / ecall_batchnorm

Function ecall_batchnorm

sgx_tf_ops/Enclave/Enclave.cpp:3674–3760  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3672}
3673
3674void 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;

Callers 1

batchnormFunction · 0.85

Calls 1

gaussrandFunction · 0.85

Tested by

no test coverage detected