Neste tutorial, exploramos como usar o NVIDIA Warp para construir simulações de alto desempenho em GPU e CPU diretamente do Python. Começamos configurando um ambiente compatível com o Colab e inicializando o Warp para que nossos kernels possam ser executados tanto em GPUs CUDA quanto em CPUs, dependendo da disponibilidade. Em seguida, implementamos vários kernels Warp personalizados que demonstram conceitos centrais de computação paralela, incluindo operações vetoriais, geração de campos procedurais, dinâmica de partículas e física diferenciável. Ao lançar esses kernels em milhares ou milhões de threads, observamos como o Warp permite fluxos de trabalho eficientes de computação científica e simulação usando uma interface Python simples. Ao longo do tutorial, construímos um pipeline completo que abrange desde a execução básica de kernels até simulações e otimizações avançadas. Confira os Códigos Completos e o Notebook. Copiar Código Copiado Use um navegador diferente import sys import subprocess import pkgutil def _install_if_missing(packages):
missing = [p for p in packages if pkgutil.find_loader(p["import_name"]) is None]
if missing:
subprocess.check_call([sys.executable, "-m", "pip", "install", "-q"] + [p["pip_name"] for p in missing])
_install_if_missing([
{"import_name": "warp", "pip_name": "warp-lang"},
{"import_name": "numpy", "pip_name": "numpy"},
{"import_name": "matplotlib", "pip_name": "matplotlib"},
])
import math
import time
import numpy as np
import matplotlib.pyplot as plt
import warp as wp
wp.init()
device = "cuda:0" if wp.is_cuda_available() else "cpu"
print(f"Using Warp device: {device}")
@wp.kernel
def saxpy_kernel(a: wp.float32, x: wp.array(dtype=wp.float32), y: wp.array(dtype=wp.float32), out: wp.array(dtype=wp.float32)):
i = wp.tid()
out[i] = a * x[i] + y[i]
@wp.kernel
def image_sdf_kernel(width: int, height: int, pixels: wp.array(dtype=wp.float32)):
tid = wp.tid()
x = tid % width
y = tid // width
fx = 2.0 * (wp.float32(x) / wp.float32(width - 1)) - 1.0
fy = 2.0 * (wp.float32(y) / wp.float32(height - 1)) - 1.0
r1 = wp.sqrt((fx + 0.35) * (fx + 0.35) + fy * fy) - 0.28
r2 = wp.sqrt((fx - 0.25) * (fx - 0.25) + (fy - 0.15) * (fy - 0.15)) - 0.18
wave = fy + 0.25 * wp.sin(8.0 * fx)
d = wp.min(r1, r2)
d = wp.max(d, -wave)
value = wp.exp(-18.0 * wp.abs(d))
pixels[tid] = value Configuramos o ambiente e garantimos que todas as bibliotecas necessárias, como Warp, NumPy e Matplotlib, estejam instaladas. Inicializamos o Warp e verificamos se uma GPU CUDA está disponível, para que nossos cálculos possam ser executados no dispositivo apropriado.
Fonte: MarkTechPost
Publicado em 2026-03-17