 
 void update_state_using_previous_layers_sparse(elina_manager_t* man, fppoly_t* fp, const size_t layerno, const size_t num_chunks, const size_t chunk_counter, const bool use_area_heuristic)
 {
+    const auto start = std::chrono::system_clock::now();
+
     size_t backstep_counter = 0;
-
-    auto start = std::chrono::system_clock::now();
 
     fppoly_internal_t* pr = fppoly_init_from_manager(man, ELINA_FUNID_ASSIGN_LINEXPR_ARRAY);
 


    for(int i = 0; i < mu; i++)
    {
        int mat_out = local_n*mu + i;

        float_type inf_coeff = inf_coeffs[mat_out];
        float_type sup_coeff = sup_coeffs[mat_out];

__global__
void add_coeffs_and_csts_sparse(float_type* __restrict__ target_inf_coeff, float_type* __restrict__ target_sup_coeff, float_type* __restrict__ target_inf_cst, float_type* __restrict__ target_sup_cst, const float_type* __restrict__ source_inf_coeff, const float_type* __restrict__ source_sup_coeff, const float_type* __restrict__ source_inf_cst, const float_type* __restrict__ source_sup_cst, const int output_size_target_x, const int output_size_target_y, const int output_size_source_x, const int output_size_source_y, const int output_size_z, const int relative_offset_x, const int relative_offset_y)
{
    int last_x = blockIdx.x;
    int last_y = blockIdx.y;
    int last_z = blockIdx.z;

    const int n = last_x*gridDim.y*gridDim.z + last_y*gridDim.z + last_z;

    const int num_coeffs_target = output_size_target_x*output_size_target_y*output_size_z;
    const int num_coeffs_source = output_size_source_x*output_size_source_y*output_size_z;
