'''
Send messages through all edges >>> update all nodes.
DGLGraph.update_all(message_func='default', reduce_func='default', apply_node_func='default') message_func --message function on the edges
reduce_func--reduce function on the node
apply_node_func:apply function on the nodes
''' '''
DGLGraph.send(edges='__ALL__', message_func='default')
edges:
int:one edge using edge id
pair of int :one edge using its endpoints
int iterable/tensor :multiple edges using edge id
pair of int iterable/pair of tensor :multiple edges using their endpoints returns messages on the edges and can be later fetched in the destination node’s mailbox ''' '''
DGLGraph.recv(v='__ALL__', reduce_func='default', apply_node_func='default', inplace=False) '''
import warnings
warnings.filterwarnings("ignore")
import torch as th
import dgl
g=dgl.DGLGraph() g.add_nodes(3)
g.ndata["x"]=th.tensor([[5.],[6.],[7.]])
g.add_edges([0,1],[1,2])
src=th.tensor([0])
dst=th.tensor([2])
g.add_edges(src,dst)
print("ndata",g.ndata["x"]) def send_source(edges): print("src",edges.src["x"].shape,edges.src["x"]) #源节点特征 ([2, 1])
print("dst",edges.dst["x"].shape,edges.dst["x"]) #目标节点特征 ([2, 1]) return {"m":edges.src["x"]} g.register_message_func(send_source) '''
ndata tensor([[5.],
[6.],
[7.]])
src torch.Size([3, 1]) tensor([[5.],
[6.],
[5.]])
dst torch.Size([3, 1]) tensor([[6.],
[7.],
[7.]]) ''' def simple_reduce(nodes):
print("data_nodes",nodes.data["x"]) #节点特征
print("mailbox",nodes.mailbox["m"].shape,nodes.mailbox["m"]) #mailbox包含沿第二维堆叠的所有传入message特征 [2, 1, 1]
print("sum",nodes.mailbox["m"].sum(1)) return {"x":nodes.mailbox["m"].sum(1)} #按行求和 g.register_reduce_func(simple_reduce) g.send(g.edges())
g.recv(g.nodes())
print("ndata",g.ndata["x"]) ''' data_nodes tensor([[6.]])
mailbox torch.Size([1, 1, 1]) tensor([[[5.]]])
sum tensor([[5.]])
data_nodes tensor([[7.]])
mailbox torch.Size([1, 2, 1]) tensor([[[6.],
[5.]]])
sum tensor([[11.]])
ndata tensor([[ 0.],
[ 5.],
[11.]]) '''

  

update_all_fun(send recv)的更多相关文章

  1. easyHOOK socket send recv

    代码比较简单,就不做注释了.  包含一个sockethookinject.DLL 和sockethook.exe 有一点不清楚, SetExclusiveACL可以添加当前线程的hook, 但是eas ...

  2. 套接字I/O函数write/read writev/readv send/recv sendto/recvfrom sendmsg/recvmsg

    函数原型 read/write系原型 #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); #include ...

  3. send+recv注意事项

    [TOC] send 函数原型 ssize_t send( SOCKET s, const char *buf, size_t len, int flags ) 注意事项 待发送数据长度data_le ...

  4. linux socket下send()&recv()调用

    1.send 函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP ...

  5. 一文彻底搞通TCP之send & recv原理

    接触过网络开发的人,大抵都知道,上层应用使用send函数发送数据,使用recv来接收数据,而send和recv的实现原理又是怎样的呢? 在前面的几篇文章中,我们有提过,TCP是个可靠的.全双工协议.其 ...

  6. UNIX网络编程-recv、send、read、write之间的联系与区别

    1.read ----------------------------------------------------------------------- #include <unistd.h ...

  7. VC++ 用setsockopt()来控制recv()与send()的超时

    在send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,而设置收发超时控制: 以下是来自于网上一篇文章中的摘录,它是这样写的: ;//1秒, //设置发送超时 setsockopt ...

  8. setsockopt()用法(参数详细说明) recv、send的超时处理

    源于recv send 阻塞和非阻塞 int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen); s(套 ...

  9. socket函数send和recv函数

    转自:http://www.cppblog.com/aaxron/archive/2012/04/27/172891.html 在发送端,一次发送4092个字节,在接收端,一次接收4092个字节,但是 ...

随机推荐

  1. webpack.config.js文件

    与 package.json 配合使用 var path=require("path");var OpenBrowserPlugin = require('open-browser ...

  2. handsonetable+vue 表格在线编辑

    <template> <div> <div id="example-container" class="wrapper"> ...

  3. winform带你玩转rabbitMQ

    http://www.cnblogs.com/dubing/p/4017613.html

  4. 中国MOOC_面向对象程序设计——Java语言_期末考试编程题_1细胞自动机

    期末考试编程题 返回   这是期末考试的编程题 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成 ...

  5. lambda一些查询语句

    <!--得分数据结构-->1 <Score> <studentid>1</studentid> <courseid>1</course ...

  6. linux中从一台机器复制文件或目录到另一台机器上linux机器上

    本机IP:x.x.x.1需要拷贝的机器IP:x.x.x.2用户名:ssh_user 目的:将本机中source_path路径下的文件或目录拷贝到另一台机器的destination_path/路径下 复 ...

  7. C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别

    字符数组的长度计算:必须以终止符’\0'作为边界,但对字符数组赋值时,有两种方式: 1:定义时用字符初始化 (1)char chs[7] = {'a', 'c', '0', 'z', '3','d'} ...

  8. jenkins shell 取当前时间

    now=`date +%Y%m%d%H%M%S` echo $now newfilename=abc_${now}.warfor i in `ls *.jmx`:dojmeter -n -t $i r ...

  9. android app开发中的常用组件

    1 Activity 1.1 Activity的启动 第一,android manifest中指定的主activity,点击app的icon启动进入. 第二,使用intent,在另外一个activit ...

  10. 安装配置php及fastadmin

    FastAdmin教程之准备运行环境   一.Node.js http://nodejs.cn/download/ https://npm.taobao.org/mirrors/node/v8.4.0 ...