找回密码
 注册
查看: 4717|回复: 4

到底是使用node_to-host还是PRF_CSEND_REAL的疑问

[复制链接]
发表于 2011-6-10 10:36:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
大家好!
看了官方udf manual,里面有段话:
"High-level communication macros of the form node to host... and host to node...
are typically used when you want to send data from the host to all of the compute nodes,
or from node-0 to the host. You cannot, however, use these high-level macros when you
need to pass data between compute nodes, or pass data from all of the compute nodes to
compute node-0. In these cases, you can use special message passing macros."

同一个manual里,7.8有个具体的例子: Global Summation of Pressure on a Face Zone and its Area Average Computation. 代码在下面, 我看了以后,觉得这个程序里面是有必要在node-0和所有的compute nodes之间传递数据的,所以不能用node_to_host,可是例子却用了,这和上面的那段话是抵触的。我不明白这是为何。 到底应该按照哪种方式?

PRF_CRECV_REAL(from, buffer, nelem, tag)?
Please help, thanks a million!
发表于 2011-6-10 13:47:14 | 显示全部楼层
你说的很对,可以不用host_to_node和node_to_host的宏,但是你说的“觉得这个程序里面是有必要在node-0和所有的compute nodes之间传递数据的,所以不能用node_to_host“,就很没逻辑。应该是“可以不用node_to_host,不是不能用node_to_host”。

一般想将node-0数据传给其它node,反而node_to_host用的最多。因为,host可以作为node-0和其它node之间数据通信的跳板。先用node_to_host,将node-0的数据传给host,然后host_to_node,将host的数据传给所有node。
由于node_to_host和host_to_node的强大功能,无需放在#if RP_NODE #if RP_HOST之类宏保护作用范围内,会自动辨识编译的node还是host。所以用起来很简单。

如果用PRF_CSEND和PRF_CRECV那要麻烦的多。必须放在#if RP_NODE #if RP_HOST之类宏保护作用范围内,还要判断是否0节点,手动在node-0地方用PRF_CSEND,在其它节点接受的地方用PRF_CRECV。

[ 本帖最后由 gearboy78 于 2011-6-10 05:52 编辑 ]
 楼主| 发表于 2011-6-10 21:30:11 | 显示全部楼层
我看明白你的意思了,很有启发。
如果我理解正确的话,host是直接可以向所有的node(也包括node-0)直接发送数据的了?还是说不管是收发都要先经过node-0?
而所有的node则是必须先把数据发送到node-0,node-0再和host进行传送,这个我是清楚的。
多谢哈!

原帖由 gearboy78 于 2011-6-10 05:47 发表
你说的很对,可以不用host_to_node和node_to_host的宏,但是你说的“觉得这个程序里面是有必要在node-0和所有的compute nodes之间传递数据的,所以不能用node_to_host“,就很没逻辑。应该是“可以不用node_to_host, ...
 楼主| 发表于 2011-6-11 04:52:16 | 显示全部楼层
我的一个疑问是:host_to_node 是指host先把数据传给node-0,node-0再传给所有nodes,可是node_to_host却只是node-0传给host啊,而且是单方向的传递: node-0 -> host。
你和我说的是,可以先写node_to_host,那么node-0的数据传给了host,然后再写host_to_node,这样host的信息再传给node-0,之后就传给了所有的nodes,可是这样做的话,node-0的数据传给host又传回来到自己这里,再传到其他nodes,这实现了node-0 ->nodes的沟通,可是如果是nodes->node-0的呢?这该如何?我看不出来如何仅仅用node_to_host和host_to_node就可以实现nodes->node-0的传递啊...
无独有偶,官方UDF manual里面,7.8 parallel udf里面,就只用了node_to_host和host_to_node,其他什么PRF_CSEND, PRF_CRECV都没用,就感觉他们可以声称已经实现了nodes和host之间的互通,我就搞不清楚,他们到底是如何实现nodes->node-0的,请解释下好么?很疑惑ing
谢谢!

原帖由 gearboy78 于 2011-6-10 05:47 发表
你说的很对,可以不用host_to_node和node_to_host的宏,但是你说的“觉得这个程序里面是有必要在node-0和所有的compute nodes之间传递数据的,所以不能用node_to_host“,就很没逻辑。应该是“可以不用node_to_host, ...
发表于 2011-7-12 17:54:58 | 显示全部楼层
只有node0能跟host和其他node交换吧

原帖由 aleisia 于 2011-6-10 13:30 发表
我看明白你的意思了,很有启发。
如果我理解正确的话,host是直接可以向所有的node(也包括node-0)直接发送数据的了?还是说不管是收发都要先经过node-0?
而所有的node则是必须先把数据发送到node-0,node-0再和ho ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表