     }
 
 // benchmark the host rebinning
-void bmark_host_rebinning(bool include_memcpy)
+float bmark_host_rebinning(bool include_memcpy, bool quiet=false)
     {
     // warm up
     rebin_particles_host(gh_idxlist, gh_bin_size, gh_pos, g_N, g_Lx, g_Ly, g_Lz, g_Mx, g_My, g_Mz, g_Nmax);

    g_Mx = std::min(g_Mx, (unsigned)30);
    g_My = std::min(g_My, (unsigned)30);
    g_Mz = std::min(g_Mz, (unsigned)30);

    // allocate bins
    unsigned int Nbins = g_Mx * g_My * g_Mz;

    float t = (end.tv_sec - start.tv_sec)*1000.0f + (end.tv_usec - start.tv_usec)/1000.0f;
    float avg_t = t/float(iters);
    
    if (!quiet)
        {
        if (include_memcpy)
            printf("Host w/device memcpy: ");
        else
            printf("Host                : ");
        printf("%f ms\n", avg_t);
        }
    return avg_t;
    }

#if CUDA_ARCH >= 11
