Example #1
0
void generate_model_b_matrix(waveform_t *waveform, int multiplicity) {
	int i,j,k;
	int M = waveform->nof_modules;

	for (i=0;i<M;i++) {
		memset(tmp_b[i],0,sizeof(float)*M);
	}
	for (i = 0; i < M; i++) {
        for (j = 0; j < waveform->modules[i].nof_outputs; j++) {
			for (k = 0; k < M; k++) {
				if (waveform->modules[i].outputs[j].remote_module_id ==
						waveform->modules[k].id) {
					tmp_b[join_function[i]][join_function[k]] +=
							(float) waveform->modules[i].outputs[j].total_mbpts
							*multiplicity/1000;
				}
			}
        }
    }

	for (i=0;i<wave.nof_tasks;i++) {
		for (j=0;j<wave.nof_tasks;j++) {
			wave.b[i][j] = tmp_b[joined_function[i]][joined_function[j]];
		}
	}
	for (i=0;i<wave.nof_tasks;i++) {
		mapdebug("b_%d=",i);
		for (j=0;j<wave.nof_tasks;j++) {
			mapdebug("%g,",wave.b[i][j]);
		}
		mapdebug("\n",0);
	}
}
Example #2
0
void generate_model_stages(waveform_t *waveform) {
	int i,j,k;
	int M = wave.nof_tasks;

	/* compute stages */
	for (i=0;i<M;i++) {
		tmp_stages[i] = 1;
	}

	for (i=0;i<M-1;i++) {
		for (j=i+1;j<M;j++) {
			if (wave.b[i][j] > 0.0) {
				if (tmp_stages[j] <= tmp_stages[i]) {
					tmp_stages[j] = tmp_stages[i]+1;
				}
			}
		}
	}

	for (i=0;i<waveform->nof_modules;i++) {
		waveform->modules[i].stage = tmp_stages[joined_function_inv[i]];
	}

	mapdebug("stages=",0);
	for (i=0;i<waveform->nof_modules;i++) {
		mapdebug("%d,",waveform->modules[i].stage);
	}
	mapdebug("\n",0);

	for (i = 0; i < waveform->nof_modules; i++) {
        for (j = 0; j < waveform->modules[i].nof_outputs; j++) {
			for (k = 0; k < waveform->nof_modules; k++) {
				if (waveform->modules[i].outputs[j].remote_module_id ==
						waveform->modules[k].id) {
					if (waveform->modules[i].outputs[j].delay == -1) {
						waveform->modules[i].outputs[j].delay = abs(waveform->modules[i].stage-waveform->modules[k].stage);
					}
					mapdebug("delay %s:%d->%s(%d):%d is %d slots\n",waveform->modules[i].name,
							j, waveform->modules[k].name,waveform->modules[k].id,
							waveform->modules[i].outputs[j].remote_port_idx,
							waveform->modules[i].outputs[j].delay);
				}
			}
        }
	}

}
Example #3
0
void generate_model_stages(waveform_t *waveform) {
	int i,j,k;
	int M = wave.nof_tasks;

	/* compute stages */
	for (i=0;i<M;i++) {
		tmp_stages[i] = 1;
	}

	for (i=0;i<M-1;i++) {
		for (j=i+1;j<M;j++) {
			if (wave.b[i][j] > 0) {
				if (tmp_stages[j] <= tmp_stages[i]) {
					tmp_stages[j] = tmp_stages[i]+1;
				}
			}
		}
	}

	for (i=0;i<waveform->nof_modules;i++) {
		waveform->modules[i].stage = tmp_stages[joined_function_inv[i]];
	}

	mapdebug("stages=",0);
	for (i=0;i<waveform->nof_modules;i++) {
		mapdebug("%d,",waveform->modules[i].stage);
	}
	mapdebug("\n",0);

	for (i = 0; i < waveform->nof_modules; i++) {
        for (j = 0; j < waveform->modules[i].nof_outputs; j++) {
			for (k = 0; k < waveform->nof_modules; k++) {
				if (waveform->modules[i].outputs[j].remote_module_id ==
						waveform->modules[k].id) {
					if (waveform->modules[i].stage == waveform->modules[k].stage) {
						waveform->modules[i].outputs[j].delay = 0;
					} else {
						waveform->modules[i].outputs[j].delay = 1;
					}
				}
			}
        }
	}

}
Example #4
0
void generate_model_join_function(waveform_t *waveform) {
	int i,j;
	stage_config_t *s = &waveform->stages;
	int M = waveform->nof_modules;
	int min_i;

	/* initialize */
	for (i=0;i<M;i++) {
		join_function[i] = i;
	}

	for (i=0;i<s->x_len;i++) {
		min_i = s->newmodules_matrix[i][0];
		for (j=0;j<s->y_len[i];j++) {
			join_function[s->newmodules_matrix[i][j]] = min_i;
		}
	}

	mapdebug("join_function: ",0);
	for (i=0;i<M;i++) {
		mapdebug("%d,",join_function[i]);
	}
	mapdebug("\n",0);
}
Example #5
0
void generate_model_c_vector(waveform_t *waveform, int multiplicity) {
	int i,j,k;
	int M = waveform->nof_modules;

	memset(tmp_c,0,sizeof(float)*M);

	for (i=0;i<M;i++) {
		tmp_c[join_function[i]] += waveform->modules[i].c_mopts[0]*multiplicity;
		wave.force[i] = -1;
	}
	j=0;
	for (i=0;i<M;i++) {
		if (tmp_c[i]) {
			wave.c[j] = tmp_c[i];
			joined_function[j] = i;
			j++;
		}
	}
	mapdebug("joined:",0);
	for (i=0;i<M;i++) {
		mapdebug("%d,",joined_function[i]);
	}
	for (k=0;k<j;k++) {
		for (i=0;i<M;i++) {
			if (joined_function[k] == join_function[i]) {
				joined_function_inv[i] = k;
			}
		}
	}
	mapdebug("inv:",0);
	for (i=0;i<M;i++) {
		mapdebug("%d,",joined_function_inv[i]);
	}
	mapdebug("\n",0);
	wave.nof_tasks = j;

	mapdebug("c_res=",0);
	for (i=0;i<j;i++) {
		mapdebug("%g,",wave.c[i]);
	}
	mapdebug("\n",0);
}
Example #6
0
void generate_model_b_matrix(waveform_t *waveform, int multiplicity) {
	int i,j,k;
	int M = waveform->nof_modules;

	for (i=0;i<M;i++) {
		memset(tmp_b[i],0,sizeof(float)*M);
	}
	for (i = 0; i < M; i++) {
        for (j = 0; j < waveform->modules[i].nof_outputs; j++) {
			for (k = 0; k < M; k++) {
				if (waveform->modules[i].outputs[j].remote_module_id ==
						waveform->modules[k].id) {
					tmp_b[join_function[i]][join_function[k]] +=
							(float) waveform->modules[i].outputs[j].total_mbpts
							*multiplicity/1000;
				}
			}
        }
    }

	for (i=0;i<wave.nof_tasks;i++) {
		for (j=0;j<wave.nof_tasks;j++) {
			wave.b[i][j] = tmp_b[joined_function[i]][joined_function[j]];
		}
	}

	for (i=0;i<wave.nof_tasks;i++) {
		for (j=0;j<wave.nof_tasks;j++) {
			if (wave.b[i][j]>0.0 && i>j) {
				printf("Caution non-DAG graph: ");
				printf("b(%d,%d)=%f\n",i,j,wave.b[i][j]);
			}
			if (wave.b[i][j]>0.0) {
				mapdebug("b(%d,%d)=%f\n",i,j,wave.b[i][j]);
			}
		}
	}

}