From: mquinson Date: Tue, 4 May 2010 10:25:32 +0000 (+0000) Subject: Obey the control-flow dependencies of DAX files X-Git-Tag: SVN~73 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/bd45d8b31e9df0886d0830f092dbe32396b841f0 Obey the control-flow dependencies of DAX files git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@7671 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/ChangeLog b/ChangeLog index 1ecbd130da..7a800dd835 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ SimGrid (3.4.1-svn) unstable; urgency=low SimDag * Warn the user about loop dependencies in data flow of DAX files + * Obey the control-flow dependencies of DAX files Java Bindings * Fix a bug preventing the tasks from begin garbage collected. diff --git a/src/simdag/sd_daxloader.c b/src/simdag/sd_daxloader.c index 6a523ea615..92d3ff96ad 100644 --- a/src/simdag/sd_daxloader.c +++ b/src/simdag/sd_daxloader.c @@ -43,6 +43,7 @@ static int dax_parse_int(const char *string) { static YY_BUFFER_STATE input_buffer; static xbt_dynar_t result; +static xbt_dict_t jobs; static xbt_dict_t files; static SD_task_t current_job; static SD_task_t root_task,end_task; @@ -75,6 +76,7 @@ xbt_dynar_t SD_daxload(const char*filename) { result = xbt_dynar_new(sizeof(SD_task_t),dax_task_free); files=xbt_dict_new(); + jobs=xbt_dict_new(); root_task = SD_task_create_comp_seq("root",NULL,0); xbt_dynar_push(result,&root_task); end_task = SD_task_create_comp_seq("end",NULL,0); @@ -82,6 +84,7 @@ xbt_dynar_t SD_daxload(const char*filename) { xbt_assert2(!dax_lex(),"Parse error in %s: %s",filename,dax__parse_err_msg()); dax__delete_buffer(input_buffer); fclose(in_file); + xbt_dict_free(&jobs); /* And now, post-process the files. * We want a file task per pair of computation tasks exchanging the file. Duplicate on need @@ -144,15 +147,9 @@ void STag_dax__job(void) { runtime*=4200000000.; /* Assume that timings were done on a 4.2GFlops machine. I mean, why not? */ // INFO3("See ",A_dax__job_id,A_dax__job_runtime,runtime); current_job = SD_task_create_comp_seq(name,NULL,runtime); + xbt_dict_set(jobs,A_dax__job_id,current_job,NULL); free(name); xbt_dynar_push(result,¤t_job); - -} -void STag_dax__child(void) { -// INFO0("See "); -} -void STag_dax__parent(void) { -// INFO0("See "); } void STag_dax__uses(void) { SD_task_t file; @@ -179,6 +176,23 @@ void STag_dax__uses(void) { } } } +static SD_task_t current_child; +void STag_dax__child(void) { + current_child = xbt_dict_get_or_null(jobs,A_dax__child_ref); + if (current_child==NULL) + dax_parse_error(bprintf("Asked to add dependencies to the non-existent %s task",A_dax__child_ref)); +} +void ETag_dax__child(void) { + current_child=NULL; +} +void STag_dax__parent(void) { + SD_task_t parent = xbt_dict_get_or_null(jobs,A_dax__parent_ref); + if (parent == NULL) + dax_parse_error(bprintf("Asked to add a dependency from %s to %s, but %s does not exist", + current_child->name,A_dax__parent_ref,A_dax__parent_ref)); + SD_task_dependency_add(NULL,NULL,parent,current_child); + DEBUG2("Control-flow dependency from %s to %s", current_child->name,parent->name); +} void ETag_dax__adag(void) { // INFO0("See "); } @@ -186,9 +200,6 @@ void ETag_dax__job(void) { current_job = NULL; // INFO0("See "); } -void ETag_dax__child(void) { -// INFO0("See "); -} void ETag_dax__parent(void) { // INFO0("See "); }