关于图计算中中push和pull模式代码

在graph.foreachEdges函数的调用中,最后一个参数actives为活跃节点。然而在第一次调用foreachEdges时,图为稠密图,使用pull模式。但为何pullSignal是对所有非活跃点执行?
我自己手动创建了一个有18个节点的有向图,设置了5个起始节点为活跃点,但是通过打印来看,pullSignal里面只有对13个非活跃点的处理,活跃点一次也没有执行。相对应的pullSlot也是对13个非活跃点的处理,活跃点也没有执行。

用的啥?我在内核里搜这块的代码,好像是图计算那边的代码?

是的,对于每条边进行遍历,调用foreachEdges函数,actives是一个VertexBitmap,其中有5个活跃节点为1,13个非活跃节点为0。
我给pushSignal,pushSlot,pullSignal和pullSlot都加了打印,发现第一次进入的为pullSignal。且只对13个非活跃节点有处理,对5个非活跃没有处理。
我困惑的是pullSignal为啥是对13个非活跃节点进行处理?不应该是5个活跃节点吗?
对了,我把只有出边没有入边的节点设为了活跃节点,其他节点都为非活跃。
为了方便调试我把.conf文件中的WNUM和WCORES都设置成了1。

其实我想问。。你用的啥工具,这样我好找对应的人来看这个问题…

我是用的clion看代码,使用悦数图计算自定义图算法,然后嵌入到悦数图探索里面。
从你们的官方文档来看,对pull和push这一块讲的很少。我看了gemini的论文,了解了原理之后写好了代码。但是调试的时候发现和我理解的有出入。不知道是我理解错了还是使用方法不对。

你们给了两个例子Wcc和GetNeighbors,这两个算法比较简单,我看懂了。但是我自己写完了,调用的时候出现了我开头说的问题。

@普罗旺修斯 如你所说,pull是针对所有点的,push是根据活跃点判断的。确实是这样的

也就是说,调用foreachEdges时,根据活跃点的关联边占全图边的比例来算的。如果是pull模式,则会针对所有点;如果是push模式,则只针对活跃点,对吗?
如果是这样的话,那我标题描述的问题,它第一次执行foreachEdges函数进入的是pull模式,但只处理了非活跃点。这是怎么回事呢?

是不是因为我把只有出边没有入边的点设置为了初始活跃点,而这样的点因为没有入边,无法执行pull操作,所以pullSignal函数把这些点都跳过了呢?

你自己打日志调下。

每次foreachEdges执行的时候,都会计算是否是稠密图。
计算方式是: 活跃点关联的出边/全图边数量 >= 0.05 则为稠密图

稠密图只会执行pull相关方法,push的不执行。

请问可以强制只使用push模式吗?或者那个0.05的threshold可以调整。