A cobertura de tradução é parcial. Consulte a fonte em inglês para a referência técnica completa. Ver versão em inglês →

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 o kretikos construa 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 via build --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.launch e GPU.sync.
  • O fallback em CPU executa kernels de forma serial, com IDs determinísticos de thread/bloco.
  • O wrapper de CLI kretikos emite 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 bundle grava um manifesto legível por máquina sounio.kretikos.bundle.v1, com hashes de artefatos, verificações estruturais, validação opcional via ptxas/nvdisasm e 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 fn
  • with GPU
  • perform 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-toolchain e kretikos 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.json
  • gpu_binary_attestation.v1.json
  • gpu_runtime_attest_gate.v1.json
  • gpu_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.