awslabs/gluonts

util.cumsum does not scale

Open

#1,258 opened on Jan 12, 2021

View on GitHub
 (1 comment) (0 reactions) (0 assignees)Python (3,888 stars) (753 forks)batch import
enhancementgood first issuemxnet

Description

Description

(A clear and concise description of what the feature is.)

Sample test

Code

# import ...
def test_cumsum_util(F, shape, method) -> None:
    x = F.ones(shape)
    F_str = 'mx.sym' if F == mx.sym else 'mx.nd'
    st = time.time()
    try:
        if method=="nd_cumsum":
            F.cumsum(x, axis=-1)
        elif method=="util_cumsum":
            cumsum(F, x)
        print(f"F={F_str}, shape={shape}, method={method}: {time.time()-st} sec")
    except:
        print(f"F={F_str}, shape={shape}, method={method}:  failed")

for shape in [ (1000, 210, 70, 10), (5000, 210, 70, 10)]:
    for F in [mx.sym, mx.nd]:
        for method in ["nd_cumsum", "util_cumsum"]:
            test_cumsum_util(F, shape, method)

Results

F=mx.sym, shape=(1000, 210, 70, 10), method=nd_cumsum: 0.00014519691467285156 sec F=mx.sym, shape=(1000, 210, 70, 10), method=util_cumsum: 0.0002918243408203125 sec F=mx.nd, shape=(1000, 210, 70, 10), method=nd_cumsum: 8.392333984375e-05 sec F=mx.nd, shape=(1000, 210, 70, 10), method=util_cumsum: 0.0002658367156982422 sec F=mx.sym, shape=(5000, 210, 70, 10), method=nd_cumsum: 3.886222839355469e-05 sec F=mx.sym, shape=(5000, 210, 70, 10), method=util_cumsum: 0.00016999244689941406 sec F=mx.nd, shape=(5000, 210, 70, 10), method=nd_cumsum: 3.814697265625e-05 sec F=mx.nd, shape=(5000, 210, 70, 10), method=util_cumsum: failed

References

Contributor guide