Como Construir Simulações de Alto Desempenho Aceleradas por GPU e Workflows de Física Diferenciável…

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

Notícias relacionadas

Continue explorando