changeset 25:c25e1386e469

backup 2021-01-18
author autobackup
date Mon, 18 Jan 2021 00:10:03 +0900
parents f0bc0289de97
children f0d19eb29616
files user/anatofuz/note/2021/01/17.md
diffstat 1 files changed, 391 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/user/anatofuz/note/2021/01/17.md	Mon Jan 18 00:10:03 2021 +0900
@@ -0,0 +1,391 @@
+# 2021/01/17
+
+```shell
++kajika+anatofuz$ perl generate_stub.pl --debug examples/generics_test/main.cbc > /dev/null
+{
+    createTask      [
+        [0] "loopCounter",
+        [1] "taskManager"
+    ],
+    initDataGears   [
+        [0] "loopCounter",
+        [1] "taskManager"
+    ],
+    prevTask        [
+        [0] "loopCounter"
+    ]
+}
+Use of uninitialized value $ntype in lcfirst at generate_stub.pl line 823.
+Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 825.
+Use of uninitialized value $ntype in hash element at generate_stub.pl line 827.
+Use of uninitialized value $p in string eq at generate_stub.pl line 854.
+Use of uninitialized value $p in substitution (s///) at generate_stub.pl line 855.
+Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 909.
+Use of uninitialized value $p in string eq at generate_stub.pl line 854.
+Use of uninitialized value $p in substitution (s///) at generate_stub.pl line 855.
+Use of uninitialized value $pType in substitution (s///) at generate_stub.pl line 859.
+Use of uninitialized value $pType in pattern match (m//) at generate_stub.pl line 906.
+Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 909.
+{
+    createTask      [
+        [0] "loopCounter",
+        [1] "taskManager"
+    ],
+    initDataGears   [
+        [0] "loopCounter",
+        [1] "taskManager"
+    ],
+    prevTask        [
+        [0] "loopCounter"
+    ],
+    shutdown        [
+        [0] "taskManager"
+    ]
+}
+```
+
+
+`%dataGearVarType`はgenerateStubArgsでしか呼ばれていないっぽい
+
+
+```shell
++kajika+anatofuz$ perl generate_stub.pl --debug examples/generics_test/main.cbc
+[getDataGear] match 175 : #interface "StackGenerics.h"
+[interfacepath]
+"/home/anatofuz/src/firefly/hg/Gears/Gears/src/parallel_execution/interface/StackGenerics.h"
+[getDataGear] match 137 : typedef struct StackGenerics <T> {
+[getDataGear] match 333 :     __code clear(Impl* stack,__code next(...));
+[getDataGear] match 333 :     __code push(Impl* stack,T* data, __code next(...));
+[getDataGear] match 333 :     __code pop(Impl* stack, __code next(T* data, ...));
+[getDataGear] match 333 :     __code pop2(Impl* stack, __code next(T* data, T* data1, ...));
+[getDataGear] match 333 :     __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...));
+[getDataGear] match 333 :     __code get(Impl* stack, __code next(T* data, ...));
+[getDataGear] match 333 :     __code get2(Impl* stack, __code next(T* data, T* data1, ...));
+[getDataGear] match 333 :     __code next(...);
+[getDataGear] match 333 :     __code whenEmpty(...);
+[getDataGear] match 315 : } StackGenerics;
+[getDataGear] match 342 : } StackGenerics;
+[getCodeGear] match 389 : typedef struct StackGenerics <T> {
+[getCodeGear] match 394 :     __code clear(Impl* stack,__code next(...));
+[getCodeGear] match 394 :     __code push(Impl* stack,T* data, __code next(...));
+[getCodeGear] match 394 :     __code pop(Impl* stack, __code next(T* data, ...));
+[getCodeGear] match 394 :     __code pop2(Impl* stack, __code next(T* data, T* data1, ...));
+[getCodeGear] match 394 :     __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...));
+[getCodeGear] match 394 :     __code get(Impl* stack, __code next(T* data, ...));
+[getCodeGear] match 394 :     __code get2(Impl* stack, __code next(T* data, T* data1, ...));
+[getCodeGear] match 394 :     __code next(...);
+[getCodeGear] match 394 :     __code whenEmpty(...);
+[getDataGear] match 175 : #interface "Interger.h"
+[interfacepath]
+undef
+[getDataGear] match 206 : __code gmain(){
+[getCodeGear] match 423 : __code gmain(){
+[getDataGear] match 240 :   StackGenerics<Integer>* generics_list = createStackGenericsImpl();
+[getDataGear] match 240 :   Interger* intA = NEW(Interger);
+[getDataGear] match 250 :   goto generics_list->push(intA, shutdown);
+[getDataGear] match 175 : #interface "TaskManager.h"
+[interfacepath]
+"/home/anatofuz/src/firefly/hg/Gears/Gears/src/parallel_execution/TaskManager.h"
+[getDataGear] match 137 : typedef struct TaskManager<>{
+[getDataGear] match 333 :   __code spawn(Impl* taskManager, struct Context* task, __code next(...));
+[getDataGear] match 333 :   __code spawnTasks(Impl* taskManagerImpl, struct Element* taskList, __code next1(...));
+[getDataGear] match 333 :   __code setWaitTask(Impl* taskManagerImpl, struct Context* task, __code next(...));
+[getDataGear] match 333 :   __code shutdown(Impl* taskManagerImpl, __code next(...));
+[getDataGear] match 333 :   __code incrementTaskCount(Impl* taskManagerImpl, __code next(...));
+[getDataGear] match 333 :   __code decrementTaskCount(Impl* taskManagerImpl, __code next(...));
+[getDataGear] match 333 :   __code next(...);
+[getDataGear] match 333 :   __code next1(...);
+[getDataGear] match 315 : } TaskManager;
+[getDataGear] match 342 : } TaskManager;
+[getCodeGear] match 389 : typedef struct TaskManager<>{
+[getCodeGear] match 394 :   __code spawn(Impl* taskManager, struct Context* task, __code next(...));
+[getCodeGear] match 394 :   __code spawnTasks(Impl* taskManagerImpl, struct Element* taskList, __code next1(...));
+[getCodeGear] match 394 :   __code setWaitTask(Impl* taskManagerImpl, struct Context* task, __code next(...));
+[getCodeGear] match 394 :   __code shutdown(Impl* taskManagerImpl, __code next(...));
+[getCodeGear] match 394 :   __code incrementTaskCount(Impl* taskManagerImpl, __code next(...));
+[getCodeGear] match 394 :   __code decrementTaskCount(Impl* taskManagerImpl, __code next(...));
+[getCodeGear] match 394 :   __code next(...);
+[getCodeGear] match 394 :   __code next1(...);
+[getDataGear] match 175 : #interface "StackGenerics.h"
+[interfacepath]
+"/home/anatofuz/src/firefly/hg/Gears/Gears/src/parallel_execution/interface/StackGenerics.h"
+[getDataGear] match 137 : typedef struct StackGenerics <T> {
+[getDataGear] match 333 :     __code clear(Impl* stack,__code next(...));
+[getDataGear] match 333 :     __code push(Impl* stack,T* data, __code next(...));
+[getDataGear] match 333 :     __code pop(Impl* stack, __code next(T* data, ...));
+[getDataGear] match 333 :     __code pop2(Impl* stack, __code next(T* data, T* data1, ...));
+[getDataGear] match 333 :     __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...));
+[getDataGear] match 333 :     __code get(Impl* stack, __code next(T* data, ...));
+[getDataGear] match 333 :     __code get2(Impl* stack, __code next(T* data, T* data1, ...));
+[getDataGear] match 333 :     __code next(...);
+[getDataGear] match 333 :     __code whenEmpty(...);
+[getDataGear] match 315 : } StackGenerics;
+[getDataGear] match 342 : } StackGenerics;
+[getCodeGear] match 389 : typedef struct StackGenerics <T> {
+[getCodeGear] match 394 :     __code clear(Impl* stack,__code next(...));
+[getCodeGear] match 394 :     __code push(Impl* stack,T* data, __code next(...));
+[getCodeGear] match 394 :     __code pop(Impl* stack, __code next(T* data, ...));
+[getCodeGear] match 394 :     __code pop2(Impl* stack, __code next(T* data, T* data1, ...));
+[getCodeGear] match 394 :     __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...));
+[getCodeGear] match 394 :     __code get(Impl* stack, __code next(T* data, ...));
+[getCodeGear] match 394 :     __code get2(Impl* stack, __code next(T* data, T* data1, ...));
+[getCodeGear] match 394 :     __code next(...);
+[getCodeGear] match 394 :     __code whenEmpty(...);
+[getDataGear] match 175 : #interface "Interger.h"
+[interfacepath]
+undef
+[getDataGear] match 206 : __code initDataGears(struct LoopCounter* loopCounter, struct TaskManager* taskManager) {
+[getDataGear] match 206 : __code prevTask(struct LoopCounter* loopCounter) {
+[getDataGear] match 206 : __code createTask(struct LoopCounter* loopCounter, struct TaskManager* taskManager) {
+[getDataGear] match 240 :   StackGenerics<Integer>* generics_list = createStackGenericsImpl();
+[getDataGear] match 240 :   Interger* intA = NEW(Interger);
+[getDataGear] match 250 :   goto generics_list->push(intA, shutdown);
+[getDataGear] match 206 : __code shutdown(struct TaskManager* taskManager) {
+[getDataGear] match 250 :     goto taskManager->shutdown(exit_code);
+[getDataGear] match 206 : __code shutdown_stub(struct Context* context) {
+[generateDataGear] match 794 : #include <stdio.h>
+[generateDataGear] match 794 : #include <string.h>
+[generateDataGear] match 794 : #include <stdlib.h>
+[generateDataGear] match 794 : #include <unistd.h>
+[generateDataGear] match 794 : #include <unistd.h>
+[generateDataGear] match 660 : #interface "TaskManager.h"
+[generateDataGear] match 660 : #interface "StackGenerics.h"
+[generateDataGear] match 660 : #interface "Interger.h"
+[generateDataGear] match 665 : #include "../../../context.h"
+[generateDataGear] match 794 :
+[generateDataGear] match 794 : int cpu_num = 1;
+[generateDataGear] match 794 : int length = 102400;
+[generateDataGear] match 794 : int split = 8;
+[generateDataGear] match 794 : int* array_ptr;
+[generateDataGear] match 794 : int gpu_num = 0;
+[generateDataGear] match 794 : int CPU_ANY = -1;
+[generateDataGear] match 794 : int CPU_CUDA = -1;
+[generateDataGear] match 794 :
+[generateDataGear] match 684 : __code initDataGears(struct LoopCounter* loopCounter, struct TaskManager* taskManager) {
+[
+    [0] "initDataGears",
+    [1] "loopCounter",
+    [2] "LoopCounter",
+    [3] "*",
+    [4] "loopCounter",
+    [5] {
+        genConstructor        undef,
+        implementation        undef,
+        interface             undef,
+        isImpl                undef,
+        parsedInterfaceInfo   undef
+    },
+    [6] 0
+]
+[
+    [0] "initDataGears",
+    [1] "taskManager",
+    [2] "TaskManager",
+    [3] "*",
+    [4] "taskManager",
+    [5] {
+        genConstructor        undef,
+        implementation        undef,
+        interface             undef,
+        isImpl                undef,
+        parsedInterfaceInfo   undef
+    },
+    [6] 0
+]
+[generateDataGear] match 1043 :     // loopCounter->tree = createRedBlackTree(context);
+[generateDataGear] match 1043 :     loopCounter->i = 0;
+[generateDataGear] match 1043 :     taskManager->taskManager = (union Data*)createTaskManagerImpl(context, cpu_num, gpu_num, 0);
+[generateDataGear] match 981 :     goto prevTask();
+[generateDataGear] match 1040 : }
+[generateDataGear] match 1064 : }
+[generateDataGear] match 794 :
+[generateDataGear] match 684 : __code prevTask(struct LoopCounter* loopCounter) {
+[
+    [0] "prevTask",
+    [1] "loopCounter",
+    [2] "LoopCounter",
+    [3] "*",
+    [4] "loopCounter",
+    [5] {
+        genConstructor        undef,
+        implementation        undef,
+        interface             undef,
+        isImpl                undef,
+        parsedInterfaceInfo   undef
+    },
+    [6] 0
+]
+[generateDataGear] match 1043 :     printf("cpus:\t\t%d\n", cpu_num);
+[generateDataGear] match 1043 :     printf("gpus:\t\t%d\n", gpu_num);
+[generateDataGear] match 1043 :     printf("length:\t\t%d\n", length);
+[generateDataGear] match 1043 :     printf("length/task:\t%d\n", length/split);
+[generateDataGear] match 1043 :     /* puts("queue"); */
+[generateDataGear] match 1043 :     /* print_queue(context->data[ActiveQueue]->queue.first); */
+[generateDataGear] match 1043 :     /* puts("tree"); */
+[generateDataGear] match 1043 :     /* print_tree(context->data[Tree]->tree.root); */
+[generateDataGear] match 1043 :     /* puts("result"); */
+[generateDataGear] match 981 :     goto createTask();
+[generateDataGear] match 1040 : }
+[generateDataGear] match 1064 : }
+[generateDataGear] match 794 :
+[generateDataGear] match 794 :
+[generateDataGear] match 684 : __code createTask(struct LoopCounter* loopCounter, struct TaskManager* taskManager) {
+[
+    [0] "createTask",
+    [1] "loopCounter",
+    [2] "LoopCounter",
+    [3] "*",
+    [4] "loopCounter",
+    [5] {
+        genConstructor        undef,
+        implementation        undef,
+        interface             undef,
+        isImpl                undef,
+        parsedInterfaceInfo   undef
+    },
+    [6] 0
+]
+[
+    [0] "createTask",
+    [1] "taskManager",
+    [2] "TaskManager",
+    [3] "*",
+    [4] "taskManager",
+    [5] {
+        genConstructor        undef,
+        implementation        undef,
+        interface             undef,
+        isImpl                undef,
+        parsedInterfaceInfo   undef
+    },
+    [6] 0
+]
+[generateDataGear] match 1043 :   StackGenerics<Integer>* generics_list = createStackGenericsImpl();
+[generateDataGear] match 1034 :   Interger* intA = NEW(Interger);
+[generateDataGear] match 1043 :   intA->value = 90;
+[generateDataGear] match 799 :   goto generics_list->push(intA, shutdown);
+Use of uninitialized value $ntype in lcfirst at generate_stub.pl line 826.
+Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 828.
+Use of uninitialized value $ntype in hash element at generate_stub.pl line 830.
+Use of uninitialized value $p in string eq at generate_stub.pl line 857.
+Use of uninitialized value $p in substitution (s///) at generate_stub.pl line 858.
+Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 912.
+Use of uninitialized value $p in string eq at generate_stub.pl line 857.
+Use of uninitialized value $p in substitution (s///) at generate_stub.pl line 858.
+Use of uninitialized value $pType in substitution (s///) at generate_stub.pl line 862.
+Use of uninitialized value $pType in pattern match (m//) at generate_stub.pl line 909.
+Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 912.
+[generateDataGear] match 1040 : }
+[generateDataGear] match 1064 : }
+[generateDataGear] match 794 :
+[generateDataGear] match 684 : __code shutdown(struct TaskManager* taskManager) {
+[
+    [0] "shutdown",
+    [1] "taskManager",
+    [2] "TaskManager",
+    [3] "*",
+    [4] "taskManager",
+    [5] {
+        genConstructor        undef,
+        implementation        undef,
+        interface             undef,
+        isImpl                undef,
+        parsedInterfaceInfo   undef
+    },
+    [6] 0
+]
+[generateDataGear] match 799 :     goto taskManager->shutdown(exit_code);
+[generateDataGear] match 1040 : }
+[generateDataGear] match 1064 : }
+[generateDataGear] match 794 :
+[generateDataGear] match 684 : __code shutdown_stub(struct Context* context) {
+[generateDataGear] match 1064 : }
+[generateDataGear] match 794 :
+[generateDataGear] match 794 :
+[generateDataGear] match 794 :
+[generateDataGear] match 794 : void init(int argc, char** argv) {
+[generateDataGear] match 794 :     for (int i = 1; argv[i]; ++i) {
+[generateDataGear] match 794 :         if (strcmp(argv[i], "-cpu") == 0)
+[generateDataGear] match 794 :             cpu_num = (int)atoi(argv[i+1]);
+[generateDataGear] match 794 :         else if (strcmp(argv[i], "-l") == 0)
+[generateDataGear] match 794 :             length = (int)atoi(argv[i+1]);
+[generateDataGear] match 794 :         else if (strcmp(argv[i], "-s") == 0)
+[generateDataGear] match 794 :             split = (int)atoi(argv[i+1]);
+[generateDataGear] match 794 :         else if (strcmp(argv[i], "-cuda") == 0) {
+[generateDataGear] match 794 :             gpu_num = 1;
+[generateDataGear] match 794 :             CPU_CUDA = 0;
+[generateDataGear] match 794 :         }
+[generateDataGear] match 794 :     }
+[generateDataGear] match 794 : }
+[generateDataGear] match 794 :
+[generateDataGear] match 634 : int main(int argc, char** argv) {
+[generateDataGear] match 1053 :     goto initDataGears();
+[generateDataGear] match 1064 : }
+[generateDataGear] match 794 :
+```
+
+
+```
+  DB<19> n
+main::generateDataGear(generate_stub.pl:821):
+821:                        if ($v eq $next || $v eq "O_$next") {
+  DB<19> n
+main::generateDataGear(generate_stub.pl:826):
+826:                    if (!defined $ntype) {
+  DB<19> p $ntype
+undef
+undef
+
+  DB<20> n
+main::generateDataGear(generate_stub.pl:827):
+827:                        $ntype = $localVarType{$next};
+  DB<20> p %localVarType
+{
+    intA   "Interger"
+}
+{
+    intA   "Interger"
+}
+
+  DB<21> p $next
+"generics_list"
+"generics_list"
+
+  DB<22> p
+Not enough arguments for Data::Printer::p at (eval 81)[/home/anatofuz/.plenv/versions/5.32.0/lib/perl5/5.32.0/perl5db.pl:738] line 2, at EOF
+
+  DB<23> p $currentCodeGearInfo->{localVar}->{$next}
+"StackGenerics"
+"StackGenerics"
+```
+
+
+`$currentCodeGearInfo`がちゃんと動いていそう
+
+
+```perl
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use DDP {deparse => 1};
+
+
+my $line = 'StackGenerics<Integer>* generics_list = createStackGenericsImpl();';
+
+if ($line =~ /^\s*(\w+)<(.+)>\*?\s*(\w+)\s*=\s*(.+)\(?/) {
+
+  p $1;
+  p $2;
+  p $3;
+  p $line;
+}
+
+```
+
+
+# interfaceとgenerics
+
+- interfaceの実装がgenericsをどう使っているかが問題
+    - interfaceと同じくgenerics( typed varibaleのまま)
+    - 明示的に何かを実装してしまっているケース
+        - これは許容しない?