diff example/dependency_task/main.cc @ 109:5c194c71eca8

Cerium cvs version
author gongo@gendarme.local
date Wed, 12 Nov 2008 17:39:33 +0900
parents
children a09588a03ea5
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/dependency_task/main.cc	Wed Nov 12 17:39:33 2008 +0900
@@ -0,0 +1,78 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "TaskManager.h"
+#include "Func.h"
+
+extern void task_init(void);
+
+int *idata;
+int length = DATA_NUM;
+int depend_flg = 1;
+
+char *help_str = "Usage: ./dependency [-cpu spe_num] [-nodepend]\n\
+  -nodepend  No Depenendcy";
+
+void
+run_start(void)
+{
+    HTaskPtr t_exec;
+    HTaskPtr t_print;
+
+    idata = (int*)manager->malloc(sizeof(int)*length*2);
+    for (int i = 0; i < length*2; i++) {
+	idata[i] = 0;
+    }
+
+    // exec1,2 が計算した配列を見る
+    t_print = manager->create_task(TASK_PRINT);
+    t_print->add_inData(idata, sizeof(int)*length*2);
+    t_print->add_param(length*2);
+
+    // idata を二つに分けて計算する
+    for (int i = 0; i < 2; i++) {
+	t_exec = manager->create_task(TASK_EXEC);
+	t_exec->add_inData(&idata[length*i], sizeof(int)*length);
+	t_exec->add_outData(&idata[length*i], sizeof(int)*length);
+	t_exec->add_param(length);
+	t_exec->add_param(13*(i+1));
+	t_exec->set_cpu(SPE_ANY);
+
+	if (depend_flg)
+	    t_print->wait_for(t_exec);
+	
+	t_exec->spawn();
+    }
+
+    // add Active Queue
+    t_print->spawn();
+}
+
+int
+init(int argc, char **argv)
+{
+    for (int i = 1; argv[i]; ++i) {
+	if (strcmp(argv[i], "-nodepend") == 0) {
+	    depend_flg = 0;
+	}
+	if (strcmp(argv[i], "--help") == 0) {
+            printf("%s\n", help_str);
+            return -1;
+	}
+    }
+
+    return 0;
+}
+
+int
+cerium_main(int argc, char *argv[])
+{
+    if (init(argc, argv) < 0) {
+	return -1;
+    }
+
+    task_init();
+    run_start();
+
+    return 0;
+}