社区
英特尔边缘计算技术
帖子详情
关于MPI里面的SEND函数
shawn102
2007-05-30 05:34:01
请问SEND函数对信息量大小有没有要求,会不会有个上限?
我测试的一个矩阵相乘的MPI程序(cannon),小于500维用4个进程顺利完成,但超过500维程序就会象死掉一样,不知道是不是这个原因,大家有碰到过嘛?
...全文
1392
12
打赏
收藏
关于MPI里面的SEND函数
请问SEND函数对信息量大小有没有要求,会不会有个上限? 我测试的一个矩阵相乘的MPI程序(cannon),小于500维用4个进程顺利完成,但超过500维程序就会象死掉一样,不知道是不是这个原因,大家有碰到过嘛?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shawn102
2007-06-11
打赏
举报
回复
默认的缓冲区大小可以在 mpich/mpid/ch_p4/p4/;ob/p4_sock_util.h中的(SOCK_BUFF_SIZE)中改写环境变量P4_SOCKBUFSIZE,或者也可以通过命令行, -p4sctrl bufsize=64。
我这边的环境是mpich/gnu/lib.但里面也没有你说的那个p4_sock_util.h头文件,另该程序是用了经典的Cannon算法来做矩阵相乘,是附录在陈国良的<并行算法实践>里的,不知道您有没有看过,希望能和您多进行交流,谢谢
shawn102
2007-06-08
打赏
举报
回复
回france8,我MPICH和MPICH2都试过,都出现一样的情形,请问怎么设置缓存区大小?
另外我试过用MPI_Isend 和 MPI_Irecv了,然后用MPI_WAIT来判断,但还是一样,只要超过500维就死掉,而且不提示,非要手动CTRL+C,郁闷啊
DrPerformance
2007-06-08
打赏
举报
回复
是 mpich/mpid/ch_p4/p4/lib/p4_sock_util.h
DrPerformance
2007-06-08
打赏
举报
回复
另外你的程序算法是不是可以再优化优化,看看是不是可以避免这么大范围地交换数据。
我们过去做几十万阶矩阵运算,也没有遇到过消息缓冲不够的情况。
DrPerformance
2007-06-08
打赏
举报
回复
对于Lam-mpi默认的buffer size是64k。对于ch_p4,MPICH默认的socket buffer size是16k。
默认的缓冲区大小可以在 mpich/mpid/ch_p4/p4/;ob/p4_sock_util.h中的(SOCK_BUFF_SIZE)中改写环境变量P4_SOCKBUFSIZE,或者也可以通过命令行, -p4sctrl bufsize=64。
更详细的选项和细节可以参看MPICH User'manual的 socket read/write operations章节。
DrPerformance
2007-06-07
打赏
举报
回复
消息缓冲区是MPI致命的缺陷,缓冲区大小应该是可以设定的,要看你用的哪个MPI实现,MPICH, MPICH2 还是Lam-mpi?
MPI_Isend 和 MPI_Irecv都是非锁定通信,也就是不只要自己发出去(或者接收)就好了,不管是否进入缓冲区,也不管对象是否收到。通常有些语句不会出现歧义的,就可以很好用它。但是会造成歧义的最好还是用通常的MPI_send,MPI_recv。
详细可见黄铠和徐志伟老师的著作《并行体系结构》。
shawn102
2007-06-07
打赏
举报
回复
回france8,这个信息缓存能自己调整大小吗?另你说的MPI_Irecv是一种阻塞的发送方式,怎么能确定发送完成呢?谢谢你的帮助
shawn102
2007-06-07
打赏
举报
回复
回INTELSUPPORT,你说的mpi_send有上限通过环境变量来调是什么意思?是指P4_GLOBALMEMSIZE吗?请不吝赐教。
DrPerformance
2007-06-06
打赏
举报
回复
显然的问题是MPI是依赖消息缓存的,如果消息量大于缓存接收能力就会出问题,你可以把接收语句变成MPI_Irecv试一试,非锁定的接收。发送也可以用MPI_Isend。当然这样带来的后果就有可能造成内存数据不一致,你最好检查依赖关系。
IntelSupport
2007-06-05
打赏
举报
回复
如果 mpi_send 有默认上限, 应该可以用环境编量来调节上限。
flyingdog
2007-05-31
打赏
举报
回复
似乎没有限制。我碰到过的1M以上的数据量没有问题。
要么你先查查程序是停在什么地方了。
shawn102
2007-05-31
打赏
举报
回复
*函数名:main_shift
*功能:分块矩阵左移和上移,并计算分块c
*/
void main_shift()
{
int i,j,k,l;
for(l=0; l<sp; l++)
{
/*矩阵块相乘,c+=a*b */
for(i=0; i<dl; i++)
for(j=0; j<dl; j++)
for(k=0; k<dl; k++)
c[i*dl+j] += a[i*dl+k]*b[k*dl+j];
/* 将分块a左移1位 */
MPI_Send(a , dl2, MPI_FLOAT, get_index(my_row, my_col-1, sp), 1, MPI_COMM_WORLD);
MPI_Recv(a , dl2, MPI_FLOAT, get_index(my_row, my_col+1, sp), 1, MPI_COMM_WORLD, &status);
/* 将分块b上移1位 */
MPI_Send(b , dl2, MPI_FLOAT, get_index(my_row-1, my_col, sp), 1, MPI_COMM_WORLD);
MPI_Recv(b , dl2, MPI_FLOAT, get_index(my_row+1, my_col, sp), 1, MPI_COMM_WORLD, &status);
}
}
停在这个函数上,不知道哪里出错了,但我把进程数-NP从4进程改到9进程,程序又能跑了,但到了700维又不行...
MPI
时间
函数
的测试
并行计算,
MPI
函数
的使用,附测试部分源代码
MPI
函数
的参考手册
本附录给出主要
MPI
函数
的参考手册。为了节省篇幅,这里仅列出
MPI
函数
的C接口,Fortran 接口子程序的参数与C 接口
函数
的参数完全类似。除
MPI
_Wtime和
MPI
_Wtick外,Fortran接口子程序比C接口
函数
在最后多出一个整型参数,用于返回错误码。 所列出的
MPI
函数
和变量是按照它们的类别组织的。为方便查找特定的
函数
,附3.1 中给出了一个
MPI
的
函数
、变量名称按字母顺序排列的索引。 本附录的内容主要参考文献[8, 9] 以及
MPI
CH的部分在线手册编写而成
mpi
通用
函数
介绍
mpi
简单的例子介绍,适合初学者熟悉
mpi
函数
Mpi
Send
.tar.gz_
mpi
send
_show
This is a program that show how to use
send
receive scatter gather
MPI
.rar_
MPI
_
MPI
函数
_
mpi
ch_
mpi
ch parallel
MPI
并行编程指南,主要介绍
MPI
的基本知识以及
MPI
CH
函数
库。
英特尔边缘计算技术
568
社区成员
7,024
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章