     }
 
     typedef Reads::word_type word_type;
-    NVBIO_VAR_UNUSED static const uint32 SYMBOL_SIZE = Reads::SYMBOL_SIZE;
+    NVBIO_VAR_UNUSED static const uint32 SYMBOL_SIZE      = Reads::SYMBOL_SIZE;
+    NVBIO_VAR_UNUSED static const uint32 SYMBOLS_PER_WORD = Reads::SYMBOLS_PER_WORD;
 
     const char* reads_name        = argv[argc-2];
     const char* output_name       = argv[argc-1];

#define NVBIO_CUDA_DEBUG

#include <cub/cub.cuh>
#ifdef _OPENMP
#include <omp.h>
#endif

#include <nvbio/sufsort/sufsort.h>
#include <nvbio/sufsort/sufsort_utils.h>
#include <nvbio/sufsort/file_bwt.h>
#include <nvbio/basic/timer.h>
#include <nvbio/strings/string_set.h>
#include <nvbio/basic/shared_pointer.h>
#include <nvbio/io/sequence/sequence.h>
#include <nvbio/basic/dna.h>
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <stdio.h>
#include <stdlib.h>
#include <vector>

        {
            log_verbose(stderr, "  using fast path\n");

            thrust::device_vector<word_type> d_read_storage( input_words );
            thrust::device_vector<uint64>    d_read_index( reads.h_read_index );

            thrust::copy( reads.h_read_storage, reads.h_read_storage + input_words, d_read_storage.begin() );

            const packed_stream_type d_packed_string( (word_type*)nvbio::plain_view( d_read_storage ) );

