-/* Copyright (c) 2009 Da SimGrid Team. All rights reserved. */
+/* Copyright (c) 2009, 2010. The SimGrid Team.
+ * All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
SD_task_destroy(t);
}
+/** @brief loads a DAX file describing a DAG
+ *
+ * See https://confluence.pegasus.isi.edu/display/pegasus/WorkflowGenerator
+ * for more details.
+ */
xbt_dynar_t SD_daxload(const char*filename) {
FILE* in_file = fopen(filename,"r");
xbt_assert1(in_file, "Unable to open \"%s\"\n", filename);
fclose(in_file);
/* And now, post-process the files.
- * We want a file task per pair of computation tasks exchanging the file. Dupplicate on need
+ * We want a file task per pair of computation tasks exchanging the file. Duplicate on need
* Files not produced in the system are said to be produced by root task (top of DAG).
* Files not consumed in the system are said to be consumed by end task (bottom of DAG).
*/
} else {
xbt_dynar_foreach(file->tasks_before,cpt1,depbefore) {
xbt_dynar_foreach(file->tasks_after,cpt2,depafter) {
+ if (depbefore->src == depafter->dst) {
+ WARN2("File %s is produced and consumed by task %s. This loop dependency will prevent the execution of the task.",
+ file->name,depbefore->src->name);
+ }
SD_task_t newfile = SD_task_create_comm_e2e(file->name,NULL,file->amount);
SD_task_dependency_add(NULL,NULL,depbefore->src,newfile);
SD_task_dependency_add(NULL,NULL,newfile,depafter->dst);