Mercurial > hg > Gears > Gears
changeset 891:76a8f578091d
...
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 26 Jan 2021 14:03:45 +0900 |
parents | 1caa59b7f228 |
children | 3fa258d0891a |
files | src/parallel_execution/CMakeLists.txt src/parallel_execution/generate_stub.pl |
diffstat | 2 files changed, 49 insertions(+), 39 deletions(-) [+] |
line wrap: on
line diff
--- a/src/parallel_execution/CMakeLists.txt Mon Jan 25 21:23:32 2021 +0900 +++ b/src/parallel_execution/CMakeLists.txt Tue Jan 26 14:03:45 2021 +0900 @@ -160,7 +160,7 @@ TARGET DPP2 SOURCES - TaskManagerImpl.cbc CPUWorker.cbc SynchronizedQueue.cbc examples/DPP2/AtomicTImpl.cbc SingleLinkedStack.cbc examples/DPP2/PhilsImpl.cbc examples/DPP2/main.cbc examples/DPP2/ForkImpl.cbc ModelChecking/crc32.c ModelChecking/memory.c ModelChecking/state_db.c AtomicReference.cbc ModelChecking/MCWorker.cbc + TaskManagerImpl.cbc CPUWorker.cbc SynchronizedQueue.cbc examples/DPP2/AtomicTImpl.cbc SingleLinkedStack.cbc examples/DPP2/PhilsImpl.cbc examples/DPP2/main.cbc examples/DPP2/ForkImpl.cbc ModelChecking/crc32.c ModelChecking/memory.c ModelChecking/state_db.c AtomicReference.cbc ) GearsCommand(
--- a/src/parallel_execution/generate_stub.pl Mon Jan 25 21:23:32 2021 +0900 +++ b/src/parallel_execution/generate_stub.pl Tue Jan 26 14:03:45 2021 +0900 @@ -630,7 +630,7 @@ my $hasParGoto = 0; my $inMain = 0 ; my $inCode = 0 ; - my $codeGearName; + my $currentCodeGearName; my %localVarType; for (@$inputCbCFile){ @@ -692,20 +692,20 @@ debug_print("generateDataGear",__LINE__, $_) if $opt_debug; $inCode = 1; %localVarType = (); - $codeGearName = $1; + $currentCodeGearName = $1; my $args = $2; my $tail = $3; #replace Code Gear Name to Implemenatation - if (exists $replaceCodeGearNames->{$codeGearName}) { - $codeGearName = $replaceCodeGearNames->{$codeGearName}; + if (exists $replaceCodeGearNames->{$currentCodeGearName}) { + $currentCodeGearName = $replaceCodeGearNames->{$currentCodeGearName}; } - if ($codeGearName =~ /_stub$/) { + if ($currentCodeGearName =~ /_stub$/) { # don't touch already existing stub $inStub = 1; - $stub{$codeGearName}->{static} = 1; - $stub{$codeGearName}->{wrote} = 1; + $stub{$currentCodeGearName}->{static} = 1; + $stub{$currentCodeGearName}->{wrote} = 1; print $fd $_; next; } @@ -723,10 +723,10 @@ # and passed to the CodeGear # struct Implementation needs special handling # __code next(...) ---> enum Code next - $prevCodeGearName = $codeGearName; - $dataGearVar{$codeGearName} = []; - $outputVar{$codeGearName} = ""; - $outputArgs{$codeGearName} = {}; + $prevCodeGearName = $currentCodeGearName; + $dataGearVar{$currentCodeGearName} = []; + $outputVar{$currentCodeGearName} = ""; + $outputArgs{$currentCodeGearName} = {}; my $newArgs = "struct Context *${context_name},"; if ($args=~/^struct Context\s*\*\s*${context_name}/) { $newArgs = ""; @@ -742,7 +742,7 @@ if ($args =~ s/^(\s)*\_\_code\s+(\w+)\(([^)]*)\)//) { my $next = $2; my @args = split(/,/,$3); - if (generateStubArgs($codeGearName, $next, "Code", "", $next, $implInterfaceInfo,0) ) { + if (generateStubArgs($currentCodeGearName, $next, "Code", "", $next, $implInterfaceInfo,0) ) { $newArgs .= "enum Code $next"; } # analyze continuation arguments @@ -760,8 +760,8 @@ $typeName = "$structType $typeName"; } my $typeField = lcfirst($typeName); - push(@{$outputArgs{$codeGearName}->{$next}}, $varName); - if (generateStubArgs($codeGearName, $varName, $typeName, $ptrType, $typeField, $implInterfaceInfo,1)) { + push(@{$outputArgs{$currentCodeGearName}->{$next}}, $varName); + if (generateStubArgs($currentCodeGearName, $varName, $typeName, $ptrType, $typeField, $implInterfaceInfo,1)) { $newArgs .= ",$structType $typeName **O_$varName"; } } @@ -775,7 +775,7 @@ $typeName = "$structType $typeName"; } my $typeField = lcfirst($typeName); - generateStubArgs($codeGearName, $varName, $typeName, $ptrType, $typeField, $implInterfaceInfo,0); + generateStubArgs($currentCodeGearName, $varName, $typeName, $ptrType, $typeField, $implInterfaceInfo,0); } elsif ($args =~ s/(.*,)//) { $newArgs .= $1; } else { @@ -784,17 +784,17 @@ } } # generate goto statement from stub to the CodeGear in the buffer - $dataGearName{$codeGearName} .= "\tgoto $codeGearName(${context_name}"; - for my $arg ( @{$dataGearVar{$codeGearName}}) { - $dataGearName{$codeGearName} .= ", $arg"; + $dataGearName{$currentCodeGearName} .= "\tgoto $currentCodeGearName(${context_name}"; + for my $arg ( @{$dataGearVar{$currentCodeGearName}}) { + $dataGearName{$currentCodeGearName} .= ", $arg"; } - $dataGearName{$codeGearName} .= ");"; + $dataGearName{$currentCodeGearName} .= ");"; # generate CodeGear header with new arguments - print $fd "__code $codeGearName($newArgs)$tail\n"; - if ($outputVar{$codeGearName} ne "") { + print $fd "__code $currentCodeGearName($newArgs)$tail\n"; + if ($outputVar{$currentCodeGearName} ne "") { # output data var can be use before write # it should be initialze by gearef - print $fd $outputVar{$codeGearName}; + print $fd $outputVar{$currentCodeGearName}; } next; } elsif (! $inCode) { @@ -812,7 +812,7 @@ my $method = $3; my $args = $4; - my $currentCodeGearInfo = $filename2EachCodeGearArgs{$filename}->{$codeGearName}; + my $currentCodeGearInfo = $filename2EachCodeGearArgs{$filename}->{$currentCodeGearName}; my $instanceType = $currentCodeGearInfo->{localVar}->{$instance}; my $currentInfo = $headerNameToInfo->{$instanceType}; my $parsedInstanceType = Gears::Interface->detailed_parse($currentInfo->{path}); @@ -882,8 +882,7 @@ method => $method, tmpArgs => $args, }; - my ($gen_line, ) = generateInterfaceMeta($_, $codeGearName, $filename, $parsed, \%filename2EachCodeGearArgs, \%localVarType, "${context_name}->task"); - print $fd $gen_line; + print $fd generateInterfaceGearef($_, $currentCodeGearName, $filename, $parsed, \%filename2EachCodeGearArgs, \%localVarType, "${context_name}->task"); my $putTask = << "EOFEOF"; ${prev}element = &ALLOCATE(${context_name}, Element)->Element; @@ -904,19 +903,20 @@ method => $3, tmpArgs => $4, }; - my @gen_lines = generateInterfaceMeta($_, $codeGearName, $filename, $parsed, \%filename2EachCodeGearArgs, \%localVarType, $context_name); - print $fd join "\n", @gen_lines; + print $fd generateInterfaceGearef($_, $currentCodeGearName, $filename, $parsed, \%filename2EachCodeGearArgs, \%localVarType, $context_name); + my $next = "$parsed->{next}->$parsed->{method}"; + print $fd $parsed->{prev},generateMeta($context_name, $next); next; } elsif(/^(.*)par goto (\w+)\((.*)\);/) { debug_print("generateDataGear",__LINE__, $_) if $opt_debug; # handling par goto statement # convert it to the parallel my $prev = $1; - my $codeGearName = $2; + my $nextCodeGearName = $2; my $args = $3; - my $inputCount = $codeGear{$codeGearName}->{'input'}; - my $outputCount = $codeGear{$codeGearName}->{'output'}; + my $inputCount = $codeGear{$nextCodeGearName}->{'input'}; + my $outputCount = $codeGear{$nextCodeGearName}->{'output'}; my @iterateCounts; # parse examples 'par goto(.., iterate(10), exit);' if ($args =~ /iterate\((.*)?\),/) { @@ -934,7 +934,7 @@ my $initTask = << "EOFEOF"; ${prev}${context_name}\->task = NEW(struct Context); ${prev}initContext(${context_name}\->task); - ${prev}${context_name}\->task->next = C_$codeGearName; + ${prev}${context_name}\->task->next = C_$nextCodeGearName; ${prev}${context_name}\->task->idgCount = $inputCount; ${prev}${context_name}\->task->idg = ${context_name}\->task->dataNum; ${prev}${context_name}\->task->maxIdg = ${context_name}\->task->idg + $inputCount; @@ -984,7 +984,7 @@ $arg_context = "kernel"; } - for my $n ( @{$dataGearVar{$codeGearName}} ) { + for my $n ( @{$dataGearVar{$currentCodeGearName}} ) { # continuation arguments $v = 1 if ( $n eq $next); } @@ -998,14 +998,14 @@ if ($v || ($implInterfaceInfo->{isImpl} && defined $code{$implInterfaceInfo->{interface}}->{$next})) { # write continuation's arguments into the interface arguments # we may need a commit for a shared DataGear - for my $arg ( @{$outputArgs{$codeGearName}->{$next}} ) { + for my $arg ( @{$outputArgs{$currentCodeGearName}->{$next}} ) { my $v = shift(@args); print $fd "\t*O_$arg = $v;\n"; } if ($hasParGoto) { print $fd "${prev}Gearef(${arg_context}, TaskManager)->taskList = ${arg_context}->taskList;\n"; print $fd "${prev}Gearef(${arg_context}, TaskManager)->next1 = C_$next;\n"; - print $fd "${prev}goto meta(${arg_context}, C_$next);\n"; + print $fd ${prev},generateMeta(${arg_context}, "C_$next"); } else { print $fd "${prev}goto meta(${arg_context}, $next);\n"; } @@ -1068,7 +1068,7 @@ } if (defined $prevCodeGearName) { if (!defined $stub{$prevCodeGearName."_stub"}->{wrote}) { - $stub{$prevCodeGearName."_stub"}->{wrote} = &generateStub($fd,$prevCodeGearName,$dataGearName{$codeGearName}); + $stub{$prevCodeGearName."_stub"}->{wrote} = &generateStub($fd,$prevCodeGearName,$dataGearName{$currentCodeGearName}); } } @@ -1211,7 +1211,7 @@ print "[$functionName] match $lineNumber : $line"; } -sub generateInterfaceMeta { +sub generateInterfaceGearef { my ($line, $currentCodeGearName, $filename, $parsed, $filename2args, $localVarType, $context_name) = @_; my $return_line; @@ -1328,6 +1328,16 @@ } $i++; } - my $goto_meta = "${prev}goto meta(${context_name}, $next->$method);\n"; - return ($return_line, $goto_meta); + + return $return_line; } +#my $goto_meta = "${prev}goto meta(${context_name}, $next->$method);\n"; + +sub generateMeta { + my ($context, $next) = @_; + return "goto meta($context, $next);\n"; +} + +sub findMetaPM { + +}