Programação em GPU
O artefacto GPU versionado, a sintaxe verificada de kernels e o estado das funcionalidades atestadas.
Programação em GPU
O Sounio tem dois caminhos de compilador para GPU neste snapshot do repositório:
souc-linux-x86_64(o artefato self-hosted padrão): compila sintaxe de GPU, executa um fallback serial em CPU e permite que okretikosconstrua modelos predefinidos de artefatos PTX/CUBIN.souc-linux-x86_64-gpu(o artefato voltado para GPU): binário separado com emissão de PTX mais ampla viabuild --backend gpu.
Caminho de GPU self-hosted (fallback em CPU + modelos de artefato)
O compilador padrão (bin/souc ou bin/souc-linux-x86_64) aceita sintaxe de kernel GPU e executa um fallback serial determinístico em CPU. A CLI do Kretikos usa esse compilador para construir pequenos drivers de emissor dentro da própria árvore de código e, em seguida, grava modelos predefinidos de artefato de GPU:
# Emitir modelos PTX predefinidos (self-hosted, sem necessidade de GPU)
kretikos emit-ptx vec_add -o /tmp/kernel.ptx
kretikos emit-ptx vec_sub -o /tmp/kernel.ptx
kretikos emit-ptx vec_mul -o /tmp/kernel.ptx
kretikos emit-ptx vec_div -o /tmp/kernel.ptx
kretikos emit-ptx vec_add_f64 -o /tmp/kernel.ptx
kretikos emit-ptx fma -o /tmp/kernel.ptx
kretikos emit-ptx fma_f64 -o /tmp/kernel.ptx
kretikos emit-ptx store_u32_const -o /tmp/kernel.ptx
# Emitir modelos predefinidos de Metal/MSL (self-hosted, sem necessidade de macOS)
kretikos emit-metal vec_add -o /tmp/kernel.metal
kretikos emit-metal ossm_oct_step -o /tmp/kernel.metal
kretikos emit-metal sedenion_cd_step -o /tmp/kernel.metal
# Emitir modelos CUBIN predefinidos
kretikos emit-cubin exit_only -o /tmp/kernel.cubin
kretikos emit-cubin store_u32_const -o /tmp/kernel.cubin
kretikos emit-cubin vec_add_f32 -o /tmp/kernel.cubin
kretikos emit-cubin epistemic_dual_f32 -o /tmp/kernel.cubin
# Emitir um pacote estrutural de artefatos: PTX, CUBIN, hashes, limites
kretikos bundle -o /tmp/kretikos-bundle
# Opcionalmente, registrar evidência do assembler/disassembler e da CUDA Driver API
kretikos bundle -o /tmp/kretikos-validated-bundle --validate-toolchain --validate-runtime
O que isso comprova hoje:
- O compilador self-hosted compila
kernel fn,with GPU,GPU.launcheGPU.sync. - O fallback em CPU executa kernels de forma serial, com IDs determinísticos de thread/bloco.
- O wrapper de CLI
kretikosemite modelos de texto PTX predefinidos e modelos de bytes ELF/CUBIN da CUDA da NVIDIA predefinidos a partir de código Sounio presente na própria árvore. - O comando
kretikos bundlegrava um manifesto legível por máquinasounio.kretikos.bundle.v1, com hashes de artefatos, verificações estruturais, validação opcional viaptxas/nvdisasme da CUDA Driver API, e não-afirmações explícitas. - Este caminho ainda não converte código-fonte arbitrário de kernel escrito pelo usuário em PTX/CUBIN.
- A validação de toolchain e runtime se aplica apenas aos modelos predefinidos de PTX/CUBIN selecionados pelo
kretikos; ela não valida kernels arbitrários escritos pelo usuário.
Caminho do artefato de GPU (emissão de PTX mais ampla)
O artefato de GPU verificado é um binário separado com suporte mais amplo a padrões:
export SOUC_GPU_BIN="$(pwd)/artifacts/omega/souc-bin/souc-linux-x86_64-gpu"
export SOUNIO_STDLIB_PATH="$(pwd)/stdlib"
"$SOUC_GPU_BIN" info
"$SOUC_GPU_BIN" check examples/gpu.sio
"$SOUC_GPU_BIN" check tests/run-pass/gpu_launch_surface.sio
"$SOUC_GPU_BIN" build examples/kernel_matmul.sio --backend gpu -o /tmp/kernel_matmul.ptx
Superfície pública versus superfície da árvore de código-fonte
O artefato de GPU público verificado atualmente aceita:
kernel fnwith GPUperform GPU.launch(...)perform GPU.sync()- Emissão de PTX via
build --backend gpu
O compilador self-hosted (bin/souc) também aceita a mesma sintaxe e, além disso, direciona:
- modelos PTX predefinidos via
kretikos emit-ptx - modelos CUBIN predefinidos via
kretikos emit-cubin - pacotes estruturais de artefatos PTX/CUBIN via
kretikos bundle - verificações opcionais fail-closed de toolchain/runtime via
kretikos bundle --require-toolchainekretikos bundle --require-runtime
O artefato de GPU público verificado ainda não resolve o antigo namespace intrínseco gpu.*, proveniente de esboços históricos:
gpu.thread_id.*gpu.block_id.*gpu.block_dim.*gpu.alloc<T>(...)
Esses nomes ainda importam para a história de implementação, mas ainda não são a sintaxe pública recomendada.
Evidência de backend
A evidência de GPU mais forte no repositório está em artifacts/omega/:
gpu_codegen_parity.v1.jsongpu_binary_attestation.v1.jsongpu_runtime_attest_gate.v1.jsongpu_public_contract.v1.json
Trilhas de computação atestadas atualmente:
- CUDA:
cuda-sm80 - ROCm:
rocm-gfx942
Onde vive a implementação maior de GPU
self-hosted/gpu/contém o trabalho de PTX, SPIR-V, Metal, runtime, tensores e ajuste (tuning).docs/features/GPU_RUNTIME.mdé a explicação nativa do repositório para o contrato atual.- A árvore self-hosted ainda contém um caminho interno
gpu-emit, mas o caminho público verificado via CLI ébuild --backend gpu.