viva_tensor/pool

TensorPool - Distributed Tensor Computing via OTP

CONCEITO INOVADOR: GenServer + GPU

Em C/C++: você tem threads + mutex + condition vars (PESADELO) Em Gleam/OTP: GenServer gerencia estado, NIFs fazem GPU compute

Arquitetura:

[Request] -> [GenServer Pool] -> [Worker 1] -> [NIF GPU] -> cuBLAS/cuDNN -> [Worker 2] -> [NIF GPU] -> cuBLAS/cuDNN -> [Worker N] -> [NIF GPU] -> cuBLAS/cuDNN

Cada Worker é um processo BEAM leve (~2KB) que pode chamar NIFs de GPU. O GenServer faz load balancing automático. Se um Worker crashar, OTP reinicia (fault tolerance grátis!)

Types

Resultado de similarity search

pub type SearchResult {
  SearchResult(index: Int, similarity: Float)
}

Constructors

  • SearchResult(index: Int, similarity: Float)

Operações de tensor suportadas

pub type TensorOp {
  Scale(Float)
  Normalize
}

Constructors

  • Scale(Float)
  • Normalize

Values

pub fn benchmark_pool() -> Nil
pub fn main() -> Nil
pub fn parallel_map(
  tensors: List(tensor.Tensor),
  op: TensorOp,
) -> List(tensor.Tensor)

Processa uma lista de tensores em paralelo

Cada tensor é processado em um processo BEAM separado. Em C/C++ isso precisaria de pthread_create + mutex para cada tensor. Em Gleam: uma linha de código e zero data races!

pub fn parallel_sum(tensors: List(tensor.Tensor)) -> Float

Soma paralela de todos os tensores

pub fn similarity_search(
  query: tensor.Tensor,
  documents: List(tensor.Tensor),
  chunk_size: Int,
) -> List(SearchResult)

Busca de similaridade em batch - O KILLER FEATURE!

Compara uma query contra milhares de documentos em paralelo. Retorna os resultados ordenados por similaridade (desc).

pub fn top_k_similar(
  query: tensor.Tensor,
  documents: List(tensor.Tensor),
  k: Int,
) -> List(SearchResult)

Top-K similarity - retorna os K mais similares

Search Document