Mercurial > hg > Members > kono > Cerium
diff TaskManager/Test/Sum/main.cpp @ 14:41ccd4b38184
*** empty log message ***
author | gongo |
---|---|
date | Fri, 08 Feb 2008 18:00:21 +0900 |
parents | 7aa4c006e4be |
children | b59d134a81a7 |
line wrap: on
line diff
--- a/TaskManager/Test/Sum/main.cpp Fri Feb 08 09:55:20 2008 +0900 +++ b/TaskManager/Test/Sum/main.cpp Fri Feb 08 18:00:21 2008 +0900 @@ -4,27 +4,106 @@ #define MAX 1024 +TaskManager *manager; + +//SymTable *TaskManager::symtb; + +int add(void*, void*); +int sub(void*, void*); +int mul(void*, void*); +int div(void*, void*); +int sum(void*, void*); +int sum2(void*, void*); + int data[MAX] __attribute__((aligned(16))); int buff[MAX] __attribute__((aligned(16))); int out[MAX] __attribute__((aligned(16))); +int +add(void *wbuf, void *rbuf) +{ + int *ret = (int*)wbuf; + int *data = (int*)rbuf; -typedef unsigned long long Uint64; -typedef unsigned int Uint32; + *ret = data[0] + data[1]; + + return sizeof(int); +} + +int +sub(void *wbuf, void *rbuf) +{ + int *ret = (int*)wbuf; + int *data = (int*)rbuf; + + *ret = data[0]-data[1]; + + return sizeof(int); +} + +int +mul(void *wbuf, void *rbuf) +{ + int *ret = (int*)wbuf; + int *data = (int*)rbuf; + + *ret = data[0]*data[1]; + + return sizeof(int); +} int -main(void) +Div(void *wbuf, void *rbuf) +{ + int *ret = (int*)wbuf; + int *data = (int*)rbuf; + + *ret = data[0]/data[1]; + + return sizeof(int); +} + +int +sum(void *wbuf, void *rbuf) { + int *ret = (int*)wbuf; + int *data = (int*)rbuf; int i; + + *ret = 0; + + for (i = 0; i < 16; i++) { + *ret += data[i]; + } + + return sizeof(int); +} + +int +sum2(void *wbuf, void *rbuf) +{ + int *ret = (int*)wbuf; + int *data = (int*)rbuf; + int i; + + *ret = 0; + + for (i = 0; i < 64; i++) { + *ret += data[i*4]; + } + + return sizeof(int); +} + +int +init2(void *w, void *r) +{ + int i, fd; int div = MAX/16; - TaskManager *manager; HTaskPtr *task = new HTaskPtr[div]; HTaskPtr last; - manager = new TaskManager(1); - manager->init(); - for (i = 0; i < MAX; i++) { data[i] = i; } @@ -32,17 +111,20 @@ memset(buff, 0, sizeof(int)*1024); memset(out, 0, sizeof(int)*1024); + fd = manager->open("Sum"); for (i = 0; i < div; i++) { - task[i] = manager->create_task(4, sizeof(int)*16, - (Uint32)&data[i*16], - (Uint32)&buff[i*4], + task[i] = manager->create_task(fd, sizeof(int)*16, + (unsigned int)&data[i*16], + (unsigned int)&buff[i*4], NULL); } - last = manager->create_task(5, sizeof(int)*256, - (Uint32)buff, (Uint32)&out[0], NULL); + fd = manager->open("Sum2"); + last = manager->create_task(fd, sizeof(int)*256, + (unsigned int)buff, + (unsigned int)&out[0], NULL); -#if 1 +#if 0 for (i = 0; i < div-1; i++) { manager->set_task_depend(task[i], task[i+1]); } @@ -60,14 +142,22 @@ manager->run_task(task[i]); } manager->run_task(last); -#endif +#endif + manager->run(); + return 0; +} + + +int +result(void *w, void *r) +{ printf("manager : %d\n", out[0]); out[0] = 0; - for (i = 0; i < MAX; i++) { + for (int i = 0; i < MAX; i++) { out[0] += i; } @@ -75,3 +165,42 @@ return 0; } + +int +init(void *w, void *r) +{ + HTaskPtr init_task, finish_task; + + int fd; + + fd = manager->open("Init2"); + init_task = manager->create_task(fd, 0, 0, 0, NULL); + manager->run_task(init_task); + + fd = manager->open("Result"); + finish_task = manager->create_task(fd, 0, 0, 0, NULL); + manager->set_task_depend(init_task, finish_task); + manager->run_task(finish_task); + + return 0; +} + +int +main(void) +{ + manager = new TaskManager(1); + manager->init(); + + // 本当は、ここは user 側で書かない + // 設定ファイルかなにかで読むとか?違うな + manager->set_symbol("Init", (void*)init); + manager->set_symbol("Init2", (void*)init2); + manager->set_symbol("Result", (void*)result); + manager->set_symbol("Sum", (void*)sum); + manager->set_symbol("Sum2", (void*)sum2); + + manager->set_init_task("Init"); + manager->run(); + + return 0; +}