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