Nobisuke
Dekisugi
RAG
Privacy policy
2022/11/02 10:56
NVIDIA cuQuantumって手元のPCでも動くんですか?という質問をいただきましたので、入れて実行してみました。手元のPCはGTX1650のゲーミングノートPCです。やり方は簡単です。
pip install cuquantum-python
これで終わりです。インストールができたら早速使ってみましょう。cupyを要求された場合にはそちらも入れる必要があります。
Copy import numpy as np import cupy as cp import cuquantum from cuquantum import custatevec as cusv nIndexBits = 3 nSvSize = (1 << nIndexBits) nTargets = 1 nControls = 2 adjoint = 0 targets = np.asarray([2], dtype=np.int32) controls = np.asarray([0, 1], dtype=np.int32) h_sv = np.asarray([0.0+0.0j, 0.0+0.0j, 0.0+0.0j, 0.0+0.0j, 0.0+0.0j, 0.0+0.0j, 0.0+0.0j, 1.0+0.0j], dtype=np.complex64) # the gate matrix can live on either host (np) or device (cp) matrix = cp.asarray([0.0+0.0j, 1.0+0.0j, 1.0+0.0j, 0.0+0.0j], dtype=np.complex64) if isinstance(matrix, cp.ndarray): matrix_ptr = matrix.data.ptr elif isinstance(matrix, np.ndarray): matrix_ptr = matrix.ctypes.data else: raise ValueError d_sv = cp.asarray(h_sv) #################################################################################### # cuStateVec handle initialization handle = cusv.create() workspaceSize = cusv.apply_matrix_get_workspace_size( handle, cuquantum.cudaDataType.CUDA_C_32F, nIndexBits, matrix_ptr, cuquantum.cudaDataType.CUDA_C_32F, cusv.MatrixLayout.ROW, adjoint, nTargets, nControls, cuquantum.ComputeType.COMPUTE_32F) # check the size of external workspace if workspaceSize > 0: workspace = cp.cuda.memory.alloc(workspaceSize) workspace_ptr = workspace.ptr else: workspace_ptr = 0 # apply gate cusv.apply_matrix( handle, d_sv.data.ptr, cuquantum.cudaDataType.CUDA_C_32F, nIndexBits, matrix_ptr, cuquantum.cudaDataType.CUDA_C_32F, cusv.MatrixLayout.ROW, adjoint, targets.ctypes.data, nTargets, controls.ctypes.data, 0, nControls, cuquantum.ComputeType.COMPUTE_32F, workspace_ptr, workspaceSize) # destroy handle cusv.destroy(handle) print(d_sv)
[0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
ということで、CCXを|111>にかけてみましたところ、無事|011>となりました。サクッと計算できていいですね。GPUたくさんありますので今後はでかいのでチャレンジしてみます。
© 2024, blueqat Inc. All rights reserved