 	block = (h_network->_layers[0]._X_size < MAX_NB_THREADS ? h_network->_layers[0]._X_size : MAX_NB_THREADS);
 	grid = h_network->_layers[0]._X_size / MAX_NB_THREADS + (h_network->_layers[0]._X_size%MAX_NB_THREADS ? 1 : 0);
 	gpu_propagateFront_setInput<<<grid, block>>>(d_network, in_set, in_elt_size, idx);
-	cudaDeviceSynchronize();
 
 	cublasStatus_t	stat;
 	cublasHandle_t handle;

		int i = tid / layer._W_width;
		int j = tid % layer._W_width;

		//int idx = i*layer._W_width+j;
		//printf("l=%d, i=%d, j=%d, tid=%d, idx=%d\n", l, i, j, tid, idx);

		layer._d_E_W[tid] = layer._d_E_Y[i] * network->_layers[l-1]._X[j];
		layer._W[tid] = layer._W[tid] - network->_eta*layer._d_E_W[tid];
	}
}


	struct layer* _layers;
};

const int EPOCH=1;

static std::string getCurrentTime() {
	time_t rawtime;
