使用 pytorch 計算蒙地卡羅求 $(pi)$ 值運算,效能跟 Tensorflow 差不多。
在 Windows 及 Linux 分別安裝如下套件
#Windows 10 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 --no-cache-dir #Linux pip install torch torchvision torchaudio
蒙地卡羅求 $(pi)$ 的 pytorch 版完整程式碼如下
import time
import torch
def dist():
#points=torch.rand([2, batch]).to(device)# 每次都產生一個陣列,會很慢的
points=array.uniform_(0, 1)
d=(points[0].square()+points[1].square()).sqrt()
idx=torch.where(d<=1)
#print(idx)
#print(idx[0].shape[0])
return idx[0].shape[0]
batch=100_000_000
epoch=500_000
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
array=torch.zeros([2,batch], dtype=torch.float32, device=device)
incircle=0
for e in range(epoch):
t1=time.time()
incircle += dist()
area = incircle * 4 / ((e + 1)*batch)
t2=time.time()
print(f'GPU Epoch:{e+1:07,d} : {t2-t1:.5f}秒: pi={area}')
todo
