dmlc--dgl
deb653f8dc
* executor api * draft executor interface * WIP * revert changes to avoid conflict with api change * core scheduling logic * WIP: build graph adj * incidence matrix for in edges * support incidence matrix for partial recv nodes * improve * build adjmat in scheduler * graph store * get degree bucketing schedule * connect to c++ degree bucketing * conceptual executor creation code * executor comments * fix * more executor comments * WIP: full send_and_recv schedule * most schedulers * simplify scheduler * executors * runtime * builtin function base class * adj indices and shape * completely refactor scheduler * rename and move bundled out to function.py * use_edge_feature in msg func * rewrite scheduler * node edge executor * connect with graph api * handle zero degree * misc * fix test cases * fix a good many bugs... * remove old scheduler * push and pull * fix send recv * c++ lint * fix batched send recv * hot fix for mxnet * typo * write back executor * apply node edge * clean up, doc string * fix as requested * refactor * fix * WIP * WIP * ir draft * more on ir * WIP: spmv schedule * WIP * recv schedule * refactor * WIP * snr degree bucketing * snr scheduler * move prog to graph.py; rename * unittest for send/recv * remove some legacy codes * WIP: update_all * pass test_basics * passed all current utests * more utests; fix mx utest * WIP: fixing zero deg initial value * some tests * fix 0deg problem * fix mx * fix mx * some notes * fix as requested
70 行
1.5 KiB
Python
70 行
1.5 KiB
Python
from __future__ import absolute_import
|
|
|
|
from .program import get_current_prog
|
|
|
|
class VarType(object):
|
|
# Types for symbolic objects (i.e, they might not be
|
|
# concretized before evaluation.
|
|
FEAT = 0
|
|
FEAT_DICT = 1
|
|
# Types for concrete objects (i.e, they must have values).
|
|
SPMAT = 2
|
|
IDX = 3
|
|
STR = 4
|
|
FUNC = 5
|
|
|
|
VAR_TYPE_NAME_MAP = [
|
|
'Feat',
|
|
'FeatDict',
|
|
'SpMat',
|
|
'Idx',
|
|
'Str',
|
|
'Func',
|
|
]
|
|
|
|
class Var(object):
|
|
"""Variable
|
|
name : str
|
|
type : int
|
|
data : any, default=None (not concretized)
|
|
"""
|
|
__slots__ = ['name', 'type', 'data']
|
|
def __init__(self, name, type, data):
|
|
self.name = name
|
|
self.type = type
|
|
self.data = data
|
|
|
|
def __str__(self):
|
|
if self.type == VarType.STR:
|
|
return '"%s"' % self.data
|
|
else:
|
|
return self.name
|
|
|
|
def typestr(self):
|
|
return VAR_TYPE_NAME_MAP[self.type]
|
|
|
|
def new(type, data=None, name=None):
|
|
if name is None:
|
|
cur_prog = get_current_prog()
|
|
name = '_z%d' % cur_prog.varcount
|
|
cur_prog.varcount += 1
|
|
return Var(name, type, data)
|
|
|
|
def FEAT(data=None, name=None):
|
|
return new(VarType.FEAT, data, name)
|
|
|
|
def FEAT_DICT(data=None, name=None):
|
|
return new(VarType.FEAT_DICT, data, name)
|
|
|
|
def SPMAT(data=None, name=None):
|
|
return new(VarType.SPMAT, data, name)
|
|
|
|
def IDX(data=None, name=None):
|
|
return new(VarType.IDX, data, name)
|
|
|
|
def STR(data=None, name=None):
|
|
return new(VarType.STR, data, name)
|
|
|
|
def FUNC(data=None, name=None):
|
|
return new(VarType.FUNC, data, name)
|