Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
f3d0062
fixed indirect access
pengjiang-hpc Sep 1, 2023
8dcbe91
merge KGE
pengjiang-hpc Sep 1, 2023
54bf57b
merge KGE
pengjiang-hpc Sep 5, 2023
3203dfe
Yihua's Update
Sep 5, 2023
9c719c9
Merge pull request #1 from yihuawei/dev
yihuawei Sep 5, 2023
660934d
update
Sep 8, 2023
1cab710
Merge pull request #2 from yihuawei/dev
pengjiang-hpc Sep 8, 2023
75ae9bc
merge KGE
pengjiang-hpc Sep 8, 2023
9ed4da9
Merge remote-tracking branch 'origin/dev' into dev
pengjiang-hpc Sep 8, 2023
90a779f
fixed apply
pengjiang-hpc Sep 8, 2023
fe1f66a
fixed apply
pengjiang-hpc Sep 8, 2023
659a2b0
add aggr
pengjiang-hpc Sep 12, 2023
71cd927
Merge pull request #4 from pengjiang-hpc/dev
pengjiang-hpc Sep 12, 2023
9416b0a
merge index for slices
pengjiang-hpc Sep 13, 2023
2404aae
.
pengjiang-hpc Sep 19, 2023
e70eaff
reverse pointer from IR to ASTNode
pengjiang-hpc Oct 9, 2023
b9c3114
Removing all files in .gitignore
pengjiang-hpc Oct 9, 2023
bf2dd60
Removing all files in .gitignore
pengjiang-hpc Oct 9, 2023
43a4526
use a valid flag for astnode
pengjiang-hpc Oct 9, 2023
38ee163
check valid for all astnodes
pengjiang-hpc Oct 11, 2023
49fbe46
remove ind_arr
pengjiang-hpc Oct 12, 2023
a294abc
fix a bug for range indexing
pengjiang-hpc Oct 12, 2023
561d975
update
Oct 13, 2023
05af026
update kge model for gpu
hulihan-start Oct 16, 2023
9353a9b
update
Oct 20, 2023
efd9557
updatye
Oct 23, 2023
2dc27f9
update
Oct 23, 2023
cadca47
update
Oct 23, 2023
38615c8
Merge branch 'HPC-Research-Lab:dev' into dev
yihuawei Oct 23, 2023
b46c147
update
Oct 23, 2023
1291ff9
Merge pull request #8 from yihuawei/dev
yihuawei Oct 24, 2023
67a2b64
kge cuke update
hulihan-start Oct 25, 2023
4ea80cf
change apply, reduce, aggr in core
pengjiang-hpc Oct 27, 2023
fe7c356
change apply, reduce, aggr in core
pengjiang-hpc Oct 27, 2023
b11bb21
add output_order and compute_block
pengjiang-hpc Oct 30, 2023
516cbfb
add output_order and input_orders
pengjiang-hpc Oct 31, 2023
8546ef2
fixed a bug in input_orders in einsum
pengjiang-hpc Oct 31, 2023
40dd03e
prepare for fusion
pengjiang-hpc Nov 1, 2023
b261bc5
working on scan
pengjiang-hpc Nov 2, 2023
faf4f21
added scan
pengjiang-hpc Nov 5, 2023
78b3f22
added scan
pengjiang-hpc Nov 6, 2023
8207bce
apply with output_offset
pengjiang-hpc Nov 6, 2023
52937a6
apply with output_offset
pengjiang-hpc Nov 6, 2023
73898cd
add Code IR
pengjiang-hpc Nov 8, 2023
aaac496
add Code IR
pengjiang-hpc Nov 10, 2023
bd8c7aa
.
pengjiang-hpc Nov 10, 2023
45d84a3
a version with explicit scan
pengjiang-hpc Nov 10, 2023
8c31bd1
removed scan
pengjiang-hpc Nov 10, 2023
a6a9cb4
.
pengjiang-hpc Nov 11, 2023
2a094fe
elementwise negative slicing v1
pengjiang-hpc Nov 11, 2023
f2ad406
need work on reduce, aggr
pengjiang-hpc Nov 11, 2023
b85e659
negative slicing and slicing in apply
pengjiang-hpc Nov 15, 2023
03ff79d
gen pytorch code
pengjiang-hpc Nov 15, 2023
9ef2f1b
refactor kge
pengjiang-hpc Nov 16, 2023
733b3b9
clean up
pengjiang-hpc Nov 21, 2023
bed7a69
implement binary search
Nov 23, 2023
e013924
correct binary search
Nov 26, 2023
3a0a7fe
update
Nov 28, 2023
b3d4b95
update
Nov 28, 2023
0a91488
Merge pull request #9 from yihuawei/dev
yihuawei Nov 28, 2023
11e5810
update
Nov 28, 2023
8475440
Merge pull request #10 from yihuawei/dev
yihuawei Nov 28, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Binary file added .DS_Store
Binary file not shown.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
.idea/*
.vscode/*
*/__pycache__/*
cmake-build-debug/*
__pycache__/*
cmake-build-debug/*
run/.tmp/*
File renamed without changes.
File renamed without changes.
29 changes: 29 additions & 0 deletions apps/compression/asg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from core.asg import *
from apps import compression


def truncate(data, nbits):
return Encoder('truncate', data, nbits)

class Encoder(Tensor):
def __init__(self, op_type, *operators):
self.op_type = op_type
self.operators = []
for opr in operators:
self.operators.append(opr)
if isinstance(opr, ASTNode):
opr.ref_by.append(self)

if type(self.operators[1]) == int:
self.operators[1] = Const(self.operators[1], 'int')
assert len(self.operators[0].ref_size) == 1
ref_size = [self.operators[1]]
fix_size = []

name = f'{op_type}_' + '_'.join([op.name if hasattr(op, 'name') else '' for op in self.operators])
super().__init__(name, ref_size, 'int', fix_size)

def _gen_ir(self):
return compression.asg2ir.gen_ir(self)


35 changes: 35 additions & 0 deletions apps/compression/asg2ir.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import helpers
from core.asg import *
from core.ir import *
from apps.compression.asg import *


def gen_ir(node):
assert isinstance(node, ASTNode)
if node.eval or len(node.decl) > 0 or (type(node) == TensorOp and len(node.compute) > 0):
return node

if type(node) == Encoder:
if node.op_type == 'truncate':
node.operators[0]._gen_ir()
node.operators[1]._gen_ir()
size = helpers.get_ir_of_size(node._size())
node.eval = Ndarray(node.dtype, size)
node.decl.append(Decl(node.eval))
src = '''unsigned m = 0x0000FFFF;
for (int j = 16; j != 0; j = j >> 1, m = m ^ (m << j)) {
for (int k = 0; k < 32; k = (k + j + 1) & ~j) {
unsigned t = (DATA[k] ^ (DATA[k+j] >> j)) & m;
DATA[k] = DATA[k] ^ t;
DATA[k+j] = DATA[k+j] ^ (t << j);
}
}'''
node.compute = [Code(src, {'DATA': node.operators[0].eval})]

output_loop = Loop(0, node.operators[1].eval, 1, [])
assign = Assignment(Indexing(node.eval, output_loop.iterate), Indexing(node.operators[0].eval, Expr(Expr(Literal(32, 'int'), node.operators[1].eval, '-'), output_loop.iterate, '+')))
output_loop.body.append(assign)
node.compute.append(output_loop)


return node
80 changes: 80 additions & 0 deletions apps/compression/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
from core.asg import *
import codegen
import torch
import run


def compression():
nblocks = 50
input = Tensor('input', (nblocks, 32), dtype='float')
quant_res = (input * 1000).round()
lorenzo_res = quant_res[:][0:32] - quant_res[:][-1:31]
encode_nbits = lorenzo_res.abs().max(axis=1).nbits()
ofs = encode_nbits.prefix_sum(inclusive=False)
compressed_res = apply(lambda x, y: truncate(x, y), (lorenzo_res, encode_nbits), out_ofs=ofs)
res = compressed_res
code = codegen.cpu.print_cpp(res._gen_ir())

print(code)

code = '#include "../../compression/util.h"\n' + code

data = torch.rand(nblocks, 32)

d = run.cpu.compile_and_run(code, data)
# d = run.cpu.run(data)
print(d)


def invert_lorenzo():
nblocks = 50
input = Tensor('input', (nblocks, 32), dtype='float')
quant_res = (input * 1000).round()
lorenzo_res = quant_res[:][0:32] - quant_res[:][-1:31]

recover_res = Tensor('recovered', input._size(), dtype='float')
recover_res = setval(recover_res, recover_res[:][-1:31] + lorenzo_res[:][0:32])
# recover_res = lorenzo_res.prefix_sum(axis=1)
res = recover_res

code = codegen.cpu.print_cpp(res._gen_ir())
code = '#include "../../compression/util.h"\n' + code

data = torch.rand(nblocks, 32)

print((data * 1000).round())

d = run.cpu.compile_and_run(code, data)
print(d)

def regression():
nblocks = 50
input = Tensor('input', (nblocks, 32), dtype='float')
quant_res = (input * 1000).round()
res = apply(lambda x: einsum('i,i->', x, Const(slice(1, 33, 1), 'slice')), (quant_res, ))

code = codegen.cpu.print_cpp(res._gen_ir())
print(code)


def regression2():
nblocks = 50
input = Tensor('input', (nblocks, 6, 6, 6), dtype='float')
quant_res = (input * 1000).round()
tmp1 = apply(lambda x: einsum('ijk,i->', x, Const(slice(1, 33, 1), 'slice')), (quant_res, ))
tmp2 = apply(lambda x: einsum('ijk,j->', x, Const(slice(1, 33, 1), 'slice')), (quant_res, ))
tmp3 = apply(lambda x: einsum('ijk,k->', x, Const(slice(1, 33, 1), 'slice')), (quant_res, ))
tmp4 = apply(lambda x: einsum('ijk,->', x, None), (quant_res, ))

coefficient = (tmp1 + tmp2 + tmp3) / tmp4

code = codegen.cpu.print_cpp(coefficient._gen_ir())
print(code)



if __name__ == "__main__":
# compression()
# invert_lorenzo()
# regression()
regression2()
22 changes: 22 additions & 0 deletions apps/compression/util.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//
// Created by Jiang, Peng on 11/10/23.
//

#ifndef UTIL_H
#define UTIL_H

#include <math.h>
#include <stdlib.h>

template <class T=int>
int nbits(T n) {
for (int i = 30; i>=0; i--) {
if (n & (1 << i)) {
return i + 1;
}
}
return 0;
}


#endif //UTIL_H
Empty file added apps/kge/__init__.py
Empty file.
Loading