Mercurial > hg > Game > Cerium
diff TaskManager/Cuda/CudaThreads.h @ 1915:effb5653fd5c draft
update cuda, yet running
author | Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 20 Jan 2014 21:59:56 +0900 |
parents | |
children | cd5bbd8ec5d6 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TaskManager/Cuda/CudaThreads.h Mon Jan 20 21:59:56 2014 +0900 @@ -0,0 +1,51 @@ +#ifndef INCLUDED_CUDA_THREADS +#define INCLUDED_CUDA_THREADS + +#include <pthread.h> +#include <cuda.h> +#include <cuda_runtime.h> +#include "Threads.h" +#include "CudaScheduler.h" +#include "Sem.h" + + +class CudaScheduler; + +typedef struct cuda_arg { + int cpuid; + // should be syncrhonized + CudaScheduler *scheduler; + TaskManagerImpl *manager; + SemPtr wait; + int useRefDma; +} cuda_thread_arg_t; + +class CudaThreads : public Threads { + + public: + /* + static GpuThreads* getInstance() { + static GpuThreads singleton; + return &singleton; + }*/ + CudaThreads(int useRefDma); + ~CudaThreads(); + + void init(); + static void *cuda_thread_run(void *args); + virtual int spawn_task(int cpu_num, TaskListPtr p); + virtual void set_mail_waiter(SemPtr w); + + 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); + + private: + cuda_thread_arg_t *args; + pthread_t *threads; + int use_refdma; +}; + +#endif