73 lines
1.2 KiB
C
73 lines
1.2 KiB
C
|
|
#include "queue.h"
|
|
|
|
void queue_initialize(void)
|
|
{
|
|
q.start_i = 0;
|
|
q.end_i = 0;
|
|
q.num_j = 0;
|
|
q.total_warps = 7;
|
|
q.active_warps = 0;
|
|
}
|
|
|
|
void queue_enqueue(Job * j)
|
|
{
|
|
q.num_j++;
|
|
|
|
// q.jobs[q.end_i] = j;
|
|
|
|
q.jobs[q.end_i].wid = j->wid;
|
|
q.jobs[q.end_i].n_threads = j->n_threads;
|
|
q.jobs[q.end_i].base_sp = j->base_sp;
|
|
q.jobs[q.end_i].func_ptr = j->func_ptr;
|
|
q.jobs[q.end_i].x = j->x;
|
|
q.jobs[q.end_i].y = j->y;
|
|
q.jobs[q.end_i].z = j->z;
|
|
if ((q.end_i + 1) < SIZE)
|
|
{
|
|
q.end_i++;
|
|
}
|
|
else
|
|
{
|
|
q.end_i = 0;
|
|
}
|
|
|
|
}
|
|
|
|
void queue_dequeue(Job * r)
|
|
{
|
|
q.num_j--;
|
|
Job * j = &(q.jobs[q.start_i]);
|
|
if ((q.start_i + 1) < SIZE)
|
|
{
|
|
q.start_i++;
|
|
}
|
|
else
|
|
{
|
|
q.start_i = 0;
|
|
}
|
|
|
|
r->wid = j->wid;
|
|
r->n_threads = j->n_threads;
|
|
r->base_sp = j->base_sp;
|
|
r->func_ptr = j->func_ptr;
|
|
r->x = j->x;
|
|
r->y = j->y;
|
|
r->z = j->z;
|
|
|
|
}
|
|
|
|
int queue_isFull(void)
|
|
{
|
|
return (q.num_j == SIZE);
|
|
}
|
|
|
|
int queue_isEmpty(void)
|
|
{
|
|
return (q.num_j == 0);
|
|
}
|
|
|
|
int queue_availableWarps()
|
|
{
|
|
return (q.active_warps < q.total_warps);
|
|
} |