external_test_uops_graphing.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/usr/bin/env python
  2. import unittest
  3. from tinygrad.tensor import Tensor
  4. from tinygrad.codegen.kernel import Kernel
  5. from tinygrad.renderer.cstyle import OpenCLRenderer
  6. from tinygrad.engine.graph import graph_uops
  7. from tinygrad.engine.schedule import create_schedule
  8. from tinygrad.nn import Conv2d
  9. class TestUopsGraph(unittest.TestCase):
  10. def test_matmul(self):
  11. N = 1024
  12. a = Tensor.rand(N,N)
  13. b = Tensor.rand(N,N)
  14. si = create_schedule([(a@b).lazydata])[-1]
  15. lin = Kernel(si.ast)
  16. lin.hand_coded_optimizations()
  17. print(lin.colored_shape())
  18. uops = lin.linearize().uops
  19. graph_uops(uops)
  20. for u in uops: print(u)
  21. print(OpenCLRenderer("matmul", uops)[0])
  22. def test_reduce(self):
  23. a = Tensor.rand(1024*1024)
  24. si = create_schedule([a.sum().lazydata])[-1]
  25. lin = Kernel(si.ast)
  26. lin.hand_coded_optimizations()
  27. uops = lin.linearize().uops
  28. graph_uops(uops)
  29. #print(OpenCLRenderer("reduce", uops)[0])
  30. def test_conv(self):
  31. x = Tensor.rand(1,3,16,16)
  32. c = Conv2d(3, 16, (3,3))
  33. si = create_schedule([c(x).elu().lazydata])[-1]
  34. lin = Kernel(si.ast)
  35. lin.hand_coded_optimizations()
  36. uops = lin.linearize().uops
  37. graph_uops(uops)
  38. print(lin.colored_shape())
  39. print(OpenCLRenderer("conv", uops)[0])
  40. if __name__ == '__main__':
  41. unittest.main()