Mercurial > hg > Members > Moririn
view src/parallel_execution/TaskIterator.cbc @ 462:8d7e5d48cad3
Running CPU examples
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 20 Dec 2017 22:05:08 +0900 |
parents | 95f58f2b2c0e |
children | ac244346c85d |
line wrap: on
line source
#include "../context.h" #include "Iterator.h" #include <stdio.h> createTaskIterator(struct Context, struct List list) { struct Iterator* iterator = new Iterator(); struct TaskIterator* taskIterator = new TaskIterator(); iterator->itearot = (union Data*)taskIterator; iterator->exec = C_execTaskIterator; iterator->barrier = C_barrierTaskIterator; taskIterator->taskList = list; } __code execTaskIterator(struct taskIterator* iterator, struct TaskManager* taskManager, struct Context* task, __code next(...)) { if (iterator->list->next == null) { goto next(...); } iterator->list = list->next; struct Context* task = (struct Context*)iterator->list->data; struct TaskManager taskManager = task->taskManager; taskManager->spawn(task, C_execTaskIterator); } __code barrierTaskIterator(struct MultiDimIterator* iterator, struct Context* task, __code next(...), __code whenWait(...)) { if (__sync_fetch_and_sub(&iterator->count, 1) == 1) { goto next(...); } goto whenWait(...); }