import __main__
import numpy as np
import warp as wp
from tqdm.auto import trange
# Warp reads __main__.__loader__, which is missing in some notebook kernels
if not hasattr(__main__, "__loader__"):
__main__.__loader__ = NoneWarp Basics
This example is from NVIDIA’s Accelerated Computing Hub.
num_particles = 10_000_000
num_steps = 100
mass = 0.1
g = 9.81
b = 0.05
dt = 0.01 * (2 * mass / b)
gravity = wp.vec3([0.0, 0.0, -g])
@wp.kernel
def integrate(positions: wp.array(dtype=wp.vec3), velocities: wp.array(dtype=wp.vec3)): # type: ignore
i = wp.tid()
acceleration = (-b * velocities[i]) / mass + gravity
velocities[i] += acceleration * dt
positions[i] += velocities[i] * dt# Initial positions: random values between -1.0 and 1.0 for x, y, and z
rng = np.random.default_rng(12345)
positions_np = rng.uniform(low=-1.0, high=1.0, size=(num_particles, 3))
positions = wp.array(positions_np, dtype=wp.vec3)
# Initial velocities: random values between -0.5 and 0.5 m/s for vx, vy, and vz
velocities_np = rng.uniform(low=-0.5, high=0.5, size=(num_particles, 3))
velocities = wp.array(velocities_np, dtype=wp.vec3)
print(f"Initial positions:\n{positions}")
for step in trange(num_steps):
wp.launch(integrate, dim=(num_particles,), inputs=[positions, velocities])
print(f"Final positions:\n{positions}")Warp 1.18.0 initialized:
CUDA not enabled in this build
Devices:
"cpu" : "arm"
Kernel cache:
~/Library/Caches/warp/1.18.0
Initial positions:
[[-0.54532796 -0.36648333 0.5947309 ]
[ 0.35250935 -0.2177809 -0.33437213]
[ 0.19661751 -0.6265316 0.3455121 ]
...
[-0.55922866 -0.93023884 -0.83259517]
[-0.39899704 0.97424763 0.94057095]
[ 0.38531193 0.26505202 -0.60369706]]
0%| | 0/100 [00:00<?, ?it/s]
Module __main__ 4f23e15 load on device 'cpu' took 18.01 ms (cached)
⋮ (12 progress updates omitted)
100%|██████████| 100/100 [00:01<00:00, 73.16it/s]
Final positions:
[[ -0.09391715 -1.0830888 -43.828407 ]
[ 0.6937012 -0.6013651 -45.414093 ]
[ 0.5957543 0.08006047 -44.8957 ]
...
[ -0.72598 -0.8991223 -45.298027 ]
[ -0.32058033 0.70321625 -43.714462 ]
[ -0.08150801 -0.0732362 -46.081345 ]]