import unittest
from tinygrad import Device
from tinygrad . helpers import Timing , Profiling
class TestDeviceSpeed ( unittest . TestCase ) :
@classmethod
def setUpClass ( cls ) :
cls . dev = Device [ Device . DEFAULT ]
cls . empty = Device [ Device . DEFAULT ] . renderer . render ( [ ] )
def test_empty_compile ( self ) :
with Timing ( " compiler " ) :
self . dev . compiler . compile ( self . empty )
def test_empty_compile_twice ( self ) :
self . dev . compiler . compile ( self . empty )
with Timing ( " compiler " ) :
self . dev . compiler . compile ( self . empty )
def test_launch_speed ( self ) :
prg_bin = self . dev . compiler . compile ( self . empty )
prg = self . dev . runtime ( " test " , prg_bin )
for _ in range ( 10 ) : prg ( ) # ignore first launches
with Timing ( " launch 1000x " ) :
for _ in range ( 1000 ) : prg ( )
with Timing ( " launch 1000x with wait " ) :
for _ in range ( 1000 ) : prg ( wait = True )
def test_profile_launch_speed ( self ) :
prg_bin = self . dev . compiler . compile ( self . empty )
prg = self . dev . runtime ( " test " , prg_bin )
for _ in range ( 10 ) : prg ( ) # ignore first launches
with Profiling ( ) :
for _ in range ( 1000 ) : prg ( )
if __name__ == ' __main__ ' :
unittest . main ( )