comparison bin/cerium @ 0:04e28d8d3c6f

first commit
author Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp>
date Mon, 08 Nov 2010 01:23:25 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:04e28d8d3c6f
1 #!/usr/bin/perl -w
2
3 use strict;
4
5 use XML::LibXML;
6
7 my $command = shift;
8 my $main = "main.cc";
9 my $task_config = "tasks.xml";
10 my $cerium_path = "/Users/e065746/Works/lab/hg/Cerium";
11
12 if ($command =~ /init/) {
13 &init;
14 } elsif ($command =~ /make/) {
15 &make;
16 } elsif ($command =~ /help/) {
17 &help;
18 } else {
19 &help;
20 }
21 exit 0;
22
23 sub help {
24 print "$0 init ... initialize cerium application\n";
25 }
26
27 sub init {
28 # setup initial cerium configuration
29 mkdir "Task";
30 if (! -e $main ) { &make_main; }
31 if (! -e $task_config ) { &make_task_config; }
32 }
33
34 sub make_main {
35 open(F,">$main") or die("Can't write $main\n");
36 print F <<'EOFEOF';
37 #include <stdio.h>
38 #include <stdlib.h>
39 #include <string.h>
40 #include "TaskManager.h"
41 #include "Func.h"
42
43 extern void task_init(void);
44
45 const char *usr_help_str = "Usage: ./main [-cpu spe_num] [-count N]\n\
46 -cpu Number of SPE (default 1) \n\"";
47
48 int
49 init(int argc, char **argv)
50 {
51 for (int i = 1; argv[i]; ++i) {
52 if (strcmp(argv[i], "-count") == 0) {
53 count = atoi(argv[++i]);
54 }
55
56 }
57
58 return 0;
59 }
60
61 void
62 hello_init(void)
63 {
64 HTask *hello;
65
66 for (int i = 0; i < count; i++) {
67 /**
68 * Create Task
69 * create_task(Task ID);
70 */
71 hello = manager->create_task(HELLO_TASK);
72
73 /**
74 * Select CPU
75 * SPE_0, SPE_1, SPE_2, SPE_3, SPE_4, SPE_5, SPE_ANY
76 * if you do not call this, execute PPE.
77 */
78 hello->set_cpu(SPE_ANY);
79
80 /**
81 * Set 32bits parameter
82 * add_param(32bit parameter);
83 */
84 hello->add_param(i);
85
86 hello->spawn();
87 }
88 }
89
90 int
91 TMmain(int argc, char *argv[])
92 {
93 if (init(argc, argv) < 0) {
94 return -1;
95 }
96 task_init();
97 init();
98
99 return 0;
100 }
101 EOFEOF
102 }
103
104
105
106 sub make {
107
108 return if ( ! -e $task_config );
109
110 my $parser = XML::LibXML->new();
111 my $doc = $parser->parse_file("$cerium_path/lib/tasks.xml");
112 my $root = $doc->documentElement();
113 my $ccs = {};
114 for my $e ($root->childNodes) {
115 if ( $e->nodeName eq "cc" ) {
116 my $cc = {};
117 my @att = $e->attributes;
118 print $e->nodeName, "\n";
119
120 for my $a (@att) {
121 if ( $a->nodeName eq "name" ) {
122 print $a->value, "\n";
123 $cc->{"name"} = $a->value;
124 }
125 }
126
127 for my $child ( $e->childNodes ) {
128 &compiler($cc, $child);
129 }
130
131 $ccs->{$cc->{"name"}} = $cc;
132 }
133 }
134 &printcc($ccs);
135 }
136
137 sub compiler{
138 my ($cc, $e) = @_;
139
140 my $type = $e->nodeName;
141 my $c = {};
142 for my $child ( $e->childNodes ) {
143 my $node = $child->nodeName;
144 if ( $node eq "command" ) {
145 $c->{"command"} = $child->textContent;
146 } elsif ( $node eq "flag" ) {
147 $c->{"flag"} .= $child->textContent . " ";
148 }
149 }
150
151 $cc->{$type} = $c;
152 }
153
154 sub printcc{
155 my ($ccs) = @_;
156
157 for my $cc (keys %$ccs) {
158 print "$cc", "\n";
159 for my $s (keys %{$ccs->{$cc}}) {
160 #print "$s : $cc->{$s}" , "\n";
161 print " $s ";
162 my %h = %{$ccs->{$cc}->{$s}};
163 for my $t (keys %h) {
164 print " $t : $h{$t}\n";
165 }
166 }
167 }
168 }
169
170
171
172 __END__
173
174 =head1 NAME
175
176 cerium -- Cerium task manager configuration manager
177
178 =head1 SYNOPSIS
179
180 cerium init
181 cerium make
182 cerium help
183
184 =head1 DESCRIPTION
185
186 cerium init
187
188 =cut
189