Sobre o projeto

PRISM-Q é um simulador de circuitos quânticos escrito em Rust, com bindings Python. Ele seleciona automaticamente um backend a partir da estrutura do circuito, executa um pipeline de fusão de portas em múltiplas passagens e usa kernels AVX2, FMA e BMI2 no loop interno (NEON em ARM64). O suporte a CUDA é opcional e cobre os backends statevector, stabilizer (experimental) e density-matrix. A entrada é OpenQASM 3.0 com sintaxe 2.0 retrocompatível, e os circuitos podem ser exportados de volta para OpenQASM 3.0. A instalação está disponível via cargo (prism-q) ou pip (prism-q). O conjunto de recursos padrão inclui paralelismo Rayon e SVD faer; uma compilação sem recursos padrão é single-threaded com dependências mínimas. O recurso gpu requer CUDA Toolkit 12.x ou mais recente. Os backends incluem Statevector (circuitos gerais, O(2^n)), Stabilizer (apenas Clifford, O(n^2)), Factored Stabilizer (Clifford com blocos independentes), Sparse (poucas amplitudes ativas), MPS (baixo emaranhamento ou 1D, O(n*chi^2)), Product State (sem emaranhamento), Tensor Network (baixa treewidth), Factored (emaranhamento parcial), Density Matrix (evolução ruidosa exata, O(4^n), apenas despacho explícito) e Distributed Statevector (além da memória de um único host, ranks MPI, resultados exatos). BackendKind::Auto é o padrão; o orçamento de memória do statevector é metade da memória física da máquina, substituível via PRISM_MAX_SV_QUBITS. O parser OpenQASM aceita o conjunto stdgates.inc, variantes controladas e multi-controladas comuns, portas do exportador Qiskit, nomes de portas nativas IonQ e Google/Cirq, portas decompostas em múltiplas instruções, u1/u2/u3 legados da IBM e declarações de portas definidas pelo usuário. Os modificadores inv @, ctrl @ e pow(k) @ encadeiam-se em portas diretas. qasm_export::to_qasm3 grava um Circuit de volta como OpenQASM 3.0. Os recursos incluem shots e contagens de amostras, valores esperados e marginais, circuitos paramétricos com rebinding e gradientes via método adjunto ou regra de deslocamento de parâmetros. O recurso GPU compila PTX em tempo de execução por meio do NVRTC para a compute capability do dispositivo; um crossover de tamanho mantém subcircuitos pequenos na CPU. Benchmarks são fornecidos para macrobenchmarks de circuitos, microbenchmarks de portas e despacho de GPU. O roadmap menciona ramificação em meio de circuito, execução multi-GPU e GPU distribuída, portas ROCm e shots ruidosos no backend distribuído.