     using shape_type = typename traits::shape_type;
     using index_type = typename traits::index_type;
 
-    executor_type exec(2);
-
-    for(size_t i = 0; i < 2; ++i)
+    executor_type exec(num_devices);
+
+    for(size_t i = 0; i < exec.size(); ++i)
     {
       exec[i].device(i);
     }
 
-    auto shape = exec.make_shape(2,{2,2});
+    auto shape = exec.make_shape(exec.size(),{2,2});
 
     auto f = traits::async_execute(exec, [] __host__ __device__ (const index_type& idx, int& outer_shared, int& inner_shared, int& inner_inner_shared)
     {

    using shape_type = typename traits::shape_type;
    using index_type = typename traits::index_type;

    executor_type exec(2);

    for(size_t i = 0; i < 2; ++i)
    {
      exec[i].device(i);
    }

    auto shape = exec.make_shape(2,{2,2});

    auto past = traits::make_ready_future<int>(exec, 13);


    using traits = agency::executor_traits<executor_type>;
    using shape_type = typename traits::shape_type;

    executor_type exec(num_devices);

    auto past = traits::make_ready_future<int>(exec,13);

