近年の量子コンピュータはNISQといってエラーがあり、あまり深い回路ができません。一方で量子ビットは増え続けていますので、今回は浅い回路で量子ビットの多い計算をGPUの量子コンピュータシミュレータcuQuantumに搭載されている最新のcuTensorNetで実行してみます。
cuTensorNetはこれまでの量子コンピュータのシミュレータとは異なり特殊な実装となっています。ちょっと実装が複雑になり時間が取れなかったので作った量子回路の単一振幅といって、特定の量子ビットのビット列の振幅を求める計算をします。実際には量子回路をきちんと計算しています。
実装は特殊ですので、blueqatSDKを改造して行いました。
from sympy.matrices.determinant import S
from blueqat import Circuit
import numpy
N = 1000
c = Circuit(N)
#loop1
for i in range(N):
c.ry(np.random.rand())[i]
for i in range(0, N-1, 2):
c.cx[i, i+1]
for i in range(N):
c.ry(np.random.rand())[i]
for i in range(1, N-1, 2):
c.cx[i, i+1]
for i in range(N):
c.ry(np.random.rand())[i]
#loop2
for i in range(N):
c.ry(np.random.rand())[i]
for i in range(0, N-1, 2):
c.cx[i, i+1]
for i in range(N):
c.ry(np.random.rand())[i]
for i in range(1, N-1, 2):
c.cx[i, i+1]
for i in range(N):
c.ry(np.random.rand())[i]
#loop3
for i in range(N):
c.ry(np.random.rand())[i]
for i in range(0, N-1, 2):
c.cx[i, i+1]
for i in range(N):
c.ry(np.random.rand())[i]
for i in range(1, N-1, 2):
c.cx[i, i+1]
for i in range(N):
c.ry(np.random.rand())[i]
import time
start = time.time()
c.run(backend="cuTN" + str(a))
print(time.time() - start)
1000量子ビット用意し、RY - CX - RY -CX - RY を交互に実行する回路を3ループ実行しました。早速ベンチマークです。
Google Colab T4
104.98933839797974
Google Colab A100
98.27982020378113
blueqat cloud V100
251.73760056495667
やっぱりなんかT4が速いんですよね。。。泣