diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/make/force-rebuild | 2 | ||||
-rw-r--r-- | lib/sbin/CreateScheduleBindings.pl | 36 | ||||
-rw-r--r-- | lib/sbin/ScheduleParser.pl | 35 |
3 files changed, 61 insertions, 12 deletions
diff --git a/lib/make/force-rebuild b/lib/make/force-rebuild index d4247101..eb36a6f2 100644 --- a/lib/make/force-rebuild +++ b/lib/make/force-rebuild @@ -34,5 +34,7 @@ 21 Nov 2005: Change names of auto-generated capability header files 08 Apr 2008: Add IF clause to scheduler 23 Dec 2010: Rename cctki_Capabilities.h to cctk_Capabilities.h +12 Jan 2011: Add PROVIDES/REQUIRES clauses to scheduler 20 Jan 2011: Generate prototypes for scheduled functions 27 Oct 2011: Optimize CCTK_ARGUMENTS for grid functions in Fortran + diff --git a/lib/sbin/CreateScheduleBindings.pl b/lib/sbin/CreateScheduleBindings.pl index 045b5d7a..095d49dc 100644 --- a/lib/sbin/CreateScheduleBindings.pl +++ b/lib/sbin/CreateScheduleBindings.pl @@ -499,8 +499,11 @@ sub ScheduleBlock my($trigger_groups); my($sync_groups); my(@options); + my($tags); my(@before_list); my(@after_list); + my(@writes_list); + my(@reads_list); my(@while_list); my(@if_list); @@ -532,6 +535,8 @@ sub ScheduleBlock $rhinterface_db); @options = split(/,/, $rhschedule_db->{"\U$thorn\E BLOCK_$block OPTIONS"}); + $tags = $rhschedule_db->{"\U$thorn\E BLOCK_$block TAGS"}; + $tags = '' if ! defined $tags; @before_list = &ScheduleSelectRoutines($thorn, $implementation, $rhschedule_db->{"\U$thorn\E BLOCK_$block BEFORE"}, @@ -541,6 +546,14 @@ sub ScheduleBlock $rhschedule_db->{"\U$thorn\E BLOCK_$block AFTER"}, $rhschedule_db); + @writes_list = &ScheduleSelectRoutines($thorn, $implementation, + $rhschedule_db->{"\U$thorn\E BLOCK_$block WRITES"}, + $rhschedule_db); + + @reads_list = &ScheduleSelectRoutines($thorn, $implementation, + $rhschedule_db->{"\U$thorn\E BLOCK_$block READS"}, + $rhschedule_db); + @while_list = &ScheduleSelectVars($thorn, $implementation, $rhschedule_db->{"\U$thorn\E BLOCK_$block WHILE"}, $rhinterface_db); @@ -648,16 +661,25 @@ sub ScheduleBlock # $help .= 'IO methods to decide whether of not execution should happen.'; # &CST_error(0,$mess,$help,__LINE__,__FILE__); # } - $buffer .= $indent . scalar(@$sync_groups) . ", /* Number of SYNC groups */\n"; - $buffer .= $indent . scalar(@options) . ", /* Number of Options */\n"; - $buffer .= $indent . scalar(@before_list) . ", /* Number of BEFORE routines */\n"; - $buffer .= $indent . scalar(@after_list) . ", /* Number of AFTER routines */\n"; - $buffer .= $indent . scalar(@while_list) . ", /* Number of WHILE variables */\n"; - $buffer .= $indent . scalar(@if_list) . ", /* Number of IF variables */\n"; + $buffer .= $indent . scalar(@$sync_groups) . ", /* Number of SYNC groups */\n"; + $buffer .= $indent . scalar(@writes_list) . ", /* Number of WRITES clauses */\n"; + $buffer .= $indent . scalar(@reads_list) . ", /* Number of READS clauses */\n"; + $buffer .= $indent . scalar(@options) . ", /* Number of Options */\n"; + $buffer .= $indent . scalar(@before_list) . ", /* Number of BEFORE routines */\n"; + $buffer .= $indent . scalar(@after_list) . ", /* Number of AFTER routines */\n"; + $buffer .= $indent . scalar(@while_list) . ", /* Number of WHILE variables */\n"; + $buffer .= $indent . scalar(@if_list) . ", /* Number of IF variables */\n"; $buffer .= $indent . "cctkschedulei_tlevelarray /* Array of timelevel data for storage groups */"; foreach $item (@$mem_groups, @$comm_groups, @$trigger_groups, @$sync_groups, - @options, @before_list, @after_list, @while_list, @if_list) + @writes_list, @reads_list, @options) + { + $buffer .= ",\n$indent\"$item\""; + } + + $buffer .= ",\n$indent\"$tags\""; + + foreach $item (@before_list, @after_list, @while_list, @if_list) { $buffer .= ",\n$indent\"$item\""; } diff --git a/lib/sbin/ScheduleParser.pl b/lib/sbin/ScheduleParser.pl index 9fdff5f5..7670b19d 100644 --- a/lib/sbin/ScheduleParser.pl +++ b/lib/sbin/ScheduleParser.pl @@ -113,7 +113,8 @@ sub parse_schedule_ccl my($n_statements); my($name, $as, $type, $description, $where, $language, $mem_groups, $comm_groups, $trigger_groups, $sync_groups, - $options, $before_list, $after_list, $while_list, $if_list); + $options, $tags, $before_list, $after_list, + $writes_list, $reads_list, $while_list, $if_list); my($groups); $buffer = ""; @@ -127,8 +128,9 @@ sub parse_schedule_ccl ($line_number, $name, $as, $type, $description, $where, $language, $mem_groups, $comm_groups, $trigger_groups, $sync_groups, - $options,$before_list, $after_list, $while_list, $if_list) - = &ParseScheduleBlock($thorn,$line_number, @data); + $options, $tags, $before_list, $after_list, + $writes_list, $reads_list, $while_list, $if_list) = + &ParseScheduleBlock($thorn,$line_number, @data); $schedule_db{"\U$thorn\E BLOCK_$n_blocks NAME"} = $name; $schedule_db{"\U$thorn\E BLOCK_$n_blocks AS"} = $as; @@ -141,8 +143,11 @@ sub parse_schedule_ccl $schedule_db{"\U$thorn\E BLOCK_$n_blocks TRIG"} = $trigger_groups; $schedule_db{"\U$thorn\E BLOCK_$n_blocks SYNC"} = $sync_groups; $schedule_db{"\U$thorn\E BLOCK_$n_blocks OPTIONS"} = $options; + $schedule_db{"\U$thorn\E BLOCK_$n_blocks TAGS"} = $tags; $schedule_db{"\U$thorn\E BLOCK_$n_blocks BEFORE"} = $before_list; $schedule_db{"\U$thorn\E BLOCK_$n_blocks AFTER"} = $after_list; + $schedule_db{"\U$thorn\E BLOCK_$n_blocks WRITES"} = $writes_list; + $schedule_db{"\U$thorn\E BLOCK_$n_blocks READS"} = $reads_list; $schedule_db{"\U$thorn\E BLOCK_$n_blocks WHILE"} = $while_list; $schedule_db{"\U$thorn\E BLOCK_$n_blocks IF"} = $if_list; @@ -196,11 +201,14 @@ sub ParseScheduleBlock my($thorn,$line_number, @data) = @_; my($name, $as, $type, $description, $where, $language, $mem_groups, $comm_groups, $trigger_groups, $sync_groups, - $options, $before_list, $after_list, $while_list, $if_list); + $options, $tags, $before_list, $after_list, + $writes_list, $reads_list, $while_list, $if_list); my(@fields); my($field); my(@before_list) = (); my(@after_list) = (); + my(@writes_list) = (); + my(@reads_list) = (); my(@while_list) = (); my(@if_list) = (); my(@mem_groups) = (); @@ -208,6 +216,7 @@ sub ParseScheduleBlock my(@trigger_groups) = (); my(@sync_groups) = (); my(@options) = (); + my(@tags) = (); my($keyword) = ""; my(@current_sched_list) = (); @@ -467,10 +476,22 @@ sub ParseScheduleBlock { push(@sync_groups, split(/\s+|\s*,\s*/, $1)); } + elsif($data[$line_number] =~ m/^\s*WRITES\s*:\s*(.*)$/i) + { + push(@writes_list, split(/\s+|\s*,\s*/, $1)); + } + elsif($data[$line_number] =~ m/^\s*READS\s*:\s*(.*)$/i) + { + push(@reads_list, split(/\s+|\s*,\s*/, $1)); + } elsif($data[$line_number] =~ m/^\s*OPTI[^:]*:\s*(.*)$/i) { push(@options, split(/\s+|\s*,\s*/, $1)); } + elsif($data[$line_number] =~ m/^\s*TAGS[^:]*:\s*(.*)$/i) + { + push(@tags, $1); + } elsif($data[$line_number] =~ m/^\s*LANG[^:]*:\s*(.*)$/i) { if($language ne "") @@ -518,8 +539,11 @@ sub ParseScheduleBlock $trigger_groups = join(",", @trigger_groups); $sync_groups = join(",", @sync_groups); $options = join(",", @options); + $tags = join(" ", @tags); $before_list = join(",", @before_list); $after_list = join(",", @after_list); + $writes_list = join(",", @writes_list); + $reads_list = join(",", @reads_list); $while_list = join(",", @while_list); $if_list = join(",", @if_list); @@ -527,7 +551,8 @@ sub ParseScheduleBlock return ($line_number, $name, $as, $type, $description, $where, $language, $mem_groups, $comm_groups, $trigger_groups, $sync_groups, - $options,$before_list, $after_list, $while_list, $if_list); + $options, $tags, $before_list, $after_list, + $writes_list, $reads_list, $while_list, $if_list); } |