Research Article
Multi-GPU Support on Single Node Using Directive-Based Programming Model
typedef struct _task_s | { | int type; //task type (e.g. memory allocation and kernel launch, etc.) | void (routine)(void); // the task routine | _work_args args; // point to the task argument | int work_done; // indicate whether the task is done | int async; // whether the task is asynchronous | struct _task_s next; // next task in the task queue | } _task; | typedef struct | { | int destroyed; // whether this thread is destroyed | int queue_size; // the task queue size | pthread_t thread; // the thread identity | context_t context; // the GPU context associated with this thread | int context_id; // the GPU context id | _task queue_head; // head of the FIFO task queue | _task queue_tail; // tail of the FIFO task queue | pthread_mutex_t queue_lock; | pthread_cond_t queue_ready; // the task queue is not empty and ready | pthread_cond_t work_done; | pthread_cond_t queue_empty; | } _gpu_thread; |
|