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); } }
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); } } } } }
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; } } } } } }
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); }
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); }
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]); } } } }