欢迎来到天天文库
浏览记录
ID:30821800
大小:82.50 KB
页数:7页
时间:2019-01-04
《并行处理课件》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、2.14点对点通信UJ木节借助图形/图象变换中的实例程序,引入点对点通信机制实现并行。例2.14.1在分辨率为SIZE*SIZE(SIZE为2的幕)的黑白带灰度的显示屏幕上:左上角为坐标原点,X轴向下,Y轴向右;0为白,1为黑。用NUMNODES(亦为2的幕,且2、台处理机*/for(I二0;I〈SIZE**2;I++){recv(oldrow,oldcol,newvalue,Pany);/*消息接收语句2,从处理机接收变换后的新值*/temp_map[oldrow][oldcol]=newvalue;}/*开辟临时存储,暂存变换后的值*/for(I=O;T3、;oldrow<(row+SIZE/1VUMNODES);oldrow++)for(oldcol二0;oldcol〈SIZE;oldcol++){newrow二o1drowm16*16;newcol二oldcolml6*16;/*m是整除运算符*/newvalue=map[newrow][newcol];send(oldrow,oldcol,newvalue,Pmaster);}/*消息发送语句2,把一个象素点的变换结果返回主进程*/程序中包含两个消息发送语句和两个消息接收语句,它们配成两对。第一对,主进程里的消息发送语句1“sen4、d(rov,Pi)”,把一个行号row发送給第i个子进程(或称“从进程”)pio通过循环语句:for(1-0,row-0:KNUMNODES;I++,tov+二SIZE/NUMNODES)从0号进程起,一直到NUMNODES-1号进程止,NUMNODES个进程无一遗漏。而交給它们的row并不相同:每当i上调1,row皆要跳过SIZE/NUMNODES,实为分摊給一个进程的工作量。结合子进程里的循环语句:for(oldrow=row;oldrow<(row+SIZE/NUMNODES);oldrow++)我们得知:屏幕被横向均分成5、NUMNODES份,每个进程承担SIZE/NUMNODES个连行构成的一等份。而子进程里的消息接收语句1arecv(row,Pmaster)",则从主进程Pmaster那里获取一个行号作为起始行,计算它包含SIZE/NUMNODES个连行的那一份。第二对,子进程里的消息发送语句2“send(oldrow,oldcol,newvalue,Pmaster);}”,把一个由平面直角坐标〈oldrow,oldcol>标记的象素点,连带计算出的新图像值newvalue,向主进程Pmaster报告。通过双重循环语句:for(oldrow=row6、;oldrow<(row+STZE/NUMNODES);oldrow++)for(oldco1=0;oldcol,无论其原来的图像值如何,都向它所在的小正方形左上角看齐7、,即以左上角〈oldrowml6*16,oldcolml6*16>原来的图像值map[oldrowml6*16][oldcolml6*16]作为它的新值newvalueo此即所谓的"马赛克”效应。程序中的临时存储temp_map,用来逐点收集新的图像值;待全屏新值到齐,集屮地向显示缓冲区转移,』免变换过程的“不堪入目”。设map的初值:map[i][j]二(i+j)/(2*(SIZE-l));0Wi,j〈SIZE。于是全白点0与全黑点1,原图各拥有一个。变换后:全白点,16*16-1个;全黑点消失。@例2.14.2在分辨率为SIZE8、*SIZE(SIZE为2的幕)的显示屏幕上,用NUMNODES(亦为2的幕,且o主进程:for(I二O;I
2、台处理机*/for(I二0;I〈SIZE**2;I++){recv(oldrow,oldcol,newvalue,Pany);/*消息接收语句2,从处理机接收变换后的新值*/temp_map[oldrow][oldcol]=newvalue;}/*开辟临时存储,暂存变换后的值*/for(I=O;T3、;oldrow<(row+SIZE/1VUMNODES);oldrow++)for(oldcol二0;oldcol〈SIZE;oldcol++){newrow二o1drowm16*16;newcol二oldcolml6*16;/*m是整除运算符*/newvalue=map[newrow][newcol];send(oldrow,oldcol,newvalue,Pmaster);}/*消息发送语句2,把一个象素点的变换结果返回主进程*/程序中包含两个消息发送语句和两个消息接收语句,它们配成两对。第一对,主进程里的消息发送语句1“sen4、d(rov,Pi)”,把一个行号row发送給第i个子进程(或称“从进程”)pio通过循环语句:for(1-0,row-0:KNUMNODES;I++,tov+二SIZE/NUMNODES)从0号进程起,一直到NUMNODES-1号进程止,NUMNODES个进程无一遗漏。而交給它们的row并不相同:每当i上调1,row皆要跳过SIZE/NUMNODES,实为分摊給一个进程的工作量。结合子进程里的循环语句:for(oldrow=row;oldrow<(row+SIZE/NUMNODES);oldrow++)我们得知:屏幕被横向均分成5、NUMNODES份,每个进程承担SIZE/NUMNODES个连行构成的一等份。而子进程里的消息接收语句1arecv(row,Pmaster)",则从主进程Pmaster那里获取一个行号作为起始行,计算它包含SIZE/NUMNODES个连行的那一份。第二对,子进程里的消息发送语句2“send(oldrow,oldcol,newvalue,Pmaster);}”,把一个由平面直角坐标〈oldrow,oldcol>标记的象素点,连带计算出的新图像值newvalue,向主进程Pmaster报告。通过双重循环语句:for(oldrow=row6、;oldrow<(row+STZE/NUMNODES);oldrow++)for(oldco1=0;oldcol,无论其原来的图像值如何,都向它所在的小正方形左上角看齐7、,即以左上角〈oldrowml6*16,oldcolml6*16>原来的图像值map[oldrowml6*16][oldcolml6*16]作为它的新值newvalueo此即所谓的"马赛克”效应。程序中的临时存储temp_map,用来逐点收集新的图像值;待全屏新值到齐,集屮地向显示缓冲区转移,』免变换过程的“不堪入目”。设map的初值:map[i][j]二(i+j)/(2*(SIZE-l));0Wi,j〈SIZE。于是全白点0与全黑点1,原图各拥有一个。变换后:全白点,16*16-1个;全黑点消失。@例2.14.2在分辨率为SIZE8、*SIZE(SIZE为2的幕)的显示屏幕上,用NUMNODES(亦为2的幕,且o主进程:for(I二O;I
3、;oldrow<(row+SIZE/1VUMNODES);oldrow++)for(oldcol二0;oldcol〈SIZE;oldcol++){newrow二o1drowm16*16;newcol二oldcolml6*16;/*m是整除运算符*/newvalue=map[newrow][newcol];send(oldrow,oldcol,newvalue,Pmaster);}/*消息发送语句2,把一个象素点的变换结果返回主进程*/程序中包含两个消息发送语句和两个消息接收语句,它们配成两对。第一对,主进程里的消息发送语句1“sen
4、d(rov,Pi)”,把一个行号row发送給第i个子进程(或称“从进程”)pio通过循环语句:for(1-0,row-0:KNUMNODES;I++,tov+二SIZE/NUMNODES)从0号进程起,一直到NUMNODES-1号进程止,NUMNODES个进程无一遗漏。而交給它们的row并不相同:每当i上调1,row皆要跳过SIZE/NUMNODES,实为分摊給一个进程的工作量。结合子进程里的循环语句:for(oldrow=row;oldrow<(row+SIZE/NUMNODES);oldrow++)我们得知:屏幕被横向均分成
5、NUMNODES份,每个进程承担SIZE/NUMNODES个连行构成的一等份。而子进程里的消息接收语句1arecv(row,Pmaster)",则从主进程Pmaster那里获取一个行号作为起始行,计算它包含SIZE/NUMNODES个连行的那一份。第二对,子进程里的消息发送语句2“send(oldrow,oldcol,newvalue,Pmaster);}”,把一个由平面直角坐标〈oldrow,oldcol>标记的象素点,连带计算出的新图像值newvalue,向主进程Pmaster报告。通过双重循环语句:for(oldrow=row
6、;oldrow<(row+STZE/NUMNODES);oldrow++)for(oldco1=0;oldcol,无论其原来的图像值如何,都向它所在的小正方形左上角看齐
7、,即以左上角〈oldrowml6*16,oldcolml6*16>原来的图像值map[oldrowml6*16][oldcolml6*16]作为它的新值newvalueo此即所谓的"马赛克”效应。程序中的临时存储temp_map,用来逐点收集新的图像值;待全屏新值到齐,集屮地向显示缓冲区转移,』免变换过程的“不堪入目”。设map的初值:map[i][j]二(i+j)/(2*(SIZE-l));0Wi,j〈SIZE。于是全白点0与全黑点1,原图各拥有一个。变换后:全白点,16*16-1个;全黑点消失。@例2.14.2在分辨率为SIZE
8、*SIZE(SIZE为2的幕)的显示屏幕上,用NUMNODES(亦为2的幕,且o主进程:for(I二O;I
此文档下载收益归作者所有