From 27a3a6bc8bca712623cd4a482367bcf751191827 Mon Sep 17 00:00:00 2001 From: Neil Gershenfeld <gersh@cba.mit.edu> Date: Wed, 1 Mar 2023 20:46:40 -0500 Subject: [PATCH] wip --- Python/taichipi.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 1 + 2 files changed, 78 insertions(+) create mode 100644 Python/taichipi.py diff --git a/Python/taichipi.py b/Python/taichipi.py new file mode 100644 index 0000000..257d485 --- /dev/null +++ b/Python/taichipi.py @@ -0,0 +1,77 @@ +# +# 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)) diff --git a/README.md b/README.md index 6960d28..4393346 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ |1,635|[cudapi.cu](CUDA/cudapi.cu)|C++, CUDA, 5120 cores|NVIDIA V100|March, 2020| |1,595|prior|IBM Blue Gene/P|C, MPI, 4096 processes|prior| |1,090|[numbapig.py](Python/numbapig.py)|Python, Numba, CUDA, 5120 cores|NVIDIA V100|March, 2020| +|1,062|[taichipi.py](Python/taichipi.py)|Python, Taichi, 5120 cores|NVIDIA V100|March, 2023| |811|prior|Cray XT4|C, MPI, 2048 processes|prior| |315|[numbapip.py](Python/numbapip.py)|Python, Numba, parallel, fastmath<br>96 cores|Intel 2x Xeon Platinum 8175M|February, 2020| |272|[threadpi.c](C/threadpi.c)|C, 96 threads<br>gcc threadpi.c -o threadpi -O3 -ffast-math -pthread|Intel 2x Xeon Platinum 8175M|June, 2019| -- GitLab