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;
+}