changeset 978:86e66f985a34

add GearsFile
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Tue, 19 Oct 2021 18:56:44 +0900
parents ed258cf51f40
children d1ce1bc2f8ee
files src/parallel_execution/CMakeLists.txt src/parallel_execution/Lock.h src/parallel_execution/examples/gearsFile/FileData.h src/parallel_execution/examples/gearsFile/GearsFile.h src/parallel_execution/examples/gearsFile/GearsFileImpl.cbc src/parallel_execution/examples/gearsFile/GearsFileImpl.h src/parallel_execution/examples/gearsFile/GearsFile_test.cbc src/parallel_execution/examples/gearsFile/GearsFiletest.cbc src/parallel_execution/examples/wc/WcImpl.cbc src/parallel_execution/examples/wc/WcImpl.h src/parallel_execution/examples/wc/WcResult.h
diffstat 11 files changed, 184 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/CMakeLists.txt	Wed Oct 13 00:23:59 2021 +0900
+++ b/src/parallel_execution/CMakeLists.txt	Tue Oct 19 18:56:44 2021 +0900
@@ -201,3 +201,11 @@
   SOURCES
   TaskManagerImpl.cbc CPUWorker.cbc SynchronizedQueue.cbc AtomicReference.cbc SingleLinkedStack.cbc examples/new_wc/main.cbc examples/new_wc/WordPutImpl.cbc examples/new_wc/WordCountImpl.cbc
 )
+
+
+GearsCommand(
+  TARGET
+    gearsFile
+  SOURCES
+    TaskManagerImpl.cbc CPUWorker.cbc SingleLinkedQueue.cbc AtomicReference.cbc SynchronizedQueue.cbc examples/gearsFile/GearsFileImpl.cbc examples/gearsFile/GearsFile_test.cbc 
+)
--- a/src/parallel_execution/Lock.h	Wed Oct 13 00:23:59 2021 +0900
+++ b/src/parallel_execution/Lock.h	Tue Oct 19 18:56:44 2021 +0900
@@ -3,4 +3,4 @@
         __code doLock(Impl* lock, __code next(...)); 
         __code doUnlock(Impl* lock, __code next(...)); 
         __code next(...);
-} Lock;
+} Lock;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/parallel_execution/examples/gearsFile/FileData.h	Tue Oct 19 18:56:44 2021 +0900
@@ -0,0 +1,4 @@
+typedef struct FileData <> {
+    char* string;
+    int endOfFile;
+}FileData;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/parallel_execution/examples/gearsFile/GearsFile.h	Tue Oct 19 18:56:44 2021 +0900
@@ -0,0 +1,11 @@
+typedef struct GearsFile <> {
+    union Data* gearsFile;
+    struct Queue* inputStreamQueue;
+    struct Queue* outputStreamQueue;
+    struct Queue* dataQueue;
+    struct FileData* fileData;
+    __code readData(Impl* gearsFile, Queue* outputStreamQueue,__code next(...));    
+    __code writeData(Impl* gearsFile, Queue* inputStreamQueue, __code next(...));
+    __code test(Impl* gearsFile, FileData* fileData, __code next(...));
+    __code next(...);
+} GearsFile;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/parallel_execution/examples/gearsFile/GearsFileImpl.cbc	Tue Oct 19 18:56:44 2021 +0900
@@ -0,0 +1,48 @@
+#include "../../../context.h"
+#include <stdio.h>
+#interface "GearsFile.h"
+#interface "Queue.h"
+#interface "FileData.h"
+#impl "GearsFile" as "GearsFileImpl.h".h
+
+// ----
+// typedef struct GearsFileImpl <> impl GearsFile {
+//     __code next(...);
+// } GearsFileImpl;
+// ----
+
+GearsFile* createGearsFileImpl(struct Context* context) {
+    struct GearsFile* gearsFile  = new GearsFile();
+    struct GearsFileImpl* gears_file_impl = new GearsFileImpl();
+    gearsFile->gearsFile = (union Data*)gears_file_impl;
+   
+    Queue* inputQueue = createSingleLinkedQueue(context);
+    gearsFile->inputStreamQueue = inputQueue;
+    Queue* outputQueue = createSynchronizedQueue(context);
+    gearsFile->outputStreamQueue = outputQueue;
+    Queue* DQueue = createSingleLinkedQueue(context);
+    gearsFile->dataQueue = DQueue;
+   
+    gearsFile->readData = C_readDataGearsFileImpl;
+    gearsFile->writeData = C_writeDataGearsFileImpl;
+    gearsFile->test = C_testGearsFileImpl;
+    return gearsFile;
+}
+__code readData(struct GearsFileImpl* gearsFile, Queue* outputStreamQueue, __code next(...)) {
+    printf("readData\n");
+    
+    goto outputStreamQueue->take(test);
+}
+
+__code writeData(struct GearsFileImpl* gearsFile, Queue* inputStreamQueue, __code next(...)) {
+    //struct Queue* inputStreamQueue = createSingleLinkedQueue(context);
+    FileData* fileData = NEW(FileData);
+    fileData->string = "tsts"; 
+    printf("writeData\n");
+    goto inputStreamQueue->put(fileData, next(...));
+}
+
+__code test(struct GearsFileImpl* gearsFile, FileData* fileData, __code next(...)) {
+    printf("%s\n", fileData->string);
+    goto next(...);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/parallel_execution/examples/gearsFile/GearsFileImpl.h	Tue Oct 19 18:56:44 2021 +0900
@@ -0,0 +1,3 @@
+typedef struct GearsFileImpl <> impl GearsFile {   
+    __code next(...);
+} GearsFileImpl;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/parallel_execution/examples/gearsFile/GearsFile_test.cbc	Tue Oct 19 18:56:44 2021 +0900
@@ -0,0 +1,28 @@
+#include "../../../context.h"
+#interface "GearsFile.h"
+
+
+
+__code fileTask1(GearsFile* gearsFile){      
+    goto gearsFile->writeData(gearsFile->inputStreamQueue ,fileTask2); 
+}
+
+__code fileTask1_stub(struct Context* context){
+    GearsFile* gearsFile = createGearsFileImpl(context);
+    goto fileTask1(context, gearsFile);
+}
+
+__code fileTask2(GearsFile* gearsFile){
+    printf("Task2\n");
+    goto gearsFile->readData(gearsFile->inputStreamQueue, exit_code);
+}
+
+__code fileTask2_stub(struct Context* context){
+    GearsFile* gearsFile = (struct GearsFile*)Gearef(context, GearsFile)->gearsFile;
+    goto fileTask2(context, gearsFile);
+}
+
+int main(int argc, char** argv) {
+    printf("main\n");
+    goto fileTask1();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/parallel_execution/examples/gearsFile/GearsFiletest.cbc	Tue Oct 19 18:56:44 2021 +0900
@@ -0,0 +1,75 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+
+#include "../../../context.h"
+#interface "TaskManager.h"
+#interface "GearsFile.h"
+
+int cpu_num = 1;
+int length = 102400;
+int split = 8;
+int* array_ptr;
+int gpu_num = 0;
+int CPU_ANY = -1;
+int CPU_CUDA = -1;
+
+
+__code initDataGears(struct LoopCounter* loopCounter, struct TaskManager* taskManager) {
+    // loopCounter->tree = createRedBlackTree(context);
+    loopCounter->i = 0;
+    taskManager->taskManager = (union Data*)createTaskManagerImpl(context, cpu_num, gpu_num, 0);
+    goto code1();
+}
+
+__code code1(struct LoopCounter* loopCounter) {
+    printf("cpus:\t\t%d\n", cpu_num);
+    printf("gpus:\t\t%d\n", gpu_num);
+    printf("length:\t\t%d\n", length);
+    printf("length/task:\t%d\n", length/split);
+    /* puts("queue"); */
+    /* print_queue(context->data[ActiveQueue]->queue.first); */
+    /* puts("tree"); */
+    /* print_tree(context->data[Tree]->tree.root); */
+    /* puts("result"); */
+    goto createTask1();
+}
+
+
+__code createTask1(struct LoopCounter* loopCounter, struct TaskManager* taskManager) {      
+    GearsFile* gearsFile = createGearsFileImpl(context);
+    goto gearsFile->writeData(gearsFile->inputStreamQueue ,code2); 
+}
+
+
+__code code2(struct TaskManager* taskManager) {
+    goto taskManager->shutdown(exit_code);
+}
+
+__code code2_stub(struct Context* context) {
+    goto code2(context, &Gearef(context, TaskManager)->taskManager->TaskManager);
+}
+
+void init(int argc, char** argv) {
+    for (int i = 1; argv[i]; ++i) {
+        if (strcmp(argv[i], "-cpu") == 0)
+            cpu_num = (int)atoi(argv[i+1]);
+        else if (strcmp(argv[i], "-l") == 0)
+            length = (int)atoi(argv[i+1]);
+        else if (strcmp(argv[i], "-s") == 0)
+            split = (int)atoi(argv[i+1]);
+        else if (strcmp(argv[i], "-cuda") == 0) {
+            gpu_num = 1;
+            CPU_CUDA = 0;
+        }  else if (strcmp(argv[i], "-f") == 0) {
+        }
+    }
+}
+
+int main(int argc, char** argv) {
+    init(argc, argv);
+    printf("main");
+    goto initDataGears();
+}
--- a/src/parallel_execution/examples/wc/WcImpl.cbc	Wed Oct 13 00:23:59 2021 +0900
+++ b/src/parallel_execution/examples/wc/WcImpl.cbc	Tue Oct 19 18:56:44 2021 +0900
@@ -30,6 +30,7 @@
     wc->result = NULL;
     wc_impl->Keyword = NULL;
     wc_impl->lineNum = 0;
+    wc_impl->wordNum = 0;
     wc_impl->putLine = 0;
     wc_impl->strTable[100] = NULL;
     wc->openFile = C_openFileWcImpl;
@@ -94,7 +95,8 @@
   printf("countUp「%s」\n", string->str);
   wc->lineNum = wc->lineNum + 1;
   int num = wc->lineNum;
-  Gearef(context, Wc)->line = num; 
+  wc->wordNum = wc->wordNum + strlen(string->str);
+  Gearef(context, Wc)->line = num;
   goto putString(num, next);
 }
 
@@ -107,6 +109,7 @@
 }
 
 __code showResult(struct WcImpl* wc, __code next(...)) {
+  printf("Number of Words is 「%d」\n", wc->wordNum);
   printf("EOF and finish codes\n");
   goto next(...);
 }
--- a/src/parallel_execution/examples/wc/WcImpl.h	Wed Oct 13 00:23:59 2021 +0900
+++ b/src/parallel_execution/examples/wc/WcImpl.h	Tue Oct 19 18:56:44 2021 +0900
@@ -2,6 +2,7 @@
   char* Keyword; 
   int lineNum;
   int putLine;
+  int wordNum;
   char* filename;
   char* buffer;
   char* strTable[100];
--- a/src/parallel_execution/examples/wc/WcResult.h	Wed Oct 13 00:23:59 2021 +0900
+++ b/src/parallel_execution/examples/wc/WcResult.h	Tue Oct 19 18:56:44 2021 +0900
@@ -1,4 +1,4 @@
 typedef struct WcResult <> {
   int wordNum;
-  char* str;
+  int lineNum;
 } WcResult;