Mercurial > hg > Members > e085722 > Cerium
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/cerium Mon Nov 08 01:23:25 2010 +0900 @@ -0,0 +1,189 @@ +#!/usr/bin/perl -w + +use strict; + +use XML::LibXML; + +my $command = shift; +my $main = "main.cc"; +my $task_config = "tasks.xml"; +my $cerium_path = "/Users/e065746/Works/lab/hg/Cerium"; + +if ($command =~ /init/) { + &init; +} elsif ($command =~ /make/) { + &make; +} elsif ($command =~ /help/) { + &help; +} else { + &help; +} +exit 0; + +sub help { + print "$0 init ... initialize cerium application\n"; +} + +sub init { +# setup initial cerium configuration + mkdir "Task"; + if (! -e $main ) { &make_main; } + if (! -e $task_config ) { &make_task_config; } +} + +sub make_main { + open(F,">$main") or die("Can't write $main\n"); + print F <<'EOFEOF'; +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "TaskManager.h" +#include "Func.h" + +extern void task_init(void); + +const char *usr_help_str = "Usage: ./main [-cpu spe_num] [-count N]\n\ + -cpu Number of SPE (default 1) \n\""; + +int +init(int argc, char **argv) +{ + for (int i = 1; argv[i]; ++i) { + if (strcmp(argv[i], "-count") == 0) { + count = atoi(argv[++i]); + } + + } + + return 0; +} + +void +hello_init(void) +{ + HTask *hello; + + for (int i = 0; i < count; i++) { + /** + * Create Task + * create_task(Task ID); + */ + hello = manager->create_task(HELLO_TASK); + + /** + * Select CPU + * SPE_0, SPE_1, SPE_2, SPE_3, SPE_4, SPE_5, SPE_ANY + * if you do not call this, execute PPE. + */ + hello->set_cpu(SPE_ANY); + + /** + * Set 32bits parameter + * add_param(32bit parameter); + */ + hello->add_param(i); + + hello->spawn(); + } +} + +int +TMmain(int argc, char *argv[]) +{ + if (init(argc, argv) < 0) { + return -1; + } + task_init(); + init(); + + return 0; +} +EOFEOF +} + + + +sub make { + + return if ( ! -e $task_config ); + + my $parser = XML::LibXML->new(); + my $doc = $parser->parse_file("$cerium_path/lib/tasks.xml"); + my $root = $doc->documentElement(); + my $ccs = {}; + for my $e ($root->childNodes) { + if ( $e->nodeName eq "cc" ) { + my $cc = {}; + my @att = $e->attributes; + print $e->nodeName, "\n"; + + for my $a (@att) { + if ( $a->nodeName eq "name" ) { + print $a->value, "\n"; + $cc->{"name"} = $a->value; + } + } + + for my $child ( $e->childNodes ) { + &compiler($cc, $child); + } + + $ccs->{$cc->{"name"}} = $cc; + } + } + &printcc($ccs); +} + +sub compiler{ + my ($cc, $e) = @_; + + my $type = $e->nodeName; + my $c = {}; + for my $child ( $e->childNodes ) { + my $node = $child->nodeName; + if ( $node eq "command" ) { + $c->{"command"} = $child->textContent; + } elsif ( $node eq "flag" ) { + $c->{"flag"} .= $child->textContent . " "; + } + } + + $cc->{$type} = $c; +} + +sub printcc{ + my ($ccs) = @_; + + for my $cc (keys %$ccs) { + print "$cc", "\n"; + for my $s (keys %{$ccs->{$cc}}) { + #print "$s : $cc->{$s}" , "\n"; + print " $s "; + my %h = %{$ccs->{$cc}->{$s}}; + for my $t (keys %h) { + print " $t : $h{$t}\n"; + } + } + } +} + + + +__END__ + +=head1 NAME + +cerium -- Cerium task manager configuration manager + +=head1 SYNOPSIS + + cerium init + cerium make + cerium help + +=head1 DESCRIPTION + +cerium init + +=cut +