Mercurial > hg > Members > Moririn
view src/parallel_execution/examples/bitonicSort.cbc @ 375:ad44fdb11433
Fix compile error but not work
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 18 Jul 2017 16:13:11 +0900 |
parents | fb50cf8aa615 |
children | b46f38645587 |
line wrap: on
line source
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include "../../context.h" int cpu_num = 1; int length = 100; int gpu_num = 0; int CPU_ANY = -1; int CPU_CUDA = -1; void *start_taskManager(struct Context *context) { goto initDataGears(context, Gearef(context, LoopCounter), Gearef(context, TaskManager)); return 0; } #ifdef USE_CUDAWorker #ifdef USE_CUDA_MAIN_THREAD extern volatile int cuda_initialized; #endif #endif __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); #ifdef USE_CUDAWorker #ifdef USE_CUDA_MAIN_THREAD while(! cuda_initialized) {}; #endif #endif goto meta(context, C_code1); } __code initDataGears_stub(struct Context* context) { struct TaskManager* taskManager = Gearef(context, TaskManager); taskManager->taskManager = 0; #if (! defined(USE_CUDAWorker) || ! defined(USE_CUDA_MAIN_THREAD)) struct LoopCounter* loopCounter = Gearef(context, LoopCounter); goto initDataGears(context, loopCounter, taskManager); #else cuda_initialized = 0; pthread_t thread; pthread_create(&thread, NULL, (void*)&start_taskManager, context); while (taskManager->taskManager == 0); TaskManager *t = (TaskManager*)taskManager->taskManager; TaskManagerImpl *im = (TaskManagerImpl*)t->taskManager; struct Queue *q = (Queue *)im->workers[0]; createCUDAWorker(context,0,q, im); pthread_join(thread,0); exit(0); #endif } __code code1(struct Time* time) { printf("cpus:\t\t%d\n", cpu_num); printf("gpus:\t\t%d\n", gpu_num); printf("length:\t\t%d\n", length); /* puts("queue"); */ /* print_queue(context->data[ActiveQueue]->queue.first); */ /* puts("tree"); */ /* print_tree(context->data[Tree]->tree.root); */ /* puts("result"); */ time->time = (union Data*)createTimeImpl(context); time->next = C_createTask1; goto meta(context, time->time->Time.start); } //__code createTask1(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { // int waitFlag = 0; // struct SortArray* inputSortArray = &ALLOCATE_DATA_GEAR(context, sortArray)->sortArray; // inputSortArray->array = array; // for (int i=2; i <= length; i=2*i) { // int first = 1; // lastOne = (length <= i*2) ? true : false; // for (int j=i>>1; 0 < j; j=j>>1) { // struct SortArray* outputSortArray = &ALLOCATE_DATA_GEAR(context, sortArray)->sortArray; // outputSortArray->array = array; // for(int k=0; 0 < length/2; k++) { // struct Context* task = NEW(struct Context); // struct Integer* integer1 = &ALLOCATE_DATA_GEAR(context, Integer)->Integer; // struct Integer* integer2 = &ALLOCATE_DATA_GEAR(context, Integer)->Integer; // struct Integer* integer3 = &ALLOCATE_DATA_GEAR(context, Integer)->Integer; // integer1->value = j; // integer2->value = first; // integer3->value = k; // // task->next = C_swap; // if (waitFlag) { // task->idgCount = length/2; // } else { // task->idgCount = 0; // } // task->idg = task->dataNum; // task->data[task->idg] = (union Data*)inputSortArray; // task->data[task->idg+1] = (union Data*)integer1; // task->data[task->idg+2] = (union Data*)integer2; // task->data[task->idg+3] = (union Data*)integer3; // task->maxIdg = task->idg + 4; // task->odg = task->maxIdg; // task->data[task->odg] = outputSortArray; // task->maxOdg = task->odg + 1; // first = 0; // } // inputSortArray = outputSortArray; // } // waitFlag = 1; // } // goto meta(context, taskManager->taskManager->TaskManager.shutdown); //} __code createTask1(struct LoopCounter* loopCounter, struct TaskManager* taskManager, struct Time* time) { int i = loopCounter->i; if (i < length) { loopCounter->i++; goto meta(context, C_createTask2); } loopCounter->i = 0; taskManager->next = C_exit_code; goto meta(context, taskManager->taskManager->TaskManager.shutdown); } __code createTask2(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { struct Context** tasks = (struct Context**)ALLOC_ARRAY(context, Context, 1); struct Context* task = NEW(struct Context); task->iterator = createOneDimIterator(context, 10); task->next = C_printIterator; task->idgCount = 0; task->idg = task->dataNum; task->maxIdg = task->idg; task->odg = task->maxIdg; task->maxOdg = task->odg; tasks[0] = task; taskManager->contexts = tasks; taskManager->next1 = C_createTask1; goto meta(context, taskManager->taskManager->TaskManager.spawnTasks); } 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], "-cuda") == 0) { gpu_num = 1; CPU_CUDA = 0; } } } int main(int argc, char** argv) { init(argc, argv); struct Context* main_context = NEW(struct Context); initContext(main_context); main_context->next = C_initDataGears; goto start_code(main_context); }