计算机系统结构课程设计单功能非线性流水线最佳调度程序.docx
《计算机系统结构课程设计单功能非线性流水线最佳调度程序.docx》由会员分享,可在线阅读,更多相关《计算机系统结构课程设计单功能非线性流水线最佳调度程序.docx(12页珍藏版)》请在冰豆网上搜索。
![计算机系统结构课程设计单功能非线性流水线最佳调度程序.docx](https://file1.bdocx.com/fileroot1/2023-7/26/a4333663-8435-4f35-a815-4c85c045ce35/a4333663-8435-4f35-a815-4c85c045ce351.gif)
计算机系统结构课程设计单功能非线性流水线最佳调度程序
福建农林大学计算机与信息学院
计算机类课程设计
课程名称:
计算机系统结构课程设计
设计题目:
单功能非线性流水线最佳调度程序
姓名:
系:
计算机
专业:
计算机科学与技术
年级:
学号:
指导教师:
职称:
2012年11月30日
福建农林大学计算机与信息学院计算机类
课程设计结果评定
评价内容
评价指标
评分权值
评定成绩
工作态度
工作努力,严格按照课程技能训练设计的要求去做,表现好;遵守纪律,工作作风严谨务实。
20
业务水平
能按时优异地完成课程设计任务,能熟练地综合运用所学理论和专业知识,在技能训练中对某些技能、技术有新建议、有小革新、有创见。
动手能力强,实干精神强,团结协作能力强,适应能力强。
30
设计报告质量
报告或成果完整、正确,概念清楚,图纸表格齐全,文字通顺,排版打印符合要求。
40
工作量
按期完成规定的任务,工作量饱满,难度较大。
10
成绩:
指导教师签字:
评定日期:
1设计的目的………………………………………………………………1页
2设计要求…………………………………………………………………1页
3主要仪器设备(软硬件环境)…………………………………………1页
4设计内容…………………………………………………………………1页
4.1设计原理…………………………………………………………1页
4.2总体方案设计……………………………………………………2页
4.3程序设计…………………………………………………………2页
4.4程序的调试和运行结果…………………………………………9页
5总结………………………………………………………………………9页
参考文献……………………………………………………………………9页
单功能非线性流水线最佳调度程序
1.设计的目的
通过课程设计进一步了解计算机系统的设计及工作原理,进一步熟悉和掌握单功能非线性流水线最佳调度.利用所学知识完成相关程序的设计、运行和调试工作。
2.设计要求
要求设计一个处理程序,输入非线性流水线各个功能段使用的时间(拍),通过程序处理后输出正确的最佳调度方案。
3.主要仪器设备(软硬件环境)
PC机、windowsxp、VC++6.0
4.设计内容
4.1设计原理
非线性流水线无冲突调度的目标是找出平均允许启动距离最小的启动循环。
按照这样的启动循环向流水线的输入端输入任务,所有功能段在任何时刻都没有冲突,而且流水线的工作效率最高。
在进行这一工作时,首先要进行的就是画出无冲突调度方案的状态图,求得所有的调度方案,再找出平均允许启动距离最小的调度方案。
4.2总体方案设计
4.3程序设计
#include
#include
#include
#include
usingnamespacestd;
constintinf=100000;
intmat[20][20];
inttmp_ban[20];
intban[20];
intint_ban;
intpoint[105];
intedge[105][105];
intpn;
doubleopt_dis;
intdis[20];
intdn,pre;
boolhas[20];
structoptimal
{
intrn;
introad[20];
}op[20];
intopn;
voidsearch(intid)
{
inti,j,k;
for(i=0;iif(edge[id][i]{
if(has[i]==true&&i!
=pre)continue;
dis[dn++]=edge[id][i];
if(has[i]==true)
{
doubletmp=0;
for(j=0;jtmp+=dis[j];
tmp/=dn;
if(tmp<=opt_dis)
{
if(tmpop[opn].rn=dn;
for(j=0;jop[opn].road[j]=dis[j];
opn++;
}
}
else
{
has[i]=true;
search(i);
has[i]=false;
}
dn--;
}
}
intmain()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
intm,n,i,j,k,tmp;
while
(1)
{
//输入预约表
printf("请输入流水线预约表的时间和功能段大小m和n(m,n<15):
");
scanf("%d%d",&m,&n);
if(m==0)break;
printf("请在下表中输入0-空格或1-X:
\n");
printf("功能段\\时间");
for(i=1;i<=m;i++)
printf("%d",i);
printf("\n");
for(i=1;i<=n;i++)
{
printf("S%d",i);
for(j=1;j<=m;j++)
scanf("%d",&mat[i][j]);
}
printf("\n");
//计算禁止向量
memset(tmp_ban,0,sizeof(tmp_ban));
intmaxd=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(mat[i][j]==1)
for(k=j+1;k<=m;k++)
if(mat[i][k]==1)
{
//maxd=max(maxd,k-j);
if(maxd>(k-j))
maxd=maxd;
elsemaxd=k-j;
tmp_ban[k-j]=1;
}
//计算冲突向量
int_ban=0;
tmp=1;
for(i=1;i<=maxd;i++)
{
int_ban+=tmp*tmp_ban[i];
tmp*=2;
}
//由冲突向量构造有向状态图
pn=1;
point[0]=int_ban;
memset(edge,127,sizeof(edge));
intid;
for(i=0;i{
tmp=point[i];
for(j=1;j<=maxd;j++)
{
if(tmp%2==0)
{
tmp/=2;
point[pn]=tmp|point[0];
id=pn;
for(k=0;kif(point[k]==point[pn])
{
id=k;
break;
}
if(k==pn)pn++;
//edge[i][id]=min(j,edge[i][id]);
if(jedge[i][id]=j;
}
elsetmp/=2;
}
//初始冲突向量和所有的新形成的冲突向量之间用带箭头的线连接
edge[i][0]=maxd+1;
}
//寻找启动距离最小的等间隔调度
intmin_equ_dis=maxd+1;
for(i=0;iif(edge[i][i]min_equ_dis=edge[i][i];
printf("启动距离最小的等间隔调度为:
%d\n\n",min_equ_dis);
//寻找最佳调度,即最小平均间隔拍数
opt_dis=inf;
opn=0;
for(i=0;i{
memset(has,false,sizeof(has));
dn=0;
pre=i;
has[i]=true;
search(i);
}
printf("最优调度的平均启动距离为:
%lf\n",opt_dis);
for(i=0;i{
printf("方法%d:
",i+1);
for(j=0;jprintf("%d",op[i].road[j]);
printf("\n");
}
printf("\n");
}
system("pause");
return0;
}
4.4程序的调试和运行结果
5.总结
在设计的过程中,由于自己以前学习不太深入,不得不去复习需要用到的指针、结构体、有向图的邻接表等数据结构里的知识!
通过复习,与同学交流,逐步完成了此次课程的设计!
这次课程设计,使我对单功能非线性流水线有了一定的了解,为以后更好地学习与流水线相关的各方面知识奠定了一定的基础!
参考文献:
[1]郑芹非线性流水线的无冲突调度的分析.福建电脑.2005,03:
1-2。
[2]李学干等.计算机系统结构(第四版).西安西安电子科技大学出版社
[3]军师.非线性流水线计算机调度问题的研究.电脑开发与应用1995,04
[4]张代远.原理及其在非线性流水线调度中的应用.算机工程与应用2006,,16
[5].