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

Function ecall_reducemax_zero_grad

sgx_tf_ops/Enclave/Enclave.cpp:5266–5345  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5264 }
5265
5266void ecall_reducemax_zero_grad(float *input,float *grad,int N,int M,int C,int L,float *output){
5267 float *x = (float*)malloc(sizeof(float)*N);
5268 memset(x, 0, sizeof(float)*N);
5269 for(int j=0;j<N;j++){
5270 x[j] = 0.0f;
5271 float sum = input[insert*N+j];
5272 float c = 0.0f;
5273 for(int i=0;i<Nt;i++){
5274 float y = input[indexs[i]*N+j] - c;
5275 float t = sum + y;
5276 c = (t - sum) - y;
5277 sum = t;
5278 }
5279 x[j] = sum;
5280
5281 }
5282 float *x1 = (float*)malloc(sizeof(float)*C*L);
5283 memset(x1, 0, sizeof(float)*C*L);
5284
5285 for (int i = 0; i < C; i++) {
5286 for (int j = 0; j < L; j++) {
5287 float max_val = x[i*L+j];
5288 for (int k = 1; k < M; k++) {
5289 max_val = fmaxf(max_val, x[i*L+j+k*C*L]);
5290 }
5291 x1[i*L+j] = max_val;
5292 }
5293 }
5294
5295 for (int i = 0; i < C; i++) {
5296 for (int j = 0; j < L; j++) {
5297 for (int k = 0; k < M; k++) {
5298 if(fabs(x[i*L+j+k*C*L]-x1[i*L+j]) < 1e-7f){
5299 x[i*L+j+k*C*L] = grad[i*L+j];
5300 for(int kk = k+1; kk < M; kk++){
5301 x[i*L+j+kk*C*L] = 0.0f;
5302 }
5303 break;
5304 }
5305 else{
5306 x[i*L+j+k*C*L] = 0.0f;
5307 }
5308 }
5309 }
5310 }
5311 float mean = 0.0f, std, mean_sqr = 0.0f;
5312 float c_mean = 0.0f, c_mean_sqr = 0.0f;
5313
5314 for (int j = 0; j < N; j++) {
5315 float y = (x[j]/static_cast<float>(N)) - c_mean;
5316 float t = mean + y;
5317 c_mean = (t - mean) - y;
5318 mean = t;
5319
5320 float y2 = (x[j]*x[j]/static_cast<float>(N)) - c_mean_sqr;
5321 float t2 = mean_sqr + y2;
5322 c_mean_sqr = (t2 - mean_sqr) - y2;
5323 mean_sqr = t2;

Callers 1

reducemax_zero_gradFunction · 0.85

Calls 1

gaussrandFunction · 0.85

Tested by

no test coverage detected