vx_serial runtime API

This commit is contained in:
Blaise Tine
2021-06-28 05:43:36 -04:00
parent 342c07f8d6
commit 47d317f17a
6 changed files with 163 additions and 46 deletions

View File

@@ -12,7 +12,7 @@ extern "C" {
typedef struct {
pfn_callback callback;
const void * args;
void * arg;
int offset;
int N;
int R;
@@ -21,7 +21,7 @@ typedef struct {
typedef struct {
struct context_t * ctx;
pfn_workgroup_func wg_func;
const void * args;
void * arg;
int offset;
int N;
int R;
@@ -57,7 +57,7 @@ static void spawn_tasks_callback() {
int offset = p_wspawn_args->offset + (wK * NT) + (tid * tK);
for (int task_id = offset, N = task_id + tK; task_id < N; ++task_id) {
(p_wspawn_args->callback)(task_id, p_wspawn_args->args);
(p_wspawn_args->callback)(task_id, p_wspawn_args->arg);
}
vx_tmc(0 == wid);
@@ -72,12 +72,12 @@ void spawn_remaining_tasks_callback(int nthreads) {
wspawn_tasks_args_t* p_wspawn_args = (wspawn_tasks_args_t*)g_wspawn_args[core_id];
int task_id = p_wspawn_args->offset + tid;
(p_wspawn_args->callback)(task_id, p_wspawn_args->args);
(p_wspawn_args->callback)(task_id, p_wspawn_args->arg);
vx_tmc(1);
}
void vx_spawn_tasks(int num_tasks, pfn_callback callback , const void * args) {
void vx_spawn_tasks(int num_tasks, pfn_callback callback , void * arg) {
// device specs
int NC = vx_num_cores();
int NW = vx_num_warps();
@@ -112,7 +112,7 @@ void vx_spawn_tasks(int num_tasks, pfn_callback callback , const void * args) {
fW = 1;
//--
wspawn_tasks_args_t wspawn_args = { callback, args, core_id * tasks_per_core, fW, rW };
wspawn_tasks_args_t wspawn_args = { callback, arg, core_id * tasks_per_core, fW, rW };
g_wspawn_args[core_id] = &wspawn_args;
//--
@@ -159,7 +159,7 @@ static void spawn_kernel_callback() {
int gid1 = p_wspawn_args->ctx->global_offset[1] + j;
int gid2 = p_wspawn_args->ctx->global_offset[2] + k;
(p_wspawn_args->wg_func)(p_wspawn_args->args, p_wspawn_args->ctx, gid0, gid1, gid2);
(p_wspawn_args->wg_func)(p_wspawn_args->arg, p_wspawn_args->ctx, gid0, gid1, gid2);
}
vx_tmc(0 == wid);
@@ -188,12 +188,12 @@ static void spawn_kernel_remaining_callback(int nthreads) {
int gid1 = p_wspawn_args->ctx->global_offset[1] + j;
int gid2 = p_wspawn_args->ctx->global_offset[2] + k;
(p_wspawn_args->wg_func)(p_wspawn_args->args, p_wspawn_args->ctx, gid0, gid1, gid2);
(p_wspawn_args->wg_func)(p_wspawn_args->arg, p_wspawn_args->ctx, gid0, gid1, gid2);
vx_tmc(1);
}
void vx_spawn_kernel(struct context_t * ctx, pfn_workgroup_func wg_func, const void * args) {
void vx_spawn_kernel(struct context_t * ctx, pfn_workgroup_func wg_func, void * arg) {
// total number of WGs
int X = ctx->num_groups[0];
int Y = ctx->num_groups[1];
@@ -241,7 +241,7 @@ void vx_spawn_kernel(struct context_t * ctx, pfn_workgroup_func wg_func, const v
char log2X = fast_log2(X);
//--
wspawn_kernel_args_t wspawn_args = { ctx, wg_func, args, core_id * wgs_per_core, fW, rW, isXYpow2, isXpow2, log2XY, log2X };
wspawn_kernel_args_t wspawn_args = { ctx, wg_func, arg, core_id * wgs_per_core, fW, rW, isXYpow2, isXpow2, log2XY, log2X };
g_wspawn_args[core_id] = &wspawn_args;
//--