Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
1 result

taichipi.py

Blame
  • taichipi.py 2.02 KiB
    #
    # taichipi.py
    # Neil Gershenfeld 2/22/23
    # calculation of pi by Taichi
    # pi = 3.14159265358979323846 
    #
    import time
    import taichi as ti
    
    NPTS = 10000000
    
    def calc_pi(NPTS):
       pi = 0
       for i in range(1,(NPTS+1)):
          pi += 0.5/((i-0.75)*(i-0.25))
       return pi
    
    pi = calc_pi(1000) # run first to compile
    start_time = time.time()
    pi = calc_pi(NPTS)
    end_time = time.time()
    mflops = NPTS*5.0/(1.0e6*(end_time-start_time))
    print("\nNPTS = %d, pi = %f"%(NPTS,pi))
    print("time = %f, estimated Python MFlops = %f\n"%(end_time-start_time,mflops))
    
    ti.init(arch=ti.cpu,default_ip=ti.i64,default_fp=ti.f64,cpu_max_num_threads=1)
    
    NPTS = int(1000000000)
    
    @ti.kernel
    def calc_pi_CPU(NPTS:int)->float:
       pi = float(0)
       for i in range(1,(NPTS+1)):
          pi += 0.5/((i-0.75)*(i-0.25))
       return pi
    
    pi = calc_pi_CPU(1000) # run first to compile
    start_time = time.time()
    pi = calc_pi_CPU(NPTS)
    end_time = time.time()
    mflops = NPTS*5.0/(1.0e6*(end_time-start_time))
    print("NPTS = %d, pi = %f"%(NPTS,pi))
    print("time = %f, estimated Taichi CPU serial MFlops = %f\n"%(end_time-start_time,mflops))
    
    ti.init(arch=ti.cpu,default_ip=ti.i64,default_fp=ti.f64)
    
    @ti.kernel
    def calc_pi_CPU(NPTS:int)->float:
       pi = float(0)
       for i in range(1,(NPTS+1)):
          pi += 0.5/((i-0.75)*(i-0.25))
       return pi
    
    pi = calc_pi_CPU(1000) # run first to compile
    start_time = time.time()
    pi = calc_pi_CPU(NPTS)
    end_time = time.time()
    mflops = NPTS*5.0/(1.0e6*(end_time-start_time))
    print("NPTS = %d, pi = %f"%(NPTS,pi))
    print("time = %f, estimated Taichi CPU parallel MFlops = %f\n"%(end_time-start_time,mflops))
    
    ti.init(arch=ti.gpu,default_ip=ti.i64,default_fp=ti.f64)
    
    @ti.kernel
    def calc_pi_GPU(NPTS:int)->float:
       pi = float(0)
       for i in range(1,(NPTS+1)):
          pi += 0.5/((i-0.75)*(i-0.25))
       return pi
    
    pi = calc_pi_GPU(1000) # run first to compile
    start_time = time.time()
    pi = calc_pi_GPU(NPTS)
    end_time = time.time()
    mflops = NPTS*5.0/(1.0e6*(end_time-start_time))
    print("NPTS = %d, pi = %f"%(NPTS,pi))
    print("time = %f, estimated Taichi GPU MFlops = %f\n"%(end_time-start_time,mflops))