 
 
 /**
- * Tuning policy for BlockReduceTiles
+ * Tuning policy for BlockScanTiles
  */
 template <
     int                         _BLOCK_THREADS,
     int                         _ITEMS_PER_THREAD,
-    int                         _VECTOR_LOAD_LENGTH,
-    PtxLoadModifier             _LOAD_MODIFIER,
-    GridMappingStrategy         _GRID_MAPPING,
+    BlockLoadPolicy             _LOAD_POLICY,
+    BlockStorePolicy            _STORE_POLICY,
     int                         _OVERSUBSCRIPTION>
 struct BlockScanTilesPolicy
 {

    {
        BLOCK_THREADS       = _BLOCK_THREADS,
        ITEMS_PER_THREAD    = _ITEMS_PER_THREAD,
        VECTOR_LOAD_LENGTH  = _VECTOR_LOAD_LENGTH,
        OVERSUBSCRIPTION    = _OVERSUBSCRIPTION,
    };

    static const GridMappingStrategy   GRID_MAPPING       = _GRID_MAPPING;
    static const PtxLoadModifier       LOAD_MODIFIER      = _LOAD_MODIFIER;
};


/**
 * \brief BlockReduceTiles implements an abstraction of CUDA thread blocks for
 * participating in device-wide reduction.
 */
template <
    typename BlockScanTilesPolicy,
    typename InputIterator,
    typename SizeT>
class BlockReduceTiles
{
private:


        BLOCK_THREADS       = BlockScanTilesPolicy::BLOCK_THREADS,
        ITEMS_PER_THREAD    = BlockScanTilesPolicy::ITEMS_PER_THREAD,
        TILE_ITEMS          = BLOCK_THREADS * ITEMS_PER_THREAD,
    };

    static const BlockLoadPolicy LOAD_POLICY = BlockScanTilesPolicy::LOAD_POLICY;
    static const BlockStorePolicy STORE_POLICY = BlockScanTilesPolicy::STORE_POLICY;

    // Parameterized block-wide primitives
    typedef BlockLoad<InputIterator, BLOCK_THREADS> BlockLoadT;

    // Shared memory type for this threadblock
    struct _SmemStorage
