1
0

external_test_amd.py 1.2 KB

123456789101112131415161718192021222324252627
  1. import unittest
  2. from tinygrad import Device, Tensor
  3. from tinygrad.engine.schedule import create_schedule
  4. from tinygrad.runtime.ops_amd import AMDDevice
  5. class TestAMD(unittest.TestCase):
  6. @classmethod
  7. def setUpClass(self):
  8. TestAMD.d0: AMDDevice = Device["AMD"]
  9. TestAMD.a = Tensor([0.,1.], device="AMD").realize()
  10. TestAMD.b = self.a + 1
  11. si = create_schedule([self.b.lazydata])[-1]
  12. TestAMD.d0_runner = TestAMD.d0.get_runner(*si.ast)
  13. TestAMD.b.lazydata.buffer.allocate()
  14. def test_amd_ring_64bit_doorbell(self):
  15. TestAMD.d0.pm4_write_pointer[0] = TestAMD.d0.pm4_write_pointer[0] + (2 << 32) - TestAMD.d0.pm4_ring.size // 4
  16. for _ in range(2000):
  17. TestAMD.d0_runner.clprg(TestAMD.b.lazydata.buffer._buf, TestAMD.a.lazydata.buffer._buf,
  18. global_size=TestAMD.d0_runner.global_size, local_size=TestAMD.d0_runner.local_size)
  19. TestAMD.d0_runner.clprg(TestAMD.a.lazydata.buffer._buf, TestAMD.b.lazydata.buffer._buf,
  20. global_size=TestAMD.d0_runner.global_size, local_size=TestAMD.d0_runner.local_size)
  21. assert (val:=TestAMD.a.lazydata.buffer.as_buffer().cast("f")[0]) == 4000.0, f"got val {val}"
  22. if __name__ == "__main__":
  23. unittest.main()