                int max_segments,
                bool pre_sorted)
 {
-    for (std::size_t num_items = max_items;
-         num_items > 1;
-         num_items = cub::DivideAndRoundUp(num_items, 64))
-    {
-        TestNumItems(h_keys, num_items, max_segments, pre_sorted);
+    if (pre_sorted)
+    {
+        // run a specific list of sizes, up to max_items
+        std::size_t sizes[] = {g_smallest_pre_sorted_num_items, 4350000007ull};
+        for (std::size_t num_items : sizes)
+        {
+            if (num_items > max_items) break;
+            TestNumItems(h_keys, num_items, max_segments, pre_sorted);
+        }
+    }
+    else
+    {
+        for (std::size_t num_items = max_items;
+             num_items > 1;
+             num_items = cub::DivideAndRoundUp(num_items, 64))
+        {
+            TestNumItems(h_keys, num_items, max_segments, pre_sorted);
+        }
     }
 }
 

        fflush(stdout);
        InitializeKeysSorted(h_keys.get(), large_num_items);
        fflush(stdout);
        TestNumItems(h_keys.get(), large_num_items, max_segments, true);
        fflush(stdout);
    }


// Globals, constants and typedefs
//---------------------------------------------------------------------

bool                    g_verbose                       = false;
int                     g_timing_iterations             = 0;
std::size_t             g_smallest_pre_sorted_num_items = (std::size_t(1) << 32) - 42;
CachingDeviceAllocator  g_allocator(true);

// Dispatch types
