         // pixel_equality<<<grid_dim, block_dim>>>(d_src_data, d_dst_data, d_pixel_equ, (*src_bitmap)->width, padding);
 
         // 1D grid & 1D block reduction
-        // and_reduction(grid_dim, block_dim, d_block_equ, d_grid_equ, block_equ_size);
-
-        // ===================================
 
         // First reduction from d_src_data and d_dst_data to d_block_equ
         and_reduction_2D<<<grid_dim, block_dim, block_dim.x * block_dim.y * sizeof(uint8_t)>>>(d_src_data, d_dst_data, d_block_equ, (*src_bitmap)->width, data_size, padding);


        and_reduction_1D<<<1, block_dim.x * block_dim.y, block_dim.x * block_dim.y * sizeof(uint8_t)>>>(d_block_equ, d_grid_equ, block_equ_size);

        // ================

        // bring d_grid_equ back from device
        cudaMemcpy(&grid_equ, d_grid_equ, grid_equ_size, cudaMemcpyDeviceToHost);


    // free memory on device
    cudaFree(d_src_data);
    cudaFree(d_dst_data);
    cudaFree(d_block_equ);
    cudaFree(d_grid_equ);

