Skip to content

Commit

Permalink
libpluto API extensions for info on stmt structures
Browse files Browse the repository at this point in the history
Signed-off-by: Siddharth Bhat <siddu.druid@gmail.com>
Signed-off-by: Uday Bondhugula <uday@csa.iisc.ernet.in>
  • Loading branch information
bollu authored and Uday Bondhugula committed Oct 24, 2016
1 parent 6dc5544 commit c91892e
Show file tree
Hide file tree
Showing 2 changed files with 164 additions and 1 deletion.
18 changes: 18 additions & 0 deletions include/pluto/libpluto.h
Expand Up @@ -2,6 +2,7 @@
#define __LIBPLUTO__
#include "isl/union_set.h"
#include "isl/union_map.h"
#include "../../src/math_support.h"

#include "osl/scop.h"

Expand Down Expand Up @@ -193,6 +194,23 @@ void pluto_schedule_str(const char *domains_str,
char** schedules_str_buffer_ptr,
PlutoOptions *options);



struct remapping {
int nstmts;
PlutoMatrix **stmt_inv_matrices;
int **stmt_divs;
};
typedef struct remapping Remapping;

void pluto_remapping_free(Remapping *);

void pluto_get_remapping_str(const char *domains_str,
const char *dependences_str,
Remapping **remapping_ptr,
PlutoOptions *options);


/*
Free the string stored in schedules_str_buffer_ptr
*/
Expand Down
147 changes: 146 additions & 1 deletion src/libpluto.c
Expand Up @@ -376,6 +376,127 @@ __isl_give isl_union_map *pluto_schedule(isl_union_set *domains,
}


Remapping *pluto_get_remapping(isl_union_set *domains,
isl_union_map *dependences, PlutoOptions *options_l) {

int i, nbands, n_ibands, retval;
isl_ctx *ctx;
isl_space *space;
double t_t, t_all, t_start;

ctx = isl_union_set_get_ctx(domains);
space = isl_union_set_get_space(domains);

// isl_union_set_dump(domains);
// isl_union_map_dump(dependences);

PlutoProg *prog = pluto_prog_alloc();
prog->options = options_l;

/* global var */
options = options_l;


prog->nvar = -1;
prog->nstmts = isl_union_set_n_set(domains);

if (prog->nstmts >= 1) {
prog->stmts = (Stmt **)malloc(prog->nstmts * sizeof(Stmt *));
}else{
prog->stmts = NULL;
}

for (i=0; i<prog->nstmts; i++) {
prog->stmts[i] = NULL;
}

extract_stmts(domains, prog->stmts);

for (i=0; i<prog->nstmts; i++) {
prog->nvar = PLMAX(prog->nvar, prog->stmts[i]->dim);
}

if (prog->nstmts >= 1) {
Stmt *stmt = prog->stmts[0];
prog->npar = stmt->domain->ncols - stmt->dim - 1;
prog->params = (char **) malloc(sizeof(char *)*prog->npar);
}else prog->npar = 0;

for (i=0; i<prog->npar; i++) {
char *param = malloc(5);
sprintf(param, "p%d", i);
prog->params[i] = param;
}

prog->ndeps = 0;
isl_union_map_foreach_map(dependences, &isl_map_count, &prog->ndeps);

prog->deps = (Dep **)malloc(prog->ndeps * sizeof(Dep *));
for (i=0; i<prog->ndeps; i++) {
prog->deps[i] = pluto_dep_alloc();
}
extract_deps(prog->deps, 0, prog->stmts,
dependences, OSL_DEPENDENCE_RAW);

IF_DEBUG(pluto_prog_print(stdout, prog););

t_start = rtclock();
retval = pluto_auto_transform(prog);
t_t = rtclock() - t_start;

if (retval) {
/* Failure */
pluto_prog_free(prog);
isl_space_free(space);

if (!options->silent) {
printf("[libpluto] failure, returning NULL schedules\n");
}

return NULL;
}

pluto_compute_dep_directions(prog);
pluto_compute_dep_satisfaction(prog);

if (!options->silent) {
fprintf(stdout, "[pluto] Affine transformations\n\n");
/* Print out transformations */
pluto_transformations_pretty_print(prog);
}

Band **bands, **ibands;
bands = pluto_get_outermost_permutable_bands(prog, &nbands);
ibands = pluto_get_innermost_permutable_bands(prog, &n_ibands);
printf("Outermost tilable bands: %d bands\n", nbands);
pluto_bands_print(bands, nbands);
printf("Innermost tilable bands: %d bands\n", n_ibands);
pluto_bands_print(ibands, n_ibands);

if (options->tile) {
pluto_tile(prog);
}else{
if (options->intratileopt) {
pluto_intra_tile_optimize(prog, 0);
}
}

Remapping *remapping = (Remapping *)malloc(sizeof(Remapping));
remapping->nstmts = prog->nstmts;
remapping->stmt_inv_matrices =
(PlutoMatrix **)malloc(sizeof(PlutoMatrix *) * prog->nstmts);
remapping->stmt_divs = (int **)malloc(sizeof(int *) * prog->nstmts);


for(i = 0; i < prog->nstmts; i++) {
remapping->stmt_inv_matrices[i] = pluto_stmt_get_remapping(prog->stmts[i],
&remapping->stmt_divs[i]);
}

return remapping;
}



/*
* Performs pluto-scheduling on an osl_scop.
Expand Down Expand Up @@ -536,6 +657,30 @@ void pluto_schedule_str(const char *domains_str,

}



void pluto_get_remapping_str(const char *domains_str,
const char *dependences_str,
Remapping **remapping_ptr,
PlutoOptions *options) {

isl_ctx *ctx = isl_ctx_alloc();
isl_union_set *domains = isl_union_set_read_from_str(ctx, domains_str);
isl_union_map *dependences = isl_union_map_read_from_str(ctx,
dependences_str);

assert(remapping_ptr != NULL);
Remapping *remapping = pluto_get_remapping(domains, dependences, options);
*remapping_ptr = remapping;

};


void pluto_remapping_free(Remapping *remapping) {
assert(remapping != NULL);
free(remapping);
};

void pluto_schedules_strbuf_free(char *schedules_str_buffer) {
free(schedules_str_buffer);
}
}

0 comments on commit c91892e

Please sign in to comment.