             cudaEventSynchronize( stop );
             cudaEventElapsedTime( &time, start, stop );
 
-            fprintf(stderr, "  backtracking (20,0,0)... done: %.1fms, A/s: %.2f M\n", time, reads_data_cuda.size()/(time*1000.0f) );
+            fprintf(stderr, "  gpu backtracking (20,0,0)... done: %.1fms, A/s: %.3f M\n", time, reads_data_cuda.size()/(time*1000.0f) );
+        }
+        {
+            Timer timer;
+            timer.start();
+
+            uint32 counter = 0;
+            for (uint32 i = 0; i < reads_data->size(); ++i)
+            {
+                count_core(
+                    i,
+                    host_reads_view,
+                    host_fmindex,
+                    20u,
+                    0u,
+                    0u,
+                    &counter );
+            }
+
+            timer.stop();
+            float time = timer.seconds() * 1000.0f;
+
+            fprintf(stderr, "  cpu backtracking (20,0,0)... done: %.1fms, A/s: %.3f M\n", time, reads_data_cuda.size()/(time*1000.0f) );
         }
         // 32-mers, distance=1
         {


        typedef fm_index<rank_dict_type,io::FMIndexLdgIterators::ssa_type>  fmindex_type;

        io::FMIndexLdgIterators fmi_iterators( fmi_cuda );

        fmindex_type fmindex_cuda(
            fmi_cuda.genome_length(),

            cudaEventRecord( start, 0 );

            count_kernel<<<n_blocks,blockdim>>>(
                reads_view_cuda,
                fmindex_cuda,
                50u,
                25u,
