Mercurial > hg > Gears > Gears
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(...); }