流水线调度问题,直接上图:
e为开始为进入流水线花费时间,a为station花费的时间,t为切换流水线花费时间,x为出流水线的时间,
代码中用total[0][i]和total[1][i]分别表示第0条和第1条流水线到station i 所花费的最短时间
代码(C语言写的心累):
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<time.h> #include<string.h> #include<fstream> #define MAX 200000 int assembleLineSequence(int *e, int t[][MAX], int a[][MAX],int *x, int n) { int *total[2]; //记录到达每个station最小的时间花费 total[0] = (int *)malloc(sizeof(int)*n); total[1] = (int *)malloc(sizeof(int)*n); total[0][0] = e[0] + a[0][0]; total[1][0] = e[1] + a[1][0]; for(int i=1; i<n; i++){ if(total[0][i-1] + a[0][i] < total[1][i-1] + t[1][i-1] + a[0][i]) total[0][i] = total[0][i-1] + a[0][i]; else total[0][i] = total[1][i-1] + t[1][i-1] + a[0][i]; if(total[1][i-1] + a[1][i] < total[0][i-1] + t[0][i-1] + a[1][i]) total[1][i] = total[1][i-1] + a[1][i]; else total[1][i] = total[0][i-1] + t[0][i-1] + a[1][i]; } if(total[0][n-1] + x[0] < total[1][n-1] + x[1]) return total[0][n-1] + x[0]; return total[1][n-1] + x[1]; } int main() { FILE *fp; int result; clock_t start, end; for(int i=1; i<=10; i++){ start = clock(); char data[20] = "第"; //给足够大的长度才不会出现段错误 char s[2]; sprintf(s,"%d",i); strcat(data,s); strcat(data, "组.txt"); if((fp=fopen(data,"r"))==NULL){ printf("Cannot open file strike any key exit!"); return -1; } bool flag = false; //记录当前字符是否与上一字符拼接成新数字 int num,j=0,n=0,line=1; //n记录数据个数 int t[2][MAX],a[2][MAX]; int e[2] = {0,0},x[2] = {0,0}; char nc; while(!feof(fp)){ nc = fgetc(fp); if(isdigit(nc)){ if(flag == true){ num = num * 10 + (nc - '0'); }else{ num = nc - '0'; } flag = true; }else { if(nc=='\n'){ n = j; j = 0; line++; } if(nc == ' '){ switch(line){ case 1: t[0][j++] = num; break; case 2: a[0][j++] = num; break; case 3: t[1][j++] = num; break; case 4: a[1][j++] = num; break; default: printf("第%d行default\n",line); break; } } flag = false; } } end = clock(); printf("花费时间:%fs\t",(double)(end - start)/CLOCKS_PER_SEC); result = assembleLineSequence(e,t,a,x,n); printf("第%d组:%d\n",i,result); fclose(fp); } return 0; }
测试数据:
http://yunpan.cn/c3weMQSFtyvaw (提取码:625f)
第一行表示流水线0切换到流水线1的切换时间
第二行表示流水线0中station的处理时间
第三行表示流水线1切换到流水线0的切换时间
第四行表示流水线1中station的处理时间
结果:
花费时间:0.020000s 第1组:996644 花费时间:0.020000s 第2组:1092030 花费时间:0.030000s 第3组:1179822 花费时间:0.020000s 第4组:1268183 花费时间:0.020000s 第5组:1363569 花费时间:0.030000s 第6组:1452373 花费时间:0.030000s 第7组:1543059 花费时间:0.040000s 第8组:1631089 花费时间:0.030000s 第9组:1722228 花费时间:0.030000s 第10组:1813060