Mercurial > hg > Game > Cerium
changeset 1563:4fd1e2ce7d30 draft
remove *.orig file
author | Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 12 Mar 2013 17:20:52 +0900 |
parents | 948bafd61d96 |
children | 4ef32873b5be |
files | example/Prime/ppe/Prime.cc.orig example/many_task/spe/QuickSort.cc.orig example/word_count/ppe/Exec.cc.orig include/TaskManager/AddrList.h include/TaskManager/CellDmaManager.h include/TaskManager/CellScheduler.h include/TaskManager/CellTaskManagerImpl.h include/TaskManager/CpuThreads.h include/TaskManager/DmaManager.h include/TaskManager/ExportTaskLog.h include/TaskManager/FifoDmaManager.h include/TaskManager/FifoTaskManagerImpl.h include/TaskManager/Finish.h include/TaskManager/GpuError.h include/TaskManager/GpuFunc.h include/TaskManager/GpuScheduler.h include/TaskManager/GpuThreads.h include/TaskManager/HTask.h include/TaskManager/ListData.h include/TaskManager/MailManager.h include/TaskManager/MainScheduler.h include/TaskManager/MemHash.h include/TaskManager/MemIterator.h include/TaskManager/MemList.h include/TaskManager/MemorySegment.h include/TaskManager/PreRefDmaManager.h include/TaskManager/QueueInfo.h include/TaskManager/ReferencedDmaManager.h include/TaskManager/SchedExit.h include/TaskManager/SchedMail.h include/TaskManager/SchedNop.h include/TaskManager/SchedNop2Ready.h include/TaskManager/SchedTask.h include/TaskManager/SchedTaskBase.h include/TaskManager/SchedTaskList.h include/TaskManager/Scheduler.h include/TaskManager/Sem.h include/TaskManager/SemMailManager.h include/TaskManager/ShowTime.h include/TaskManager/SimpleTask.h include/TaskManager/SpeTaskManagerImpl.h include/TaskManager/SpeThreads.h include/TaskManager/Start.h include/TaskManager/StartProfile.h include/TaskManager/SynchronizedMailManager.h include/TaskManager/SysFunc.h include/TaskManager/SysTask.h include/TaskManager/SysTasks.h include/TaskManager/Task.h include/TaskManager/TaskList.h include/TaskManager/TaskLog.h include/TaskManager/TaskManager.h include/TaskManager/TaskManagerImpl.h include/TaskManager/TaskQueue.h include/TaskManager/Threads.h include/TaskManager/base.h include/TaskManager/error.h include/TaskManager/gettime.h include/TaskManager/rdtsc.h include/TaskManager/types.h |
diffstat | 59 files changed, 0 insertions(+), 3110 deletions(-) [+] |
line wrap: on
line diff
--- a/example/Prime/ppe/Prime.cc.orig Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -#include <stdio.h> -#include <math.h> -#include "SchedTask.h" -#include "Prime.h" -#include "Func.h" - -SchedDefineTask1(Prime, prime); - -static int -prime(SchedTask *smanager, void *rbuf, void *wbuf) -{ - long start = (long)smanager->get_param(0); /* 素数判定の開始地点 */ - long end = (long)smanager->get_param(1); /* 素数判定の終了地点 */ - long range = end - start; /* 判定する範囲 */ - - /* 判定結果を収める配列を受け取る */ - bool *output = (bool*)smanager->get_output(wbuf, 0); - - /* 初期化 */ - for (int i = 0; i < range; i++){ - output[i] = true; - } - - - - for (long i = start, index = 0; i < end; i++, index++) { - long limit = (long)sqrt((double) i); /* 割る数の最大値を求める */ - for (long j = 2; j <= limit; j++) { - /* 割り切れた場合、0を代入し素数じゃないという判定を下す */ - if (i % j == 0) { - output[index] = false; - break; - } - } - } - return 0; -}
--- a/example/many_task/spe/QuickSort.cc.orig Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -#include "QuickSort.h" -#include <stdio.h> -#include <string.h> - -SchedDefineTask(QuickSort); - -static void quick_sort( Data *data, int begin, int end ) ; - -static void -swap( Data *data, int left, int right ) -{ - Data tmp = data[left]; - data[left] = data[right]; - data[right] = tmp; -} - -// #define USE_MEMCPY - -static int -run(SchedTask *s, void* rbuff, void* wbuff) { - // copy value - int begin = 0; -#if USE_SIMPLE_TASK - int end = s->read_size()/sizeof(Data); - Data *r_data = (Data*)rbuff; -#ifdef USE_MEMCPY - Data *w_data = (Data*)wbuff; -#endif -#else - int end = s->get_inputSize(0)/sizeof(Data); - DataPtr r_data = (DataPtr)s->get_input(0); -#ifdef USE_MEMCPY - DataPtr w_data = (DataPtr)s->get_output(0); -#endif -#endif - - //printf("[SPE] Quick: length:%d addr->%x \n",end, (int)rbuff); - //printf("[PPE] Quick: data[0]: %d addr->%x\n",sizeof(r_data),r_data); - - //show_data(r_data, end); - quick_sort(r_data, begin, end-1); -#ifdef USE_MEMCPY - memcpy(w_data, r_data, sizeof(Data)*end); -#else - s->swap(); -#endif - - return 0; -} - -static void -quick_sort( Data *data, int begin, int end ) { - - if (begin < end) { - int where = (begin + end) / 2; - int pivot = data[where].index; - data[where].index = data[begin].index; - int p = begin; - int i; - for (i=begin+1; i<=end; i++) { - if (data[i].index < pivot) { - p++; - swap(data, p, i); - } - } - data[begin].index = data[p].index; - data[p].index = pivot; - - quick_sort(data, begin, p-1); - quick_sort(data, p+1, end); // tail call - } -} - - -/* end */
--- a/example/word_count/ppe/Exec.cc.orig Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -#include <stdio.h> -#include <string.h> -#include "Exec.h" -#include "Func.h" - -/* これは必須 */ -SchedDefineTask(Exec); - -static int -run(SchedTask *s, void *rbuf, void *wbuf) -{ - char *i_data = (char *)s->get_input(rbuf,0); - unsigned long long *o_data = (unsigned long long*)s->get_output(wbuf,0); - unsigned long long *head_tail_flag = o_data +2; - int length = (int)s->get_inputSize(0); - int word_flag = 0; - int word_num = 0; - int line_num = 0; - int i = 0; - - head_tail_flag[0] = (i_data[0] != 0x20) && (i_data[0] != 0x0A); - word_num -= 1-head_tail_flag[0]; - - for (; i < length; i++) { - if (i_data[i] == 0x20) { // 空白 - word_flag = 1; - } else if (i_data[i] == 0x0A) { // 改行 - line_num += 1; - word_flag = 1; - } else { - word_num += word_flag; - word_flag = 0; - } - } - - word_num += word_flag; - head_tail_flag[1] = (i_data[i-1] != 0x20) && (i_data[i-1] != 0x0A); - - // s->printf("SPE word %d line %d\n",word_num,line_num); - - o_data[0] = (unsigned long long)word_num; - o_data[1] = (unsigned long long)line_num; - - return 0; -}
--- a/include/TaskManager/AddrList.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -#ifndef INCLUDED_ADDR_LIST -#define INCLUDED_ADDR_LIST - -#include "types.h" - -/* - - MainMemory 側の MemorySegment に近いかも? - Iterator で使う、MainMemory 側の アドレスリスト - - */ - -typedef struct AddrList { - - memaddr addr; - AddrList *next; - -}AddrList, *AddrListPtr; // 8 - -#endif
--- a/include/TaskManager/CellDmaManager.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -#ifndef INCLUDED_CELL_DMA_MANAGER -#define INCLUDED_CELL_DMA_MANAGER - -#include "base.h" -#include "types.h" -#include "DmaManager.h" -#include "MailManager.h" -#include "TaskManagerImpl.h" - -#include <spu_mfcio.h> -#include <spu_intrinsics.h> - -#define SPU_PROFILE 1 - -class Scheduler; - -class CellDmaManager : public DmaManager { -public: - BASE_NEW_DELETE(CellDmaManager); - - typedef struct dma_list { - uint32 addr; // should be memaddr, but in Cell's specification... - uint32 size; - } __attribute__ ((aligned (DEFAULT_ALIGNMENT))) DmaList, *DmaListPtr; - - - CellDmaManager() ; - - /* variables */ - unsigned int wait_time, busy_time, alloc_busy_time; - unsigned long long global_busy_time, global_wait_time, global_mail_time, mainMemalloc_time; - unsigned long long task_list_mail_time; - unsigned long long mail_read_time, mail_write_time; - unsigned long long task_list_mail_read_time, finish_mail_write_time; - int task_list_read_count; - - /* functions */ - void *dma_load(Scheduler *s, memaddr addr, uint32 size, uint32 mask); - void *dma_load1(void *buf, memaddr addr, uint32 size, uint32 mask); - void *dma_store(Scheduler *s,void *buf, memaddr addr, uint32 size, uint32 mask); - - void *get_writebuf(Scheduler *s, memaddr addr, uint32 size); - - void dma_wait(uint32 mask) ; - void dma_wait(uint32 mask, int cmd) ; - void (CellDmaManager::*start_dmawait_profile)(); - void (CellDmaManager::*end_dmawait_profile)(unsigned long long *counter); - void start_profile(); - void stop_profile(); - - - void show_dma_wait(Scheduler *s, int cpu); - - void mail_write(memaddr data); - void mail_write_finish_list(memaddr data); - memaddr mail_read(); - memaddr task_list_mail_read(); - void *dma_loadList(Scheduler *s,ListDataPtr list, uint32 mask); - void dma_storeList(ListDataPtr, void *buff, uint32 mask); - uint32 get_tag(); - void bound(ListData *); - void *get_writebuf(Scheduler *s, ListDataPtr, uint32 size) ; - - - private: - - void do_start_dmawait_profile(); - void do_end_dmawait_profile(unsigned long long *counter); - void null_start_dmawait_profile(); - void null_end_dmawait_profile(unsigned long long *counter); - - MailManagerPtr mail_queue; - - -/* end */ -} ; - -#endif
--- a/include/TaskManager/CellScheduler.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -#ifndef INCLUDED_CELL_SCHEDULER -#define INCLUDED_CELL_SCHEDULER - -#include "base.h" -#include "Scheduler.h" - -class CellScheduler : public Scheduler { -public: - BASE_NEW_DELETE(CellScheduler); - - void init_impl(int useRefDma); - - void *allocate(int size); - void mainMem_alloc(int id, int size); - void mainMem_wait(void); - uint32 get_tag(); - -private: - int mainMemNum; -} ; - -#endif
--- a/include/TaskManager/CellTaskManagerImpl.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -#ifndef INCLUDED_CELL_TASK_MANAGER_IMPL -#define INCLUDED_CELL_TASK_MANAGER_IMPL - -#include "TaskManagerImpl.h" -#include "FifoTaskManagerImpl.h" -#ifdef __CERIUM_CELL__ -#include "SpeThreads.h" -#else -#include "CpuThreads.h" -#endif - -class CellTaskManagerImpl : public TaskManagerImpl { -public: - /* constructor */ - CellTaskManagerImpl(int num, Threads *cpus) : TaskManagerImpl(num) {speThreads = cpus;} - ~CellTaskManagerImpl(); - - /* variables */ - QueueInfo<TaskList> **taskListInfo; - QueueInfo<TaskList> **speTaskList; // running task - - Threads *speThreads; - FifoTaskManagerImpl *ppeManager; - int spe_running; - int spuIdle; - /* functions */ - // system - void init(int spuIdle,int useRefDma, int export_task_log); - void run(); - void poll(); - void poll1(int spu_limit); - void poll2(int spu_limit); - void mail_check(int id); - TaskListPtr createTaskList(); - //void set_runTaskList(*QueueInfo<HTask>); - void set_runTaskList(QueueInfo<HTask>* activeTaskQueue); - void set_NDRange(void* ndr); - void sendTaskList(); - void append_activeTask(HTaskPtr); - void show_profile() ; - void start_profile() ; - void export_task_log() ; - void polling(); - void debug_check_spe_idle(QueueInfo<HTask> * activeTaskQueue, int spe_running_); - void print_arch(); - -private: - void send_taskList(int id); - void show_dead_lock_info(); - -}; - -#endif
--- a/include/TaskManager/CpuThreads.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -#ifndef INCLUDED_CPU_THREADS -#define INCLUDED_CPU_THREADS - -#include <pthread.h> -#include "Threads.h" -#include "GpuThreads.h" -#include "TaskManagerImpl.h" -#include "MainScheduler.h" -#include "Sem.h" - -typedef struct cpu_arg { - int cpuid; - // should be syncrhonized - MainScheduler *scheduler; - TaskManagerImpl *manager; - SemPtr wait; - int useRefDma; - -} cpu_thread_arg_t; - -//class GpuThreads; - -class CpuThreads : public Threads { - public: - /* constructor */ - CpuThreads(int num = 1, int useRefDma = 0, int start_id = 0); - ~CpuThreads(); - static void *cpu_thread_run(void *args); - - /* functions */ - virtual void init(); - virtual int get_mail(int speid, int count, memaddr *ret); // BLOCKING - virtual int has_mail(int speid, int count, memaddr *ret); // NONBLOCK - virtual void send_mail(int speid, int num, memaddr *data); // BLOCKING - virtual void add_output_tasklist(int command, memaddr buff, int alloc_size); - virtual int is_gpu(int cpuid); - virtual void set_NDRange(void *ndr); -private: - /* variables */ - pthread_t *threads; - cpu_thread_arg_t *args; - SemPtr wait; //スレッド生成時の待ち用 - int cpu_num; - int use_refdma; - int id_offset; - GpuThreads *gpu; -}; - -#endif
--- a/include/TaskManager/DmaManager.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -#ifndef INCLUDED_DMA_MANAGER -#define INCLUDED_DMA_MANAGER - -#include "base.h" -#include "ListData.h" -#include "types.h" - -enum dma_tag { - DMA_READ = 25, - DMA_READ2 = 26, - DMA_WRITE = 27, -// DMA_READ_IN_LIST = 29, -// DMA_READ_OUT_LIST = 30, - DMA_READ_TASKLIST = 31, -}; - -class Scheduler; - -class DmaManager { -public: - virtual ~DmaManager() {}; - - BASE_NEW_DELETE(DmaManager); - - // API for DMA transfer - virtual void *dma_load(Scheduler *s, memaddr addr, uint32 size, uint32 mask) { return 0; } - virtual void *dma_load1(void *buf, memaddr addr, uint32 size, uint32 mask) { return 0; } - virtual void *dma_store(void *buf,memaddr addr, uint32 size, uint32 mask) { return 0; } - virtual void free_(void *buf) { free(buf); } - virtual void *get_writebuf(Scheduler *s, memaddr addr, uint32 size) { return 0; } - virtual void dma_wait(uint32 mask) {} - virtual void show_dma_wait(Scheduler *s, int cpu) {} - virtual void start_profile() {} - - // API for SPU inbound/outbound mailbox - virtual void mail_write(memaddr data) {} - virtual void mail_write_finish_list(memaddr data) {} - virtual memaddr mail_read() { return 0; } - virtual memaddr task_list_mail_read() { return 0; } - - // API for MFC list DMA transfer - virtual void *dma_loadList(Scheduler *s, ListDataPtr list, uint32 mask) { return 0; } - virtual void dma_storeList(ListDataPtr, void *buff, uint32 mask) {} - virtual uint32 get_tag() { return 0;} - virtual void bound(ListData *) {} -}; - -#endif
--- a/include/TaskManager/ExportTaskLog.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -#ifndef included_exporttasklog -#define included_exporttasklog - -#include <stdio.h> -#include "TaskLog.h" -#include "QueueInfo.h" - -class ExportTaskLog { -public: - ExportTaskLog(QueueInfo<TaskLog> *_tasklog); - virtual ~ExportTaskLog(); - -public: - void open(); - void printOut(); - void close(); - -private: - QueueInfo<TaskLog> *tasklog; - FILE *fp; - - static const char* const FILENAME; - -}; - - - -#endif
--- a/include/TaskManager/FifoDmaManager.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -#ifndef INCLUDED_FIFO_DMA_MANAGER -#define INCLUDED_FIFO_DMA_MANAGER - -#include "base.h" -#include "DmaManager.h" - -#ifdef __CERIUM_PARALLEL__ -#include "SynchronizedMailManager.h" -#else -#include "MailManager.h" -#endif - -class FifoDmaManager : public DmaManager { - -protected: - /* variables */ - MailManagerPtr mail_queue1; - MailManagerPtr mail_queue2; - -public: - BASE_NEW_DELETE(FifoDmaManager); - - FifoDmaManager() { -#ifdef __CERIUM_PARALLEL__ - mail_queue1 = new SynchronizedMailManager(); - mail_queue2 = new SynchronizedMailManager(); -#else - mail_queue1 = new MailManager(); - mail_queue2 = new MailManager(); -#endif - start_dmawait_profile = &FifoDmaManager::null_start_dmawait_profile; - end_dmawait_profile = &FifoDmaManager::null_end_dmawait_profile; - } - - ~FifoDmaManager() { - delete mail_queue1; - delete mail_queue2; - } - - /* variables */ -protected: - unsigned long long start_time, stop_time; - unsigned long long global_busy_time, global_load_time, global_store_time, global_mail_time; - unsigned long long dma_load_time, dma_store_time, dma_loadList_time, dma_storeList_time; - unsigned long long mail_read_time, mail_write_time; - unsigned long long mail_read_from_host_time, mail_write_from_host_time; - - /* functions */ -public: - virtual void *dma_load(Scheduler *s, memaddr addr, uint32 size, uint32 mask); - virtual void *dma_load1(void *buf, memaddr addr, uint32 size, uint32 mask); - virtual void *dma_store(void *buf, memaddr addr, uint32 size, uint32 mask); - virtual void dma_wait(uint32 mask) ; - virtual void *get_writebuf(Scheduler *s, memaddr addr, uint32 size) ; - void (FifoDmaManager::*start_dmawait_profile)(); - void (FifoDmaManager::*end_dmawait_profile)(unsigned long long *counter); - void start_profile(); - void stop_profile(); - - void show_dma_wait(Scheduler *s, int cpu); - - void mail_write(memaddr data); - void mail_write_finish_list(memaddr data); - memaddr mail_read(); - memaddr task_list_mail_read(); - - void mail_write_from_host(memaddr data); - memaddr mail_read_from_host(); - int has_mail_from_host(); - - virtual void *dma_loadList(Scheduler *s, ListDataPtr list, uint32 mask); - virtual void dma_storeList(ListDataPtr, void *buff, uint32 mask); - - uint32 get_tag(); - virtual void bound(ListData *); - -private: - void do_start_dmawait_profile(); - void do_end_dmawait_profile(unsigned long long *counter); - void null_start_dmawait_profile(); - void null_end_dmawait_profile(unsigned long long *counter); - -}; - -#endif
--- a/include/TaskManager/FifoTaskManagerImpl.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -#ifndef INCLUDED_FIFO_TASK_MANAGER_IMPL -#define INCLUDED_FIFO_TASK_MANAGER_IMPL - -#include "TaskManagerImpl.h" -#include "MainScheduler.h" -#include "Scheduler.h" -#include "CpuThreads.h" - -class FifoTaskManagerImpl : public TaskManagerImpl { -public: - /* constructor */ - FifoTaskManagerImpl(int num) : TaskManagerImpl(num) {} - ~FifoTaskManagerImpl(void); - - /* variables */ - int machineNum; - QueueInfo<TaskList> *taskListInfo; - QueueInfo<TaskList> *ppeTaskList; // running task - - MailManager *mailManager; - MainScheduler *mainScheduler; - - /* functions */ - // call by system - void init(int spuIdle, int useRefDma, int export_task_log); - void init(MainScheduler*, TaskManagerImpl*, int); - void poll(); // called from CellTaskManagerImpl - void poll1(); // single CPU run called from CellTaskManagerImpl - void run(); - void show_profile(); - void start_profile(); - void export_task_log(); - void polling(); - TaskListPtr createTaskList(); - - void mail_check(); - - void set_runTaskList(QueueInfo<HTask>* activeTaskQueue); - //void set_runTaskList(); - void sendTaskList(); - - void print_arch(); - void set_NDRange(void* ndr); - - // call by user -private: - void set_runTaskList1(QueueInfo<HTask>* activeTaskQueue); - -}; - - -#endif /* INCLUDED_FIFO_TASK_MANAGER_IMPL */
--- a/include/TaskManager/Finish.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -#ifndef INCLUDED_SYSTASK_FINISH -#define INCLUDED_SYSTASK_FINISH - -#include "SchedTask.h" - - -#endif
--- a/include/TaskManager/GpuError.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -const char* convert_error_status(cl_uint status){ - static const struct { - const cl_uint status; - const char *status_string; - } Error_Status[] = { - {CL_SUCCESS, "CL_SUCCESS"} - ,{CL_DEVICE_NOT_FOUND, "CL_DEVICE_NOT_FOUND"} - ,{CL_DEVICE_NOT_AVAILABLE, "CL_DEVICE_NOT_AVAILABLE"} - ,{CL_COMPILER_NOT_AVAILABLE, "CL_COMPILER_NOT_AVAILABLE"} - ,{CL_MEM_OBJECT_ALLOCATION_FAILURE, "CL_MEM_OBJECT_ALLOCATION_FAILURE"} - ,{CL_OUT_OF_RESOURCES, "CL_OUT_OF_RESOURCES"} - ,{CL_OUT_OF_HOST_MEMORY, "CL_OUT_OF_HOST_MEMORY"} - ,{CL_PROFILING_INFO_NOT_AVAILABLE, "CL_PROFILING_INFO_NOT_AVAILABLE"} - ,{CL_MEM_COPY_OVERLAP, "CL_MEM_COPY_OVERLAP"} - ,{CL_IMAGE_FORMAT_MISMATCH, "CL_IMAGE_FORMAT_MISMATCH"} - ,{CL_IMAGE_FORMAT_NOT_SUPPORTED, "CL_IMAGE_FORMAT_NOT_SUPPORTED"} - ,{CL_BUILD_PROGRAM_FAILURE, "CL_BUILD_PROGRAM_FAILURE"} - ,{CL_MAP_FAILURE, "CL_MAP_FAILURE"} - ,{CL_INVALID_VALUE, "CL_INVALID_VALUE"} - ,{CL_INVALID_DEVICE_TYPE, "CL_INVALID_DEVICE_TYPE"} - ,{CL_INVALID_PLATFORM, "CL_INVALID_PLATFORM"} - ,{CL_INVALID_DEVICE, "CL_INVALID_DEVICE"} - ,{CL_INVALID_CONTEXT, "CL_INVALID_CONTEXT"} - ,{CL_INVALID_QUEUE_PROPERTIES, "CL_INVALID_QUEUE_PROPERTIES"} - ,{CL_INVALID_COMMAND_QUEUE, "CL_INVALID_COMMAND_QUEUE"} - ,{CL_INVALID_HOST_PTR, "CL_INVALID_HOST_PTR"} - ,{CL_INVALID_MEM_OBJECT, "CL_INVALID_MEM_OBJECT"} - ,{CL_INVALID_IMAGE_FORMAT_DESCRIPTOR, "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR"} - ,{CL_INVALID_IMAGE_SIZE, "CL_INVALID_IMAGE_SIZE"} - ,{CL_INVALID_SAMPLER, "CL_INVALID_SAMPLER"} - ,{CL_INVALID_BINARY, "CL_INVALID_BINARY"} - ,{CL_INVALID_BUILD_OPTIONS, "CL_INVALID_BUILD_OPTIONS"} - ,{CL_INVALID_PROGRAM, "CL_INVALID_PROGRAM"} - ,{CL_INVALID_PROGRAM_EXECUTABLE, "CL_INVALID_PROGRAM_EXECUTABLE"} - ,{CL_INVALID_KERNEL_NAME, "CL_INVALID_KERNEL_NAME"} - ,{CL_INVALID_KERNEL_DEFINITION, "CL_INVALID_KERNEL_DEFINITION"} - ,{CL_INVALID_KERNEL, "CL_INVALID_KERNEL"} - ,{CL_INVALID_ARG_INDEX, "CL_INVALID_ARG_INDEX"} - ,{CL_INVALID_ARG_VALUE, "CL_INVALID_ARG_VALUE"} - ,{CL_INVALID_ARG_SIZE, "CL_INVALID_ARG_SIZE"} - ,{CL_INVALID_KERNEL_ARGS, "CL_INVALID_KERNEL_ARGS"} - ,{CL_INVALID_WORK_DIMENSION, "CL_INVALID_WORK_DIMENSION"} - ,{CL_INVALID_WORK_GROUP_SIZE, "CL_INVALID_WORK_GROUP_SIZE"} - ,{CL_INVALID_WORK_ITEM_SIZE, "CL_INVALID_WORK_ITEM_SIZE"} - ,{CL_INVALID_GLOBAL_OFFSET, "CL_INVALID_GLOBAL_OFFSET"} - ,{CL_INVALID_EVENT_WAIT_LIST, "CL_INVALID_EVENT_WAIT_LIST"} - ,{CL_INVALID_EVENT, "CL_INVALID_EVENT"} - ,{CL_INVALID_OPERATION, "CL_INVALID_OPERATION"} - ,{CL_INVALID_GL_OBJECT, "CL_INVALID_GL_OBJECT"} - ,{CL_INVALID_BUFFER_SIZE, "CL_INVALID_BUFFER_SIZE"} - ,{CL_INVALID_MIP_LEVEL, "CL_INVALID_MIP_LEVEL"} - ,{0, NULL} - }; - const char* message; - - for(int i=0; Error_Status[i].status_string !=NULL; i++){ - if (Error_Status[i].status == status) { - message = Error_Status[i].status_string; - } - } - return message; -}
--- a/include/TaskManager/GpuFunc.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ - -enum { -#include "SysTasks.h" - mogyo, - Twice, - // Func1, -};
--- a/include/TaskManager/GpuScheduler.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -#ifndef INCLUDED_GPU_SCHEDULER -#define INCLUDED_GPU_SCHEDULER - -#include "Scheduler.h" -#include "FifoDmaManager.h" -#include "GpuThreads.h" -#include "HTask.h" -#include "TaskManager.h" - -#ifdef __APPLE__ -#include <OpenCL/opencl.h> -#else -#include <CL/cl.h> -#endif - -class GpuScheduler : public Scheduler { - public: - GpuScheduler(); - virtual ~GpuScheduler(); - void init_impl(int useRefDma); - void init_gpu(); - void run(); - void set_NDRange(void* ndr_); - - void mail_write_from_host(memaddr data) { - fifoDmaManager->mail_write_from_host(data); - } - - memaddr mail_read_from_host() { - return fifoDmaManager->mail_read_from_host(); - } - - int has_mail_from_host() { - return fifoDmaManager->has_mail_from_host(); - } - - cl_platform_id platform_id; - cl_device_id device_id; - cl_uint ret_num_platforms; - cl_uint ret_num_devices; - cl_context context; - cl_command_queue command_queue; - cl_int ret; - ND_RANGE_T_PTR ndr; -private: - FifoDmaManager *fifoDmaManager; - void load_kernel(int cmd); - -}; - -#define GpuSchedRegister(str, filename, functionname) \ - gpu_register_task(str, filename, functionname); -#endif - -extern void gpu_register_task(int cmd,const char* filename,const char* functionname); -
--- a/include/TaskManager/GpuThreads.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -#ifndef INCLUDED_GPU_THREADS -#define INCLUDED_GPU_THREADS - -#include <pthread.h> -#include "Threads.h" -#include "GpuScheduler.h" -#include "Sem.h" - -#ifdef __APPLE__ -#include <OpenCL/opencl.h> -#else -#include <CL/cl.h> -#endif - -class GpuScheduler; - -typedef struct gpu_arg { - int cpuid; - // should be syncrhonized - GpuScheduler *scheduler; - TaskManagerImpl *manager; - SemPtr wait; - int useRefDma; -} gpu_thread_arg_t; - -class GpuThreads : public Threads { - public: - /* - static GpuThreads* getInstance() { - static GpuThreads singleton; - return &singleton; - }*/ - GpuThreads(int useRefDma); - ~GpuThreads(); - - void init(); - static void *gpu_thread_run(void *args); - - int get_mail(int speid, int count, memaddr *ret); - int has_mail(int speid, int count, memaddr *ret); - void send_mail(int speid, int num, memaddr *data); - void add_output_tasklist(int command, memaddr buff, int alloc_size); - void set_wait(SemPtr); - void set_NDRange(void* ndr); - - private: - gpu_thread_arg_t *args; - pthread_t *threads; - int use_refdma; -}; - -#endif
--- a/include/TaskManager/HTask.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,164 +0,0 @@ -#ifndef INCLUDED_HTASK -#define INCLUDED_HTASK - -#include "base.h" -#include "types.h" -#include "Task.h" -#include "TaskList.h" -#include "TaskQueue.h" -#include "QueueInfo.h" -#include "TaskLog.h" -//#include <stdio.h> - -class TaskManagerImpl; -class SchedTask; - -typedef void (*PostFunction)(SchedTask *s, void *read, void *write); - -extern QueueInfo<TaskQueue>* taskQueuePool; - -/*! - @class - - @brief - - Cerium の Task で、spawn() でキューに格納されて順次実行される。 - cpu の指定があれば並列に実行される。 - 特定の Task を待ち合わせる事が可能。 - Task の入出力は dma などで copy される。 - */ - -#include "SimpleTask.h" - -class HTask : public SimpleTask { -public: - BASE_NEW_DELETE(HTask); - - QueueInfo<TaskQueue> *wait_me; // List of task waiting for me - QueueInfo<TaskQueue> *wait_i; // List of task for which I am waiting - PostFunction post_func; - void *post_arg1; - void *post_arg2; - CPU_TYPE cpu_type; - TaskManagerImpl *mimpl; - TaskPtr last; - - int export_task_log; - TaskLog *tasklog; - - HTask *waiter; - HTask *next; - HTask *prev; - - struct htask_flag { - unsigned no_auto_free:1; // bit 0 auto free flag (0 .. auto, 1 manual) - unsigned flip:1; // use read write buffers for all - unsigned nd_range:1; // openCL nd_range - } flag; - - void spawn(); - void wait_for(HTask *); - void set_cpu(CPU_TYPE type); - void set_post(PostFunction func, void *read, void *write); - Task *create_task_array(int task_id, int num_task, int num_param, int num_inData, int num_outData); - Task *next_task_array(int task_id, Task *t); - Task *next_task_array(int id, Task *t, int param_count, int inData_count, int outData_count); - void spawn_task_array(Task *t); - - HTask *init(int cmd, memaddr rbuf, int rs, memaddr wbuf, int ws) { - init(cmd); - set_input(rbuf, rs); - set_output(wbuf, ws); - return this; - } - - void initOnce() { - wait_me = new QueueInfo<TaskQueue>(taskQueuePool); - wait_i = new QueueInfo<TaskQueue>(taskQueuePool); - } - - void freeOnce() { - delete wait_me; - delete wait_i; - } - - private: - -// compatibility - public: // functions - void set_inData_t(int index, memaddr addr, int size) { -#ifdef EARLY_TOUCH - if ((unsigned long)addr&0xf) { - printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n", - command, index, (unsigned long)addr, size); - } - char *p = (char *)addr; char b = *p; - p = (char *)(addr+size-1); b += *p; -#endif - Task *t = ((TaskList*)rbuf)->tasks; - t->set_inData_t(index, addr,size); - } - void set_outData_t(int index, memaddr addr, int size) { -#ifdef EARLY_TOUCH - if ((unsigned long)addr&0xf) { - printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n", - command, index, (unsigned long)addr, size); - } - char *p = (char *)addr; char b = *p; - p = (char *)(addr+size-1); b += *p; -#endif - Task *t = ((TaskList*)rbuf)->tasks; - t->set_outData_t(index, addr,size); - } - void set_param_t(int index, memaddr param) { - Task *t = ((TaskList*)rbuf)->tasks; - t->set_param_t(index, param); - } - - void no_auto_free() { - flag.no_auto_free = 1; - } - void auto_free() { - flag.no_auto_free = 0; - } - - void flip() { - flag.flip = 1; - } - void no_flip() { - flag.flip = 0; - } - void nd_range() { - flag.nd_range = 1; - } - - htask_flag get_flag(){ - return flag; - } - - void init() { - next = prev = NULL; - waiter = NULL; - } - - void init(int cmd) { - command = cmd; - flag.no_auto_free = 0; - flag.flip = 0; - flag.nd_range = 0; - self = (memaddr) this; - - post_func = NULL; - mimpl = NULL; - cpu_type = CPU_PPE; - - post_arg1 = NULL; - post_arg2 = NULL; - } -#define set_param(index,param) set_param_t(index, (memaddr) (param)) - -} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); - -typedef HTask* HTaskPtr; - -#endif
--- a/include/TaskManager/ListData.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -#ifndef INCLUDED_LIST_DATA -#define INCLUDED_LIST_DATA - -#include "base.h" -#include "types.h" - -#define MAX_LIST_DMA_SIZE 8 - -class ListElement { -public: - BASE_NEW_DELETE(ListElement); - - int size; -#ifdef __CERIUM_CELL__ - uint32 addr; // Cell の仕様なんでどうしようもない... - // PowerPC 64bit だと動かない可能性も高いんだが... -#else - memaddr addr; -#endif -}; - -typedef ListElement* ListElementPtr; - -class ListData { -public: - BASE_NEW_DELETE(ListData); - - int length; // The number of data (4) - int size; // Total size of data (4) - int *bound; - ListElement *element; - - void clear(void) { - length = 0; - size = 0; - } - -/* - void print(Scheduler *s) { - s->printf("inList length %d size %d\n",length, size); - for(int i=0;i<length;i++) { - s->printf("inList element[%d] size %d addr %lx\n",i, element[i].size, (unsigned long)element[i].addr); - } - } -*/ -}; - -typedef ListData* ListDataPtr; - -#endif
--- a/include/TaskManager/MailManager.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -#ifndef INCLUDED_MAIL_MANAGER -#define INCLUDED_MAIL_MANAGER - -#include "types.h" - -class MailManager { -public: - /* constructor */ - MailManager(unsigned int qsize = 32) ; - - virtual ~MailManager(); - - /* functions */ - virtual void send(memaddr data); - virtual memaddr recv(); - virtual int count(); - -private: - /* variables */ - memaddr *queue; - unsigned int size; - unsigned int read; - unsigned int write; - unsigned int mask; - - void calc_mask(unsigned int qsize); - void extend(); -} ; - -typedef MailManager *MailManagerPtr; - -#endif
--- a/include/TaskManager/MainScheduler.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -#ifndef INCLUDED_MAIN_SCHEDULER -#define INCLUDED_MAIN_SCHEDULER - -#include "Scheduler.h" -#include "FifoDmaManager.h" - -class MainScheduler : public Scheduler { -protected: - FifoDmaManager *fifoDmaManager; -public: - ~MainScheduler(void) {} - void init_impl(int useRefDma); - void mainMem_alloc(int id, int size); - - void mail_write_from_host(memaddr data) { - fifoDmaManager->mail_write_from_host(data); - } - - memaddr mail_read_from_host() { - return fifoDmaManager->mail_read_from_host(); - } - - int has_mail_from_host() { - return fifoDmaManager->has_mail_from_host(); - } - -}; - -#endif
--- a/include/TaskManager/MemHash.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -#ifndef INCLUDED_MEM_HASH -#define INCLUDED_MEM_HASH - -#include "MemorySegment.h" - -class MemHash { -public: - MemHash(void); - -private: - MemorySegmentPtr *table; - -public: - void clear(void); - unsigned int hash(memaddr data); - int put(memaddr addr, MemorySegmentPtr ms); - MemorySegmentPtr get(memaddr addr); - void remove(memaddr addr); -}; - -typedef MemHash* MemHashPtr; - -const int hashSize = 263; -//const int hashSize = 1; - -const int tableSize = sizeof(MemorySegmentPtr)*hashSize; - -#endif - - -
--- a/include/TaskManager/MemIterator.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -#ifndef INCLUDED_MEMORY_ITERATOR -#define INCLUDED_MEMORY_ITERATOR - -#include "MemList.h" -#include "MemorySegment.h" -#include "AddrList.h" -#include "SchedTask.h" - -enum { - - READ_WRITE, - READ, - WRITE, - -}; - -class MemIterator { -public: - - // 走査する アドレスリスト - AddrListPtr addr_list; - - // 扱う MemorySegment のリスト - MemList *mem_list; - - // ms の stage - MemorySegmentPtr read_ms; - MemorySegmentPtr exec_ms; - MemorySegmentPtr write_ms; - MemorySegmentPtr free_ms; - - SchedTask *smanager; - - MemIterator(AddrListPtr add_list, MemList *mem_list, int cmd, SchedTask *smanager); - ~MemIterator(); - - - MemorySegmentPtr (MemIterator::*get_ms)(void); - - int hasNext(void); - - MemorySegmentPtr get_read_write_ms(void); - MemorySegmentPtr get_read_ms(void); - MemorySegmentPtr get_write_ms(void); - - void collect_ms(void); - void overwrite_list(AddrListPtr list); - -}; - -typedef MemIterator *MemIteratorPtr; - -#endif
--- a/include/TaskManager/MemList.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -#ifndef MEMLIST -#define MEMLIST - -#include <stdlib.h> -#include "MemorySegment.h" - -class MemList : public MemorySegment { -public: - MemorySegment* pool; - MemorySegment* first; - MemorySegment* last; - - // TaskManager 側で create する - //MemList* createMemList(uint32 size, uint32 count); - - MemList(MemorySegment* ms) { - first = last = this; - next = prev = this; - pool = ms; - } - - ~MemList() { - free(pool); - } - - void addFirst(MemorySegment* e); - void addLast(MemorySegment* e); - MemorySegment* getFirst(); - MemorySegment* getLast(); - int remove(MemorySegment* e); - MemorySegment* poll(); - void moveToFirst(MemorySegment* e); // or use(); - MemorySegment* get(int index); -}; - -#endif
--- a/include/TaskManager/MemorySegment.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -#ifndef MEMLSEG -#define MEMLSEG -#include "types.h" - -class MemorySegment { -public: - MemorySegment* next; - MemorySegment* prev; - uint16 tag; - uint16 size; - memaddr address; - void* data; -}; - -typedef MemorySegment *MemorySegmentPtr; - -#endif
--- a/include/TaskManager/PreRefDmaManager.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -#ifndef INCLUDED_PRE_REFERENCED_DMA_MANAGER -#define INCLUDED_PRE_REFERENCED_DMA_MANAGER - -#include "ReferencedDmaManager.h" - -class PreRefDmaManager : public ReferencedDmaManager { - -public: - /* functions */ - virtual void *dma_load(Scheduler *s, memaddr addr, uint32 size, uint32 mask); - virtual void free_(void *buf); -} ; - -#endif/* PRE_REFERENCED_DMA_MANAGER */
--- a/include/TaskManager/QueueInfo.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,335 +0,0 @@ -#ifndef INCLUDED_QUEUE_INFO -#define INCLUDED_QUEUE_INFO - -#include "base.h" -#include "types.h" - -#if 0 -template <typename T> class Queue : T { -public: - - T(); - - T *waiter; - T *next; - T *prev; - - void initOnce(); // to initialize object in pool - void freeOnce(); // to destroy object in pool - - // virual void init(); -}; -#endif - -template <typename T> class QueueInfo : public T { - -public: - /* constructor */ - - /** - singleton queuePool constructor - Do not use this as a Queue - */ - QueueInfo<T>(){ - queueInfoInit(); - } - /** - normal constructor requires - */ - QueueInfo<T>(QueueInfo<T> *p) { - queueInfoInit(); - queuePool = p; - } - - BASE_NEW_DELETE(QueueInfo); - - /* functions */ - T *create(); - - void free_(T *queue); - - void addFirst(T* e); - void addLast(T* e); - T* getFirst(); - T* getLast(); - int remove(T* e); - T* poll(); - void moveToFirst(T* e); // or use(); - T* get(int index); - T* find(T *task); - int empty(); - void freePool() ; - void freeAll(); - - // Iterator - T* getNext(T* q) ; - int length(); - -private: - /* variables */ - - /* we cannot use static in template */ - /* static */ QueueInfo<T> *queuePool; - T* first; - T* last; - - /* functions */ - int extend_pool(int num); - void destroy(); - void queueInfoInit(); -} ; - - - -#ifdef CHECK -#include <stdio.h> -#endif -#include <stdlib.h> - - -/** - Use singleton queuePool constructor - all queueInfo should share this as a pool. - - exteren QueueInfo<H> pool; - QueueInfo<H> pool = new QueueInfo<H>(); - - use this in non initialize envrionment is wrong. -*/ - -template<typename T>void QueueInfo<T>::queueInfoInit() { - // 最初の一つは自分 - first = last = this; - this->next = this->prev = this; - this->waiter = NULL; -} - -template<typename T>void -QueueInfo<T>::freePool() { - for(T * p = queuePool->waiter; p; ) { - T * next = p->waiter; - p->waiter = NULL; - p->freeOnce(); - free(p); - p = next; - } -} - -/** - all pools are shared among QueueInfo (separated by size and type). - it automatically extended by 64. - */ -template<typename T>int -QueueInfo<T>::extend_pool(int num) -{ -#ifdef CHECK - if (queuePool) fprintf(stderr, "don't use queuePool directly"); -#endif - - T* q = (T*)malloc(sizeof(T)*(num+1)+DEFAULT_ALIGNMENT); - - // First Queue is previous pool - q->waiter = this->waiter; - this->waiter = q; - q = (T*)ROUND_UP_ALIGN((long)q, DEFAULT_ALIGNMENT); - q++; - - /* Connect all free queue in the pool */ - T* p = q; - for (; num-- > 0;) { - p->waiter = NULL; - p->initOnce(); - addLast(p); - p = (T*)ROUND_UP_ALIGN((long)(p+1),DEFAULT_ALIGNMENT); - } - - return 0; - -} - -/** - * Task をプールから取って来て返す - * - * @param [cmd] タスクコマンド - */ -template<typename T>T * -QueueInfo<T>::create() -{ - T * q = queuePool->poll(); - if (! q) { - queuePool->extend_pool(64); - q = queuePool->poll(); - } - q->init(); - return q; -} - - -template<typename T>void -QueueInfo<T>::free_(T * q) -{ - q->waiter = NULL; - queuePool->addLast(q); -} - - -/*! - QueueInfo<T> は空にならない。最低1個は要素が入っていて - 1個目は特別扱いする。getFirst すると first->next を返す - */ - -/*! - 最初の1個は特別扱いなので、それの後に追加していく - */ -template<typename T>void -QueueInfo<T>::addFirst(T* e) -{ - e->prev = first; - e->next = first->next; - first->next->prev = e; - first->next = e; -} - -template<typename T>void -QueueInfo<T>::addLast(T* e) -{ -#ifdef CHECK - if (find(e)) { - fprintf(stderr,"Add duplicate task %0x\n",(int)e); - return; - // ... - } -#endif - e->next = first; - e->prev = last; - last->next = e; - last = e; -} - -template<typename T>T* -QueueInfo<T>::getFirst() -{ - if (empty()) return NULL; - return first->next; -} - -template<typename T>T* -QueueInfo<T>::getLast() -{ - if (empty()) return NULL; - return last; -} - -template<typename T>int -QueueInfo<T>::remove(T* e) -{ -#ifdef CHECK - if (!find(e)) { - fprintf(stderr,"Remove non existing task %0x\n",(int)e); - return 0; - // ... - } -#endif - e->prev->next = e->next; - e->next->prev = e->prev; - - if (first->next == e) { - first->next = e->next; - } - if (last == e) { - last = e->prev; - } - - e->prev = NULL; - e->next = NULL; - - return 1; -} - -/*! - リストの先頭を取得および削除する。リストが空の場合は NULL を返す。 - */ - -template<typename T>T* -QueueInfo<T>::poll() -{ - T* e = first->next; - if (e == this) { - return NULL; - } - remove(e); - return e; -} - -template<typename T>void -QueueInfo<T>::moveToFirst(T* e) -{ - remove(e); - addFirst(e); -} - -/*! - リスト内の指定された位置にある要素を返す。 - 要素数を超えた位置を指定した場合 NULL を返す。 - */ - -template<typename T>T* -QueueInfo<T>::get(int index) -{ - T* e = first->next; - for (int i = 0; i < index; i++) { - if (e->next == this) return NULL; - e = e->next; - } - return e; -} - -template<typename T>T* -QueueInfo<T>::find(T* task) -{ - T* e = first->next; - for(;;) { - if (e == this) return NULL; - if (e == task) break; - e = e->next; - } - return e; -} - -template<typename T>int -QueueInfo<T>::empty() -{ - return this->next == this; -} - -template<typename T>T* -QueueInfo<T>::getNext(T* q) -{ - if (q->next==this) return NULL; - return q->next; -} - -template<typename T>int -QueueInfo<T>::length() -{ - int i = 0; - if (empty()) return 0; - T* e = first; - while((e = e->next) != this ) i++; - return i; -} - -template<typename T>void -QueueInfo<T>::freeAll() -{ - T* t; - while((t=poll())) free_(t); -} - - - -/* end */ - - - -#endif
--- a/include/TaskManager/ReferencedDmaManager.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -#ifndef INCLUDED_REFERENCED_DMA_MANAGER -#define INCLUDED_REFERENCED_DMA_MANAGER - -#include "FifoDmaManager.h" - -class ReferencedDmaManager : public FifoDmaManager { - -public: - /* functions */ - virtual void *dma_load(Scheduler *s, memaddr addr, uint32 size, uint32 mask); - virtual void *dma_load1(void *buf, memaddr addr, uint32 size, uint32 mask); - virtual void *dma_loadList(Scheduler *s, ListDataPtr list, uint32 mask); - virtual void *dma_store(void *buf, memaddr addr, uint32 size, uint32 mask); - virtual void dma_storeList(ListDataPtr list, void *buff, uint32 mask); - virtual void *get_writebuf(Scheduler *s,memaddr addr, uint32 size); - - virtual void free_(void *buff); - virtual void bound(ListData *list); -} ; - -#endif/* REFERENCED_DMA_MANAGER */
--- a/include/TaskManager/SchedExit.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -#ifndef INCLUDED_SCHED_EXIT -#define INCLUDED_SCHED_EXIT - -#include "base.h" -#include "Scheduler.h" -#include "SchedTaskBase.h" - - -class SchedExit : public SchedTaskBase { -public: - BASE_NEW_DELETE(SchedExit); - /* functions */ - SchedTaskBase* next(Scheduler *, SchedTaskBase *); - const char * name() { return "Exit" ; }; - -}; - -#endif
--- a/include/TaskManager/SchedMail.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -#ifndef INCLUDED_SCHED_MAIL -#define INCLUDED_SCHED_MAIL - -#include "base.h" -#include "Scheduler.h" -#include "SchedTaskBase.h" - -#include "error.h" - -class SchedMail : public SchedTaskBase { -public: - /* constructor */ - BASE_NEW_DELETE(SchedMail); - - /* functions */ - SchedTaskBase* next(Scheduler *, SchedTaskBase *); - const char * name() { return "Mail" ; }; - - -}; - -#endif
--- a/include/TaskManager/SchedNop.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -#ifndef INCLUDED_SCHED_NOP -#define INCLUDED_SCHED_NOP - -#include "base.h" -#include "Scheduler.h" -#include "SchedTaskBase.h" - -#include "error.h" - -class SchedNop : public SchedTaskBase { -public: - BASE_NEW_DELETE(SchedNop); - - /* functions */ - SchedTaskBase* next(Scheduler *, SchedTaskBase *); - const char * name() { return "Nop" ; }; - -}; - -#endif
--- a/include/TaskManager/SchedNop2Ready.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -#ifndef INCLUDED_SCHED_NOP2READY -#define INCLUDED_SCHED_NOP2READY - -#include "base.h" -#include "Scheduler.h" -#include "SchedTaskBase.h" -#include "SchedNop.h" - -#include "error.h" - -class SchedNop2Ready : public SchedNop { -public: - /* constructor */ - SchedNop2Ready(Scheduler*); - - BASE_NEW_DELETE(SchedNop2Ready); - - /* variables */ - Scheduler* scheduler; - - /* functions */ - void exec(void); - void write(void); - SchedTaskBase* next(Scheduler *, SchedTaskBase *); - const char * name() { return "Nop2" ; }; - - -#if DEBUG - void read(void) { __debug("[SchedNop2Ready:%s]\n", __FUNCTION__); } - //void write(void) { __debug("[SchedNop2Ready:%s]\n", __FUNCTION__); } -#endif -}; - -#endif
--- a/include/TaskManager/SchedTask.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -#ifndef INCLUDED_SCHED_TASK -#define INCLUDED_SCHED_TASK - -#include "base.h" -#include "Scheduler.h" -#include "SchedTaskBase.h" -#include "ListData.h" -#include "HTask.h" -#include "MemList.h" - - -class SchedTask : public SchedTaskBase { -public: - /* constructor */ - SchedTask(); - virtual ~SchedTask(); - - BASE_NEW_DELETE(SchedTask); - - /* variables */ - - /* functions */ - - // override - void read(); - void exec(); - void write(); - SchedTaskBase* next(Scheduler *, SchedTaskBase *); - const char * name() { return "SchedTask" ; }; - - - // タスクの処理は、task_list に登録された C の関数によっておこなう - -public: - /* functions */ - - void init(TaskListPtr _list, TaskPtr _task, - Scheduler* sc, int tag); - - //--- User API --- - int read_size() ; - int write_size(); - void setup_outputData(); - - void* get_input(void *buff, int index); - void* get_output(void *buff, int index); - memaddr get_param(int index); - memaddr get_inputAddr(int index); - memaddr get_outputAddr(int index); - // 書き出しを追加する API がない... - int get_inputSize(int index); - int get_outputSize(int index); - - void set_outputSize(int index, int size); - - int get_cpuid(); - - void* global_alloc(int id, int size); - void* global_get(int id); - void global_set(int id, void *addr); - void global_free(int id); - MemList* createMemList(int size, int count); - - void mainMem_alloc(int id, int size); - void mainMem_wait(); - memaddr mainMem_get(int id); - - MemorySegment * get_segment(memaddr addr, MemList *m); - MemorySegment * get_free_segment(memaddr addr, MemList *m); - void overwrite_segment(MemorySegment *s, memaddr addr); - // uint32 get_tag(); - void put_segment(MemorySegment *s); - void wait_segment(MemorySegment *s); - - - - void *allocate(int size); - void free_(void *p) ; - void free_htask(HTask *p) ; - - void polling(); - - /* これは禁止するべき */ - void *dma_load(void *buf, memaddr addr, uint32 size, uint32 mask); - void dma_store(void *buf,memaddr addr, uint32 size, uint32 mask); - void dma_wait(uint32 mask); - void *get_load_buf(uint32 size) ; - void free_load_buf(void *buf) ; - - void show_dma_wait(); - void start_profile(); - - - /*! - SPU用の get_input, get_output - */ - void* get_input(int index) { - return get_input(readbuf, index); - } - - void* get_output(int index) { - return get_output(writebuf, index); - } - - /** - * swap read / write buffer - * output が read buffer の書き換えならば、memcpy せずに - * swap するだけで良い。size は同じである必要がある。 - */ - void swap() { - void * tmp = readbuf; - readbuf = writebuf; - writebuf = tmp; - } - - - // user - HTaskPtr create_task(int cmd); - HTaskPtr create_task(int cmd, memaddr r, long rs, memaddr w, long ws); - HTaskPtr create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData); - - void set_task_depend(HTaskPtr master, HTaskPtr slave); - void spawn_task(HTaskPtr); - void set_task_cpu(HTaskPtr, CPU_TYPE); - void* allocate(int size,int align); - Scheduler* get_scheduler(); - long get_random(); - - int printf(const char * format, ...); - - - -} ; - - -extern void loadSchedTask(Scheduler *scheduler,TaskPtr task); - -#endif -
--- a/include/TaskManager/SchedTaskBase.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,125 +0,0 @@ -#ifndef INCLUDED_SCHED_TASK_BASE -#define INCLUDED_SCHED_TASK_BASE - -#include "base.h" -//#include <stdio.h> -#include <stdlib.h> - -class TaskManagerImpl; -class Scheduler; -class MemorySegment; -class MemList; -class HTask; - -class SchedTaskBase { -public: - /* constructor */ - // void *called ; // for debug - SchedTaskBase() { - // called = __builtin_return_address(1); - } - virtual ~SchedTaskBase() {} - - BASE_NEW_DELETE(SchedTaskBase); - - // noaction in default - // virtual void load() {} - virtual void read() {} - virtual void exec() {} - virtual void write() {} - virtual SchedTaskBase* next(Scheduler *, SchedTaskBase*) {return 0;} - - virtual void setup_outputData() {}; - virtual const char * name() { return "Base" ; }; - - /* functions */ - virtual void* get_output(void *buff, int index) { return 0; } - virtual void* get_input(void *buff, int index) { return 0;} - virtual memaddr get_param(int index) { return 0;} - virtual int read_size() { return 0;} - virtual int printf(const char * format, ...) {return 0;}; - - virtual memaddr get_inputAddr(int index) {return 0;} - virtual memaddr get_outputAddr(int index) {return 0;} - virtual int get_inputSize(int index) {return 0;} - virtual int get_outputSize(int index) {return 0;} - virtual void set_outputSize(int index, int size) {}; - - virtual int get_cpuid() {return 0;} - - virtual void* global_alloc(int id, int size) {return 0;} - virtual void* global_get(int id) {return 0;} - virtual void global_set(int id, void *addr) {} - virtual void global_free(int id) {} - virtual MemList* createMemList(int size, int count) {return 0;} - - virtual void mainMem_alloc(int id, int size) {} - virtual void mainMem_wait() {} - virtual memaddr mainMem_get(int id) {return 0; } - - virtual MemorySegment * get_segment(memaddr addr, MemList *m) {return 0; } - virtual void put_segment(MemorySegment *s) {} - virtual void wait_segment(MemorySegment *s) {} - - virtual void *allocate(int size) {return 0; } - virtual void free_(void *p) {} - // virtual void polling(); - - /* これは禁止するべき */ - virtual void *dma_load(void *buf, memaddr addr, uint32 size, uint32 mask) {return buf;} - virtual void dma_store(void *buf,memaddr addr, uint32 size, uint32 mask) {} - virtual void dma_wait(uint32 mask) {} - - virtual void show_dma_wait() {} - virtual void start_profile() {} - virtual void* allocate(int size,int align) {return 0;} - virtual Scheduler* get_scheduler() {return 0;} - virtual long get_random() {return 0;} - virtual void free_htask(HTask *h) {} - - /* variables */ - - // SchedTask は、すべて同じ大きさであるべきなので、継承するクラスには、 - // 変数を置かない。ここに、すべて置く。virtual も含めて。 - - // Task を実行するスケジューラ自身 - Scheduler *scheduler; - // Task を作成管理するマネージャー - TaskManagerImpl *manager; - DmaManager* connector; - - TaskPtr atask; - - // 現在スケジューラが実行している TaskList と、このタスクに対応する Task - TaskListPtr list; - // Task の、Tasklist での位置 - TaskPtr cur_index; - - int tag; - - memaddr waiter; - - /** - * read データ、write 用のバッファ - * readbuf には タスク登録時に設定した入力データが入っている。 - * writebuf にデータを描き込んでおくと、 - * タスク登録時に設定した出力先に書き込む - */ - void *readbuf; - void *writebuf; -#define DefaultBoundSize (8) - int din[DefaultBoundSize]; - int dout[DefaultBoundSize]; - - /* system call */ - - FILE *stdout_; - FILE *stderr_; - FILE *stdin_; - - ListData inListData; - ListData outListData; - -} ; - -#endif
--- a/include/TaskManager/SchedTaskList.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -#ifndef INCLUDED_SCHED_TASKLIST -#define INCLUDED_SCHED_TASKLIST - -#include "base.h" -#include "Scheduler.h" -#include "SchedTask.h" -#include "TaskList.h" - -#include "error.h" - -class SchedTaskList : public SchedTask { -public: - /* constructor */ - SchedTaskList(memaddr addr, Scheduler *sched, int tag); - - BASE_NEW_DELETE(SchedTaskList); - - /* override functions */ - void read(); - void exec(); - void write(); - const char * name() { return "TaskList" ; }; - - - -}; - - -#endif -
--- a/include/TaskManager/Scheduler.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,240 +0,0 @@ -#ifndef INCLUDED_SCHEDULER -#define INCLUDED_SCHEDULER - -#include <stdlib.h> -#include <stdarg.h> -#include "base.h" -#include "TaskList.h" -#include "ListData.h" -#include "DmaManager.h" -#include "SchedTaskBase.h" -#include "MemList.h" -#include "MemHash.h" -#include "types.h" - -#ifdef __CERIUM_GPU__ -#ifdef __APPLE__ -#include <OpenCL/opencl.h> -#else -#include <CL/cl.h> -#endif -#endif - -#define MAX_USER_TASK 100 -#define MAX_SYSTEM_TASK 2 -#define MAX_TASK_OBJECT MAX_USER_TASK + MAX_SYSTEM_TASK -#define MAX_GLOBAL_AREA 32 -#define MAX_MAINMEM_AREA 32 - -class SchedTaskBase; -class SchedTask; -class SchedTaskList; -class TaskManagerImpl; -class HTask; - -typedef int (*TaskObjectRun)(SchedTask* smanager, void* r, void *w); - -typedef struct gpu_task_object { -#ifdef __CERIUM_GPU__ - cl_program *program; -#endif -} GpuTaskObject; - -// Task Object Table -// this is named TaskObjectRun but it is not an object. -// It is a pointer to an object creation function -// 大きいので、SPEには置かない方が本当は良い... -// get_segment で取って来るのが、おそらくは正しい。 -typedef struct task_object { - CPU_TYPE cpu_type; - TaskObjectRun run; - memaddr location; // location address in a.out - memaddr end; - uint32 entry_offset; // offset for create(); - MemorySegment *segment; - const char *name; - void (*load)(Scheduler *,int); - void (*wait)(Scheduler *,int); - - GpuTaskObject *gputask; - -} __attribute__ ((aligned (DEFAULT_ALIGNMENT))) //sizeはどれくらい? - TaskObject, *TaskObjectPtr; - -extern "C" { - extern long random(); -} - -class Scheduler { -private: - TaskManagerImpl* manager_tmp; - -public: - virtual ~Scheduler(); - BASE_NEW_DELETE(Scheduler); - - /* variables */ - int id; - MemHash *hash; - - // double buffering - TaskListPtr buff_taskList[2]; - - int buffFlag_taskList; - - /* GlobalMemoryList */ - /* global among Tasks in the same CPU */ - void* globalList[MAX_GLOBAL_AREA]; - - /* MainMemory Allocate Command List */ - memaddr mainMemList[MAX_MAINMEM_AREA]; - - /* Code Area */ - MemList *code_segment_pool; - - DmaManager* connector; - TaskManagerImpl* manager; - - - /* functions */ - void init(TaskManagerImpl *m, int useRefDma=0, int export_task_log=0); - virtual void run(){}; - void run(SchedTaskBase* task1); - - virtual void init_impl(int useRefDma) {}; - void finish(); - - TaskListPtr get_curListBuf(); - TaskListPtr get_renewListBuf(); - - void set_backupTaskList(TaskListPtr cur_taskList); - void set_backupTaskListIndex(int cur_index); - SchedTaskList* get_nextRenewTaskList(); - TaskListPtr get_backupTaskList(); - int get_backupTaskListIndex(); - - - /* GlobalMemory */ - void* global_alloc(int id, int size); - void* global_get(int id); - void global_set(int id, void *addr); - void global_free(int id); - //MemList* createMemList(int size, int count); - MemList* createMemList(int size, int count); - void free_(void *p) { free(p); } - - virtual void mainMem_alloc(int id, int size) {}; - virtual void mainMem_wait() {}; - memaddr mainMem_get(int id); - - MemorySegment * get_segment(memaddr addr, MemList *m); - MemorySegment * get_segment(memaddr addr, MemList *m, int size); - MemorySegment * get_free_segment(memaddr addr, MemList *m); - void overwrite_segment(MemorySegment *s, memaddr addr); - - void allocate_code_segment(int size, int count,struct tbl *table); - - void put_segment(MemorySegment *s); - void wait_segment(MemorySegment *s); - - /* manager */ - - void set_manager(TaskManagerImpl *m) { - manager = m; - }; - - /* user */ - - long get_random() ; - Scheduler *get_scheduler() { return this; }; - int printf(const char *format, ...); - int vprintf0(const char *format, va_list ap); - -} ; - -extern void register_task(int cmd, TaskObjectRun run, const char *str); -extern void register_dynamic_task(int cmd, - memaddr start, int size, TaskObjectRun run, - int entry_offset, - const char *str); - -struct tbl { - unsigned int vma; - unsigned int size; - unsigned int file_offset; - unsigned int buf; -}; - -extern TaskObject task_list[MAX_TASK_OBJECT]; - -int null_run(SchedTask* smanager, void* r, void *w); -void null_loader(Scheduler *m, int task_id); - -extern int entry_cmd[MAX_TASK_OBJECT]; - -inline void -loadSchedTask(Scheduler *scheduler,int command) -{ - task_list[command].load(scheduler,command); -} - -#endif - - - -#define SchedConstructor(str) \ - str() {} \ - BASE_NEW_DELETE(str) \ - -#define SchedDefineTask(str) SchedDefineTask1(str,run) \ - -#define SchedDefineTask1(str,run) \ - static int run(SchedTask *smanager, void *rbuf, void *wbuf); \ - extern "C" { \ - int runTask_##str(SchedTask *smanager, void *rbuf, void *wbuf) \ - { \ - return run(smanager, rbuf, wbuf); \ - } \ - } - -#define SchedExternTask(str) \ - extern "C" { \ - extern int runTask_##str(SchedTask *manager, void *rbuf, void *wbuf) ; \ - } - -#define SchedRegisterTask(cmd, str) \ - register_task(cmd, runTask_##str, #str); - -#define SchedRegister(str) \ - register_task(str, runTask_##str, #str); - -#define SchedDefineDynamicTask(str,segment) \ - SchedDefineTask(str) - -#ifndef NO_OVERLAY -#define SchedExternDynamicTask(str,segment) \ - extern "C" { \ - extern unsigned long long _EAR_; \ - extern struct tbl _ovly_table[]; \ - extern int runTask_##str(SchedTask *manager, void *rbuf, void *wbuf) ; \ - } -#else -#define SchedExternDynamicTask(str,segment) SchedExternTask(str) -#endif - - -#ifndef NO_OVERLAY -#define SchedRegisterDynamicTask(cmd, str, segment) \ - register_dynamic_task(cmd, (memaddr)(_EAR_+_ovly_table[segment].file_offset), \ - _ovly_table[segment].size, \ - runTask_##str, \ - runTask_##str##_offset, \ - #str); -#define SchedRegisterDynamic(str, segment) SchedRegisterDynamicTask(str, str, segment) -#else -#define SchedRegisterDynamicTask(cmd, str, segment) SchedRegisterTask(cmd, str) -#define SchedRegisterDynamic(str, segment) SchedRegisterDynamicTask(str, str, segment) -#endif - - -/* end */
--- a/include/TaskManager/Sem.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -#ifndef INCLUDED_SEM -#define INCLUDED_SEM - -#include <pthread.h> - -typedef struct sem_t { - volatile int value; //セマフォ変数 - pthread_mutex_t mutex; //セマフォ操作用のロック - pthread_cond_t cond; //待ち合わせ用の条件変数 -} sem_t, *sem_ptr; - -class Sem { -public: - /* constructor */ - Sem(int value); - ~Sem(); - void sem_p(); - void sem_v(); - int count(); - /* variables */ -private: - sem_t *sem; -}; - -typedef Sem *SemPtr; - -#endif /* INCLUDED_SEM */
--- a/include/TaskManager/SemMailManager.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -#ifndef INCLUDED_SEM_MAIL_MANAGER -#define INCLUDED_SEM_MAIL_MANAGER - -#include <pthread.h> -#include "MailManager.h" -#include "types.h" -#include "Sem.h" - -class SemMailManager : public MailManager { -public: - /* constructor */ - SemMailManager(unsigned int qsize = 32) ; - - ~SemMailManager(); - - /* functions */ - void send(memaddr data); - memaddr recv(); - int count(); - -private: - /* variables */ - memaddr *queue; - SemPtr queue_remain; - SemPtr queue_count; - unsigned int size; - unsigned int read; - unsigned int write; - unsigned int mask; - - void calc_mask(unsigned int qsize); - void extend(); -} ; - -typedef SemMailManager *SemMailManagerPtr; - -#endif
--- a/include/TaskManager/ShowTime.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -#ifndef INCLUDED_TASK_SHOW_TIME -#define INCLUDED_TASK_SHOW_TIME - -#include "SchedTask.h" - - -#endif
--- a/include/TaskManager/SimpleTask.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -#ifndef INCLUDED_SIPMLE_TASK -#define INCLUDED_SIPMLE_TASK - -#include "base.h" -#include "types.h" - -#define MAX_PARAMS 8 - -class SimpleTask { -public: // variables - - BASE_NEW_DELETE(SimpleTask); - int command; // 4 byte - memaddr self; // 4 byte (or 8byte on 64bit mode) - - memaddr rbuf; - memaddr wbuf; - int r_size; - int w_size; - memaddr from; - memaddr param; // sizeof(SimpleTask)==32 - - -public: // functions - SimpleTask() {}; - - SimpleTask(int r, memaddr read, int w, memaddr write) { - r_size = r; rbuf = read; - w_size = w; wbuf = write; - }; - - void set_input(memaddr i,int size) { r_size = size; rbuf= i; } - void set_output(memaddr o,int size) { w_size = size; wbuf= o; } - void set_param(memaddr data) { param = data; } - memaddr get_param() { return param; } - -} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); - -typedef SimpleTask *SimpleTaskPtr; - -#endif -
--- a/include/TaskManager/SpeTaskManagerImpl.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -#ifndef INCLUDED_SPE_TASK_MANAGER_IMPL -#define INCLUDED_SPE_TASK_MANAGER_IMPL - -#include "TaskManagerImpl.h" -#include "MainScheduler.h" -#include "Scheduler.h" -#include "TaskList.h" - -class SpeTaskManagerImpl : public TaskManagerImpl { -public: - /* constructor */ - BASE_NEW_DELETE(SpeTaskManagerImpl); - - SpeTaskManagerImpl() ; - ~SpeTaskManagerImpl(); - - /* functions */ - // call by system - void init(int spuIdle,int useRefDma, int export_task_log); - void run(); - void start_profile(); - void show_profile(); - void export_task_log(); - HTaskPtr create_task(int cmd,void *from); - HTaskPtr create_task(int cmd, memaddr rbuf, long r_size, memaddr wbuf, long w_size,void *from); - HTaskPtr create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData,void *from); - - TaskListPtr createTaskList() { return 0; } - void set_task_depend(HTaskPtr master, HTaskPtr slave); - void spawn_task(HTaskPtr); - void set_task_cpu(HTaskPtr, CPU_TYPE); - void polling() {} - void free_htask(HTaskPtr htask) {} - void print_arch(); - void set_NDRange(void* ndr){} -#ifdef __CERIUM_GPU__ - - SpeTaskManagerImpl(int i); - void append_activeTask(HTask* p); - void append_waitTask(HTask* p); - -#endif -} ; - - -#endif /* INCLUDED_SPE_TASK_MANAGER_IMPL */
--- a/include/TaskManager/SpeThreads.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -#ifndef INCLUDED_SPE_THREADS -#define INCLUDED_SPE_THREADS - -#include <libspe2.h> -#include <pthread.h> -#include "Threads.h" - -#define SPE_ELF "spe-main" - -typedef struct arg { - int speid; - spe_context_ptr_t ctx; -} thread_arg_t; - - -class SpeThreads : public Threads { -public: - /* constructor */ - SpeThreads(int num = 1); - ~SpeThreads(void); - - /* functions */ - void init(void); - int get_mail(int speid, int count, memaddr *ret); // BLOCKING - int has_mail(int speid, int count, memaddr *ret); // NONBLOCK - void send_mail(int speid, int num, memaddr *data); // BLOCKING - static void *spe_thread_run(void *arg); - static void *frontend_thread_run(void *arg); - void add_output_tasklist(int command, memaddr buff, int alloc_size); - -private: - /* variables */ - spe_program_handle_t *spe_handle; - spe_context_ptr_t *spe_ctx; - pthread_t *threads; - thread_arg_t *args; - int cpu_num; -}; - -#endif
--- a/include/TaskManager/Start.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -#ifndef INCLUDED_SYSTASK_START -#define INCLUDED_SYSTASK_START - -#include "SchedTask.h" - - -#endif
--- a/include/TaskManager/SynchronizedMailManager.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -#ifndef INCLUDED_SYNC_MAIL_MANAGER -#define INCLUDED_SYNC_MAIL_MANAGER - -#include <pthread.h> -#include "MailManager.h" -#include "types.h" -#include "Sem.h" - -class SynchronizedMailManager : public MailManager { -public: - /* constructor */ - SynchronizedMailManager(unsigned int qsize = 32) ; - - ~SynchronizedMailManager(); - - /* functions */ - void send(memaddr data); - memaddr recv(); - int count(); - -private: - /* variables */ - memaddr *queue; - SemPtr queue_remain; - SemPtr queue_count; - unsigned int size; - unsigned int read; - unsigned int write; - unsigned int mask; - - void calc_mask(unsigned int qsize); - void extend(); -} ; - -typedef SynchronizedMailManager *SynchronizedMailManagerPtr; - -#endif
--- a/include/TaskManager/SysFunc.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -#ifndef SYSFUNCH -#define SYSFUNCH - -enum systask { -#include "SysTasks.h" -}; - -#endif
--- a/include/TaskManager/SysTask.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -extern void systask_register();
--- a/include/TaskManager/SysTasks.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -StartTask, -FinishTask, -ShowTime, -StartProfile, -#define Dummy StartTask
--- a/include/TaskManager/Task.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,149 +0,0 @@ -#ifndef INCLUDED_TASK -#define INCLUDED_TASK - -#include "base.h" -#include "types.h" -#include "ListData.h" -#include "SimpleTask.h" - -class SchedTask; -class Scheduler; - -class Task { - public: // variables - int task_size; - int command; - int param_count; - int inData_count; - int outData_count; - int inData_offset; - int outData_offset; - void *data[] __attribute__ ((aligned (DEFAULT_ALIGNMENT))); - - public: // functions - - void print(Scheduler *s); - - memaddr *param(int index) { - memaddr p = (memaddr)data + sizeof(memaddr)*index; - return (memaddr *)p; - } - - ListElement *inData(int index) { - memaddr p = (memaddr)data + inData_offset; - p += sizeof(ListElement)*index; - return (ListElement*)p; - } - - ListElement *outData(int index) { - memaddr p = (memaddr)data + outData_offset; - p += sizeof(ListElement)* index; - return (ListElement*)p; - } - - static int calc_size(int params, int ins, int outs) { - int size = round_up16(sizeof(Task)) - + round_up16(sizeof(memaddr)*params) - + round_up16(sizeof(ListElement)*ins) - + round_up16(sizeof(ListElement)*outs); - return size; - } - - void init(int task_id, int params, int ins, int outs) { - set_task_id(task_id); - param_count = params; - inData_count = ins; - outData_count = outs; - inData_offset = round_up16(sizeof(memaddr)*params); - outData_offset = round_up16(inData_offset+sizeof(ListElement)*ins); - //task_size = round_up16(sizeof(Task)+outData_offset+sizeof(ListElement)*outs); - - task_size = round_up16(sizeof(Task)) - + round_up16(sizeof(memaddr)*params) - + round_up16(sizeof(ListElement)*ins) - + round_up16(sizeof(ListElement)*outs); - - } - - int size() { - return task_size; - } - - int inData_total_size() { - int size = 0; - ListElement *in= inData(0); - for(int i=0; i< inData_count; i++) { - size += in[i].size; - } - return size; - } - int outData_total_size() { - int size = 0; - ListElement *out= outData(0); - for(int i=0; i< outData_count; i++) { - size += out[i].size; - } - return size; - } - - void set_inData_t( int index, memaddr addr, int size) { - ListElement *list = inData(index); -#ifdef EARLY_TOUCH - if ((unsigned long)addr&0xf) { - printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n", - command, index, (unsigned long)addr, size); - } - char *p = (char *)addr; int b = *p; - p = (char *)(addr+size-1); b += *p; -#endif - -#ifdef __CERIUM_CELL__ - list->addr = (uint32)addr; -#else - list->addr = addr; -#endif - list->size = size; - } - - void set_outData_t(int index, memaddr addr, int size) { - ListElement *list = outData(index); -#ifdef EARLY_TOUCH - if ((unsigned long)addr&0xf) { - printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n", - command, index, (unsigned long)addr, size); - } - char *p = (char *)addr; int b = *p; - p = (char *)(addr+size-1); b += *p; -#endif -#ifdef __CERIUM_CELL__ - list->addr = (uint32)addr; -#else - list->addr = addr; -#endif - list->size = size; - } - void set_task_id(int id) { command = id; } - void set_param_t(int index, memaddr param) { - memaddr *p = (memaddr*)this->param(index); - *p = param; - } - - Task * next() - { - char *p = (char*)this; - p += size(); - return (Task*)p; - } - - -#define set_param(index,param) set_param_t(index, (memaddr) (param)) - -#define set_inData(index, addr, size) \ - set_inData_t(index, (memaddr)(addr), (size)); -#define set_outData(index, addr, size) \ - set_outData_t(index, (memaddr)(addr), (size)); -} __attribute__ ((aligned (DEFAULT_ALIGNMENT))) ; - -typedef Task* TaskPtr; - -#endif
--- a/include/TaskManager/TaskList.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -#ifndef INCLUDED_TASKLIST -#define INCLUDED_TASKLIST - -#include "base.h" -#include "Task.h" - -class HTask; - -#define TASK_MAX_SIZE 31 - -class TaskList { // 1024 byte -public: - BASE_NEW_DELETE(TaskList); - - long lastTask; // 4 byte - TaskList *next; // 4 byte - TaskList *prev; // 4 byte - TaskList *waiter; // 4 byte - HTask *self; // 4 byte - long dummy[3]; // 16 byte - Task tasks[TASK_MAX_SIZE]; // 32*TASK_MAX_SIZE - - - TaskPtr last() { return (TaskPtr)(((memaddr)tasks)+lastTask); } - void set_last(Task *t) { lastTask = ((memaddr)t) - ((memaddr)tasks); } - void init() { lastTask = ((memaddr)&tasks[TASK_MAX_SIZE])-(memaddr)(tasks); waiter=this; } - void initOnce() { } - void freeOnce() {} - -} ; - -typedef TaskList* TaskListPtr; - -#endif
--- a/include/TaskManager/TaskLog.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -#ifndef INCLUDED_TASKLOG -#define INCLUDED_TASKLOG - -#include "QueueInfo.h" - -struct waitTask { - int task_id; - int cmd; - - waitTask *next; - waitTask *prev; - waitTask *waiter; -}; - -static int task_id; - -class TaskLog { -public: - /* variables */ - int mtask_id; - int cmd; - QueueInfo<waitTask> wait_for_list; - unsigned long long create_time; - unsigned long long execute_time; - unsigned long long finish_time; - - TaskLog *next; - TaskLog *prev; - TaskLog *waiter; - - /* constructor */ - TaskLog() { - mtask_id = task_id; - task_id++; - create_time = 0; - execute_time = 0; - finish_time = 0; - } - - void set_cmd(int _cmd) { - cmd = _cmd; - } - - -private: - // Unique id - - -}; - -#endif
--- a/include/TaskManager/TaskManager.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -#ifndef INCLUDED_TASK_MANAGER -#define INCLUDED_TASK_MANAGER - -#include "TaskManagerImpl.h" -#include "MemList.h" -#include "HTask.h" - -class Scheduler; -class MemList; - -typedef struct nd_range { - cl_uint dimension; - size_t gws[3]; - size_t lws[3]; -} ND_RANGE_T, *ND_RANGE_T_PTR; - -class TaskManager { -public: - /* constructor */ - TaskManager(int num); // The number of threads - ~TaskManager(); - - /* variables */ - TaskManagerImpl *m_impl; - void (*tm_end)(TaskManager *manager); - ND_RANGE_T_PTR ndr; - - /* user function */ - HTaskPtr create_task(int cmd); - HTaskPtr create_task(int cmd, memaddr r, long rs, memaddr w, long ws); - HTaskPtr create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData); - - void run(); - void *allocate(int size); - void set_TMend(void (*endf)(TaskManager *manager)); - int get_cpuNum(); - int get_random(); - Scheduler *get_scheduler(); - void set_NDRange(ND_RANGE_T_PTR ndr) ; - MemList* createMemList(int size, int count); - - void start_profile() { m_impl->start_profile(); } - void show_profile() { m_impl->show_profile(); } - void export_task_log() { m_impl->export_task_log(); } - - SchedTask *get_schedTask() { - return m_impl->schedTaskManager; - } - - /* functions */ - void init(int spuIdle, int export_task_log, int useRefDma); - void finish(); - void error(const char* str); -private: - int machineNum; -} ; - -#endif -
--- a/include/TaskManager/TaskManagerImpl.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -#ifndef INCLUDED_TASK_MANAGER_IMPL -#define INCLUDED_TASK_MANAGER_IMPL - -#include "MailManager.h" -#include "ListData.h" -#include "QueueInfo.h" -#include "TaskQueue.h" -#include "HTask.h" -#include "Scheduler.h" -#include "TaskLog.h" -#include <OpenCL/opencl.h> -class MemList; - -extern QueueInfo<TaskQueue> *taskQueuePool ; -extern QueueInfo<HTask> *htaskPool ; -extern QueueInfo<TaskList> *taskListPool; -extern QueueInfo<TaskLog> *taskLogQueue; - -class TaskManagerImpl { - public: - - /* variables */ - int machineNum; - QueueInfo<HTask> *activeTaskQueue; - QueueInfo<HTask> *waitTaskQueue; - - QueueInfo<TaskQueue> *taskQueueImpl; - QueueInfo<HTask> *htaskImpl; - - SchedTask *schedTaskManager; - Scheduler *scheduler; - TaskManagerImpl *others; - int _export_task_log; - - /* constructor */ - TaskManagerImpl(int num = 0) ; - - virtual ~TaskManagerImpl() { } - - /* functions */ - // system - virtual void init(int,int,int) = 0; - virtual void run() = 0; - virtual void start_profile() = 0; - virtual void show_profile() = 0; - virtual void export_task_log(){} - virtual void append_activeTask(HTaskPtr); - virtual void append_waitTask(HTaskPtr); - virtual void polling() = 0; - virtual void print_arch() = 0; - virtual void set_NDRange(void*) = 0; - void check_task_finish(HTaskPtr task, QueueInfo<HTask> *wait_queue); - void check_task_list_finish(SchedTask *s, TaskListPtr list, QueueInfo<HTask> *wait_queue); - - void systask_init(); - - // user - virtual HTaskPtr create_task(int cmd,void *from); - virtual HTaskPtr create_task(int cmd, memaddr rbuf, long r_size, memaddr wbuf, long w_size,void *from); - virtual HTaskPtr create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData,void *from); - virtual TaskListPtr createTaskList() = 0; - - const char *get_task_name(int cmd); - const char *get_task_name(TaskPtr task); - const char *get_task_name(SimpleTaskPtr simpletask); - const char *get_task_name(SchedTaskBase *schedtask); - const char *get_task_name(HTaskPtr htask); - const char *get_task_name(HTaskPtr htask, int index); - virtual void set_task_depend(HTaskPtr master, HTaskPtr slave); - virtual void spawn_task(HTaskPtr); - virtual void set_task_cpu(HTaskPtr, CPU_TYPE); - void set_taskList(HTaskPtr htask, QueueInfo<TaskList> * taskList); - - void free_htask(HTaskPtr htask) { -#if !defined(__SPU__) - if (htask->self) { - htask->flag.no_auto_free = 0; - return; - } - htaskImpl->free_(htask); -#endif - } - - void* allocate(int size, int alignment) - { - - void *buff = 0; - if (size==0) return 0; -#if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) - buff = malloc(size); -#else - posix_memalign(&buff, alignment, size); -#endif - if (buff==0) - get_scheduler()->printf("Can't allocate memory\n"); - return buff; - } - - void* allocate(int size) - { - - void *buff = 0; - if (size==0) return 0; -#if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) - buff = malloc(size); -#else - posix_memalign(&buff, DEFAULT_ALIGNMENT, size); -#endif - if (buff==0) - get_scheduler()->printf("Can't allocate memory\n"); - return buff; - } - - Scheduler* get_scheduler() { return scheduler; } - void set_scheduler(Scheduler *s) { scheduler = s; } - -} __attribute__ ((aligned (DEFAULT_ALIGNMENT))); -extern void error(const char* error_message); -#endif
--- a/include/TaskManager/TaskQueue.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -#ifndef INCLUDED_TASK_QUEUE -#define INCLUDED_TASK_QUEUE - -#include "base.h" -#include "types.h" - -class HTask; - -class TaskQueue { - - /** - HTask 間の dependency を表すリスト。HTask の wait_me と wait_i がこれ。 - */ -public: - TaskQueue(HTask *q = NULL); - - BASE_NEW_DELETE(TaskQueue); - - HTask *task; - TaskQueue *waiter; - - TaskQueue *next; - TaskQueue *prev; - - void init() { } - void initOnce() { } - void freeOnce() {} - - TaskQueue *init(HTask *task) { - this->task = task; - return this; - } - -} ; - -typedef TaskQueue* TaskQueuePtr; - -#endif
--- a/include/TaskManager/Threads.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -#ifndef INCLUDED_THREADS -#define INCLUDED_THREADS - -#include <pthread.h> -#include "base.h" -#include "types.h" - - -class Threads { -public: - BASE_NEW_DELETE(Threads); - - /* constructor */ - Threads(int num = 1) {}; - virtual ~Threads() {}; - - /* functions */ - virtual void init() = 0; - virtual int get_mail(int speid, int count, memaddr *ret) = 0; // BLOCKING - virtual int has_mail(int speid, int count, memaddr *ret) = 0; // NONBLOCK - virtual void send_mail(int speid, int num, memaddr *data) = 0; // BLOCKING - virtual void add_output_tasklist(int command, memaddr buff, int alloc_size) = 0; - virtual int is_gpu(int cpuid) { return 0; } - virtual void set_NDRange(void* ndr)=0; - /* variables */ - pthread_t *threads; - int cpu_num; -} ; - -#endif
--- a/include/TaskManager/base.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -#ifndef INCLUDED_BASE_H_ - -#include <new> -#include <stdlib.h> -#include <stdio.h> - - -#ifdef __SPU__ -# define BASE_NEW_DELETE(T) \ - /* override new/detele */ \ - static void* operator new(size_t size) { \ - if ((int)size == 0) { \ - size = 1; \ - } \ - \ - void *ptr = malloc(size); \ - return ptr; \ - } \ - static void operator delete(void* rawMemory, size_t size) { \ - free(rawMemory); \ - } \ - -#else -# define BASE_NEW_DELETE(T) -#endif - -#endif
--- a/include/TaskManager/error.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -#ifndef CERIUM_ERR -#define CERIUM_ERR - -#ifdef DEBUG -# include <stdio.h> -# define __debugs(s, ...) do { \ - s->printf(__VA_ARGS__); \ - } while (0) -#else /* DEBUG */ -# define __debug(...) -#endif - -#ifdef DEBUG -# include <stdio.h> -# define __debugs_ppe(s, ...) do { \ - s->printf("[PPE] ", __VA_ARGS__); \ - } while (0) -#else /* DEBUG */ -# define __debug_ppe(...) -#endif - -#ifdef DEBUG -# include <stdio.h> -# define __debugs_spe(s, ...) do { \ - s->printf("[SPE] ", __VA_ARGS__); \ - } while (0) -#else /* DEBUG */ -# define __debug_spe(...) -#endif -#endif
--- a/include/TaskManager/gettime.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -#ifndef GETTIME_H_ -#define GETTIME_H_ - -#include <time.h> -#ifdef __APPLE__ -#include <sys/time.h> -#endif -/** - * Mac OS X側には、clock_gettimeがないので、gettimeofdayを使う - */ -inline unsigned long long gettime() { - - unsigned long long time = 0; -#ifdef __CERIUM_FIFO__ // ?? - struct timespec ts; - -#ifndef __APPLE__ - clock_gettime(CLOCK_REALTIME, &ts); -#else - struct timeval tv; - gettimeofday(&tv, NULL); - ts.tv_sec = tv.tv_sec; - ts.tv_nsec = tv.tv_usec * 1000; -#endif - - time = ((ts.tv_sec << 32) | ts.tv_nsec ); -#endif // __CERIUM_FIFO__ - return time; - -} - -#endif
--- a/include/TaskManager/rdtsc.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -#ifndef RDTSC_H_ -#define RDTSC_H_ - -/* - * rdtsc is Read Time Stamp Counter - */ - -inline unsigned long long rdtsc() { - unsigned long long ret = 0; -#ifdef __CERIUM_FIFO__ // ?? - __asm__ volatile ("rdtsc" : "=A" (ret)); -#endif // __CERIUM_FIFO__ - return ret; -} - -#endif /* RDTSC_H_ */
--- a/include/TaskManager/types.h Tue Mar 12 17:06:42 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -#ifndef INCLUDED_TYPES -#define INCLUDED_TYPES - -#include <stdint.h> - -typedef uint16_t uint16; -typedef uint32_t uint32; -typedef uint64_t uint64; - -// HOST main memory address -// SPU's (void *) is always 32bit (actually 18bit (256kbyte)) -// memaddr is different from (void *) in SPU. -// -#ifdef __SPU__ -#if ABIBIT>32 -typedef uint64_t memaddr; -#else -typedef uint32_t memaddr; -#endif -#else -typedef char* memaddr; -#endif - - -#define Newq(Type,Count) ((Type *)malloc(sizeof(Type)*Count)) -#define ReAlloc(Pointer,Type,Count) ((Type *)realloc((void*)Pointer,sizeof(Type)*Count)) - - -#define SPE_ALIGNMENT 16 -#define SPE_ALIGNMENT_FULL 128 -#define SPE_ALIGN __attribute__((aligned(SPE_ALIGNMENT))) -#define SPE_ALIGN_FULL __attribute__((aligned(SPE_ALIGNMENT_FULL)) -#define ROUND_UP_ALIGN(value, alignment) \ - (((value) + ((alignment) - 1))&(~((alignment)-1))) -#define DEFAULT_ALIGNMENT SPE_ALIGNMENT -//#define DEFAULT_ALIGNMENT SPE_ALIGNMENT_FULL - -#define DMA_MAX_SIZE 16384 - -#define round_up16(value) ROUND_UP_ALIGN(value, 16) -#define round_up128(value) ROUND_UP_ALIGN(value, 128) - -#define TaskArray (-1) -#define TaskArray1 (-2) - -// SPU 依存 (よろしくないが...) - -// ここも typedef しとくか? -enum { -// どの方向かで enum 分けるだろjk... -// PPE -> SPE - MY_SPE_NOP = 0, - MY_SPE_COMMAND_EXIT, - MY_SPE_COMMAND_GO, - -// SPE -> PPE - MY_SPE_STATUS_BUSY, - MY_SPE_STATUS_READY, - MY_SPE_COMMAND_MALLOC, -}; - -#define MAX_USE_SPE_NUM 32 - -typedef enum { - CPU_PPE = 0, // default - GPU_0 = 1, - GPU_1 = 2, - GPU_2 = 3, - GPU_3 = 4, - CPU_SPE = 5, - SPE_ANY = CPU_SPE, - SPE_0 = 6, - SPE_1 = 7, - SPE_2 = 8, - SPE_3 = 9, - SPE_4 = 10, - SPE_5 = 11, - - -} CPU_TYPE; - -#endif