typedef struct Iterator<Impl>{
        union Data* iterator;
        struct Context* task;
        int numGPU;
        __code exec(Impl* iterator, struct TaskManager* taskManager, struct Context* task, int numGPU, __code next(...));
        __code barrier(Impl* iterator, struct Context* task, __code next(...), __code whenWait(...));
        __code whenWait(...);
        __code next(...);
} Iterator;