warp-lang 1.0.2__py3-none-manylinux2014_aarch64.whl → 1.1.0__py3-none-manylinux2014_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of warp-lang might be problematic. Click here for more details.
- warp/__init__.py +108 -97
- warp/__init__.pyi +1 -1
- warp/bin/warp-clang.so +0 -0
- warp/bin/warp.so +0 -0
- warp/build.py +115 -113
- warp/build_dll.py +383 -375
- warp/builtins.py +3425 -3354
- warp/codegen.py +2878 -2792
- warp/config.py +40 -36
- warp/constants.py +45 -45
- warp/context.py +5194 -5102
- warp/dlpack.py +442 -442
- warp/examples/__init__.py +16 -16
- warp/examples/assets/bear.usd +0 -0
- warp/examples/assets/bunny.usd +0 -0
- warp/examples/assets/cartpole.urdf +110 -110
- warp/examples/assets/crazyflie.usd +0 -0
- warp/examples/assets/cube.usd +0 -0
- warp/examples/assets/nv_ant.xml +92 -92
- warp/examples/assets/nv_humanoid.xml +183 -183
- warp/examples/assets/quadruped.urdf +267 -267
- warp/examples/assets/rocks.nvdb +0 -0
- warp/examples/assets/rocks.usd +0 -0
- warp/examples/assets/sphere.usd +0 -0
- warp/examples/benchmarks/benchmark_api.py +383 -383
- warp/examples/benchmarks/benchmark_cloth.py +278 -277
- warp/examples/benchmarks/benchmark_cloth_cupy.py +88 -88
- warp/examples/benchmarks/benchmark_cloth_jax.py +97 -100
- warp/examples/benchmarks/benchmark_cloth_numba.py +146 -142
- warp/examples/benchmarks/benchmark_cloth_numpy.py +77 -77
- warp/examples/benchmarks/benchmark_cloth_pytorch.py +86 -86
- warp/examples/benchmarks/benchmark_cloth_taichi.py +112 -112
- warp/examples/benchmarks/benchmark_cloth_warp.py +146 -146
- warp/examples/benchmarks/benchmark_launches.py +295 -295
- warp/examples/browse.py +29 -29
- warp/examples/core/example_dem.py +234 -219
- warp/examples/core/example_fluid.py +293 -267
- warp/examples/core/example_graph_capture.py +144 -126
- warp/examples/core/example_marching_cubes.py +188 -174
- warp/examples/core/example_mesh.py +174 -155
- warp/examples/core/example_mesh_intersect.py +205 -193
- warp/examples/core/example_nvdb.py +176 -170
- warp/examples/core/example_raycast.py +105 -90
- warp/examples/core/example_raymarch.py +199 -178
- warp/examples/core/example_render_opengl.py +185 -141
- warp/examples/core/example_sph.py +405 -387
- warp/examples/core/example_torch.py +222 -181
- warp/examples/core/example_wave.py +263 -248
- warp/examples/fem/bsr_utils.py +378 -380
- warp/examples/fem/example_apic_fluid.py +407 -389
- warp/examples/fem/example_convection_diffusion.py +182 -168
- warp/examples/fem/example_convection_diffusion_dg.py +219 -209
- warp/examples/fem/example_convection_diffusion_dg0.py +204 -194
- warp/examples/fem/example_deformed_geometry.py +177 -159
- warp/examples/fem/example_diffusion.py +201 -173
- warp/examples/fem/example_diffusion_3d.py +177 -152
- warp/examples/fem/example_diffusion_mgpu.py +221 -214
- warp/examples/fem/example_mixed_elasticity.py +244 -222
- warp/examples/fem/example_navier_stokes.py +259 -243
- warp/examples/fem/example_stokes.py +220 -192
- warp/examples/fem/example_stokes_transfer.py +265 -249
- warp/examples/fem/mesh_utils.py +133 -109
- warp/examples/fem/plot_utils.py +292 -287
- warp/examples/optim/example_bounce.py +260 -246
- warp/examples/optim/example_cloth_throw.py +222 -209
- warp/examples/optim/example_diffray.py +566 -536
- warp/examples/optim/example_drone.py +864 -835
- warp/examples/optim/example_inverse_kinematics.py +176 -168
- warp/examples/optim/example_inverse_kinematics_torch.py +185 -169
- warp/examples/optim/example_spring_cage.py +239 -231
- warp/examples/optim/example_trajectory.py +223 -199
- warp/examples/optim/example_walker.py +306 -293
- warp/examples/sim/example_cartpole.py +139 -129
- warp/examples/sim/example_cloth.py +196 -186
- warp/examples/sim/example_granular.py +124 -111
- warp/examples/sim/example_granular_collision_sdf.py +197 -186
- warp/examples/sim/example_jacobian_ik.py +236 -214
- warp/examples/sim/example_particle_chain.py +118 -105
- warp/examples/sim/example_quadruped.py +193 -180
- warp/examples/sim/example_rigid_chain.py +197 -187
- warp/examples/sim/example_rigid_contact.py +189 -177
- warp/examples/sim/example_rigid_force.py +127 -125
- warp/examples/sim/example_rigid_gyroscopic.py +109 -95
- warp/examples/sim/example_rigid_soft_contact.py +134 -122
- warp/examples/sim/example_soft_body.py +190 -177
- warp/fabric.py +337 -335
- warp/fem/__init__.py +60 -27
- warp/fem/cache.py +401 -388
- warp/fem/dirichlet.py +178 -179
- warp/fem/domain.py +262 -263
- warp/fem/field/__init__.py +100 -101
- warp/fem/field/field.py +148 -149
- warp/fem/field/nodal_field.py +298 -299
- warp/fem/field/restriction.py +22 -21
- warp/fem/field/test.py +180 -181
- warp/fem/field/trial.py +183 -183
- warp/fem/geometry/__init__.py +15 -19
- warp/fem/geometry/closest_point.py +69 -70
- warp/fem/geometry/deformed_geometry.py +270 -271
- warp/fem/geometry/element.py +744 -744
- warp/fem/geometry/geometry.py +184 -186
- warp/fem/geometry/grid_2d.py +380 -373
- warp/fem/geometry/grid_3d.py +441 -435
- warp/fem/geometry/hexmesh.py +953 -953
- warp/fem/geometry/partition.py +374 -376
- warp/fem/geometry/quadmesh_2d.py +532 -532
- warp/fem/geometry/tetmesh.py +840 -840
- warp/fem/geometry/trimesh_2d.py +577 -577
- warp/fem/integrate.py +1630 -1615
- warp/fem/operator.py +190 -191
- warp/fem/polynomial.py +214 -213
- warp/fem/quadrature/__init__.py +2 -2
- warp/fem/quadrature/pic_quadrature.py +243 -245
- warp/fem/quadrature/quadrature.py +295 -294
- warp/fem/space/__init__.py +294 -292
- warp/fem/space/basis_space.py +488 -489
- warp/fem/space/collocated_function_space.py +100 -105
- warp/fem/space/dof_mapper.py +236 -236
- warp/fem/space/function_space.py +148 -145
- warp/fem/space/grid_2d_function_space.py +267 -267
- warp/fem/space/grid_3d_function_space.py +305 -306
- warp/fem/space/hexmesh_function_space.py +350 -352
- warp/fem/space/partition.py +350 -350
- warp/fem/space/quadmesh_2d_function_space.py +368 -369
- warp/fem/space/restriction.py +158 -160
- warp/fem/space/shape/__init__.py +13 -15
- warp/fem/space/shape/cube_shape_function.py +738 -738
- warp/fem/space/shape/shape_function.py +102 -103
- warp/fem/space/shape/square_shape_function.py +611 -611
- warp/fem/space/shape/tet_shape_function.py +565 -567
- warp/fem/space/shape/triangle_shape_function.py +429 -429
- warp/fem/space/tetmesh_function_space.py +294 -292
- warp/fem/space/topology.py +297 -295
- warp/fem/space/trimesh_2d_function_space.py +223 -221
- warp/fem/types.py +77 -77
- warp/fem/utils.py +495 -495
- warp/jax.py +166 -141
- warp/jax_experimental.py +341 -339
- warp/native/array.h +1072 -1025
- warp/native/builtin.h +1560 -1560
- warp/native/bvh.cpp +398 -398
- warp/native/bvh.cu +525 -525
- warp/native/bvh.h +429 -429
- warp/native/clang/clang.cpp +495 -464
- warp/native/crt.cpp +31 -31
- warp/native/crt.h +334 -334
- warp/native/cuda_crt.h +1049 -1049
- warp/native/cuda_util.cpp +549 -540
- warp/native/cuda_util.h +288 -203
- warp/native/cutlass_gemm.cpp +34 -34
- warp/native/cutlass_gemm.cu +372 -372
- warp/native/error.cpp +66 -66
- warp/native/error.h +27 -27
- warp/native/fabric.h +228 -228
- warp/native/hashgrid.cpp +301 -278
- warp/native/hashgrid.cu +78 -77
- warp/native/hashgrid.h +227 -227
- warp/native/initializer_array.h +32 -32
- warp/native/intersect.h +1204 -1204
- warp/native/intersect_adj.h +365 -365
- warp/native/intersect_tri.h +322 -322
- warp/native/marching.cpp +2 -2
- warp/native/marching.cu +497 -497
- warp/native/marching.h +2 -2
- warp/native/mat.h +1498 -1498
- warp/native/matnn.h +333 -333
- warp/native/mesh.cpp +203 -203
- warp/native/mesh.cu +293 -293
- warp/native/mesh.h +1887 -1887
- warp/native/nanovdb/NanoVDB.h +4782 -4782
- warp/native/nanovdb/PNanoVDB.h +2553 -2553
- warp/native/nanovdb/PNanoVDBWrite.h +294 -294
- warp/native/noise.h +850 -850
- warp/native/quat.h +1084 -1084
- warp/native/rand.h +299 -299
- warp/native/range.h +108 -108
- warp/native/reduce.cpp +156 -156
- warp/native/reduce.cu +348 -348
- warp/native/runlength_encode.cpp +61 -61
- warp/native/runlength_encode.cu +46 -46
- warp/native/scan.cpp +30 -30
- warp/native/scan.cu +36 -36
- warp/native/scan.h +7 -7
- warp/native/solid_angle.h +442 -442
- warp/native/sort.cpp +94 -94
- warp/native/sort.cu +97 -97
- warp/native/sort.h +14 -14
- warp/native/sparse.cpp +337 -337
- warp/native/sparse.cu +544 -544
- warp/native/spatial.h +630 -630
- warp/native/svd.h +562 -562
- warp/native/temp_buffer.h +30 -30
- warp/native/vec.h +1132 -1132
- warp/native/volume.cpp +297 -297
- warp/native/volume.cu +32 -32
- warp/native/volume.h +538 -538
- warp/native/volume_builder.cu +425 -425
- warp/native/volume_builder.h +19 -19
- warp/native/warp.cpp +1057 -1052
- warp/native/warp.cu +2943 -2828
- warp/native/warp.h +313 -305
- warp/optim/__init__.py +9 -9
- warp/optim/adam.py +120 -120
- warp/optim/linear.py +1104 -939
- warp/optim/sgd.py +104 -92
- warp/render/__init__.py +10 -10
- warp/render/render_opengl.py +3217 -3204
- warp/render/render_usd.py +768 -749
- warp/render/utils.py +152 -150
- warp/sim/__init__.py +52 -59
- warp/sim/articulation.py +685 -685
- warp/sim/collide.py +1594 -1590
- warp/sim/import_mjcf.py +489 -481
- warp/sim/import_snu.py +220 -221
- warp/sim/import_urdf.py +536 -516
- warp/sim/import_usd.py +887 -881
- warp/sim/inertia.py +316 -317
- warp/sim/integrator.py +234 -233
- warp/sim/integrator_euler.py +1956 -1956
- warp/sim/integrator_featherstone.py +1910 -1991
- warp/sim/integrator_xpbd.py +3294 -3312
- warp/sim/model.py +4473 -4314
- warp/sim/particles.py +113 -112
- warp/sim/render.py +417 -403
- warp/sim/utils.py +413 -410
- warp/sparse.py +1227 -1227
- warp/stubs.py +2109 -2469
- warp/tape.py +1162 -225
- warp/tests/__init__.py +1 -1
- warp/tests/__main__.py +4 -4
- warp/tests/assets/torus.usda +105 -105
- warp/tests/aux_test_class_kernel.py +26 -26
- warp/tests/aux_test_compile_consts_dummy.py +10 -10
- warp/tests/aux_test_conditional_unequal_types_kernels.py +21 -21
- warp/tests/aux_test_dependent.py +22 -22
- warp/tests/aux_test_grad_customs.py +23 -23
- warp/tests/aux_test_reference.py +11 -11
- warp/tests/aux_test_reference_reference.py +10 -10
- warp/tests/aux_test_square.py +17 -17
- warp/tests/aux_test_unresolved_func.py +14 -14
- warp/tests/aux_test_unresolved_symbol.py +14 -14
- warp/tests/disabled_kinematics.py +239 -239
- warp/tests/run_coverage_serial.py +31 -31
- warp/tests/test_adam.py +157 -157
- warp/tests/test_arithmetic.py +1124 -1124
- warp/tests/test_array.py +2417 -2326
- warp/tests/test_array_reduce.py +150 -150
- warp/tests/test_async.py +668 -656
- warp/tests/test_atomic.py +141 -141
- warp/tests/test_bool.py +204 -149
- warp/tests/test_builtins_resolution.py +1292 -1292
- warp/tests/test_bvh.py +164 -171
- warp/tests/test_closest_point_edge_edge.py +228 -228
- warp/tests/test_codegen.py +566 -553
- warp/tests/test_compile_consts.py +97 -101
- warp/tests/test_conditional.py +246 -246
- warp/tests/test_copy.py +232 -215
- warp/tests/test_ctypes.py +632 -632
- warp/tests/test_dense.py +67 -67
- warp/tests/test_devices.py +91 -98
- warp/tests/test_dlpack.py +530 -529
- warp/tests/test_examples.py +400 -378
- warp/tests/test_fabricarray.py +955 -955
- warp/tests/test_fast_math.py +62 -54
- warp/tests/test_fem.py +1277 -1278
- warp/tests/test_fp16.py +130 -130
- warp/tests/test_func.py +338 -337
- warp/tests/test_generics.py +571 -571
- warp/tests/test_grad.py +746 -640
- warp/tests/test_grad_customs.py +333 -336
- warp/tests/test_hash_grid.py +210 -164
- warp/tests/test_import.py +39 -39
- warp/tests/test_indexedarray.py +1134 -1134
- warp/tests/test_intersect.py +67 -67
- warp/tests/test_jax.py +307 -307
- warp/tests/test_large.py +167 -164
- warp/tests/test_launch.py +354 -354
- warp/tests/test_lerp.py +261 -261
- warp/tests/test_linear_solvers.py +191 -171
- warp/tests/test_lvalue.py +421 -493
- warp/tests/test_marching_cubes.py +65 -65
- warp/tests/test_mat.py +1801 -1827
- warp/tests/test_mat_lite.py +115 -115
- warp/tests/test_mat_scalar_ops.py +2907 -2889
- warp/tests/test_math.py +126 -193
- warp/tests/test_matmul.py +500 -499
- warp/tests/test_matmul_lite.py +410 -410
- warp/tests/test_mempool.py +188 -190
- warp/tests/test_mesh.py +284 -324
- warp/tests/test_mesh_query_aabb.py +228 -241
- warp/tests/test_mesh_query_point.py +692 -702
- warp/tests/test_mesh_query_ray.py +292 -303
- warp/tests/test_mlp.py +276 -276
- warp/tests/test_model.py +110 -110
- warp/tests/test_modules_lite.py +39 -39
- warp/tests/test_multigpu.py +163 -163
- warp/tests/test_noise.py +248 -248
- warp/tests/test_operators.py +250 -250
- warp/tests/test_options.py +123 -125
- warp/tests/test_peer.py +133 -137
- warp/tests/test_pinned.py +78 -78
- warp/tests/test_print.py +54 -54
- warp/tests/test_quat.py +2086 -2086
- warp/tests/test_rand.py +288 -288
- warp/tests/test_reload.py +217 -217
- warp/tests/test_rounding.py +179 -179
- warp/tests/test_runlength_encode.py +190 -190
- warp/tests/test_sim_grad.py +243 -0
- warp/tests/test_sim_kinematics.py +91 -97
- warp/tests/test_smoothstep.py +168 -168
- warp/tests/test_snippet.py +305 -266
- warp/tests/test_sparse.py +468 -460
- warp/tests/test_spatial.py +2148 -2148
- warp/tests/test_streams.py +486 -473
- warp/tests/test_struct.py +710 -675
- warp/tests/test_tape.py +173 -148
- warp/tests/test_torch.py +743 -743
- warp/tests/test_transient_module.py +87 -87
- warp/tests/test_types.py +556 -659
- warp/tests/test_utils.py +490 -499
- warp/tests/test_vec.py +1264 -1268
- warp/tests/test_vec_lite.py +73 -73
- warp/tests/test_vec_scalar_ops.py +2099 -2099
- warp/tests/test_verify_fp.py +94 -94
- warp/tests/test_volume.py +737 -736
- warp/tests/test_volume_write.py +255 -265
- warp/tests/unittest_serial.py +37 -37
- warp/tests/unittest_suites.py +363 -359
- warp/tests/unittest_utils.py +603 -578
- warp/tests/unused_test_misc.py +71 -71
- warp/tests/walkthrough_debug.py +85 -85
- warp/thirdparty/appdirs.py +598 -598
- warp/thirdparty/dlpack.py +143 -143
- warp/thirdparty/unittest_parallel.py +566 -561
- warp/torch.py +321 -295
- warp/types.py +4504 -4450
- warp/utils.py +1008 -821
- {warp_lang-1.0.2.dist-info → warp_lang-1.1.0.dist-info}/LICENSE.md +126 -126
- {warp_lang-1.0.2.dist-info → warp_lang-1.1.0.dist-info}/METADATA +338 -400
- warp_lang-1.1.0.dist-info/RECORD +352 -0
- warp/examples/assets/cube.usda +0 -42
- warp/examples/assets/sphere.usda +0 -56
- warp/examples/assets/torus.usda +0 -105
- warp_lang-1.0.2.dist-info/RECORD +0 -352
- {warp_lang-1.0.2.dist-info → warp_lang-1.1.0.dist-info}/WHEEL +0 -0
- {warp_lang-1.0.2.dist-info → warp_lang-1.1.0.dist-info}/top_level.txt +0 -0
warp/tests/test_mempool.py
CHANGED
|
@@ -1,190 +1,188 @@
|
|
|
1
|
-
# Copyright (c) 2023 NVIDIA CORPORATION. All rights reserved.
|
|
2
|
-
# NVIDIA CORPORATION and its licensors retain all intellectual property
|
|
3
|
-
# and proprietary rights in and to this software, related documentation
|
|
4
|
-
# and any modifications thereto. Any use, reproduction, disclosure or
|
|
5
|
-
# distribution of this software and related documentation without an express
|
|
6
|
-
# license agreement from NVIDIA CORPORATION is strictly prohibited.
|
|
7
|
-
|
|
8
|
-
import unittest
|
|
9
|
-
|
|
10
|
-
import warp as wp
|
|
11
|
-
from warp.tests.unittest_utils import *
|
|
12
|
-
|
|
13
|
-
wp.init()
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def get_device_pair_with_mempool_access_support():
|
|
17
|
-
devices = wp.get_cuda_devices()
|
|
18
|
-
for target_device in devices:
|
|
19
|
-
for peer_device in devices:
|
|
20
|
-
if target_device != peer_device:
|
|
21
|
-
if wp.is_mempool_access_supported(target_device, peer_device):
|
|
22
|
-
return (target_device, peer_device)
|
|
23
|
-
return None
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
def get_device_pair_without_mempool_access_support():
|
|
27
|
-
devices = wp.get_cuda_devices()
|
|
28
|
-
for target_device in devices:
|
|
29
|
-
for peer_device in devices:
|
|
30
|
-
if target_device != peer_device:
|
|
31
|
-
if not wp.is_mempool_access_supported(target_device, peer_device):
|
|
32
|
-
return (target_device, peer_device)
|
|
33
|
-
return None
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def test_mempool_release_threshold(test, device):
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
wp.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
wp.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
wp.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
wp.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
wp.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
expected_error =
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
wp.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
#
|
|
135
|
-
target_device, peer_device
|
|
136
|
-
|
|
137
|
-
#
|
|
138
|
-
test.
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
#
|
|
152
|
-
test.
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
wp.build.clear_kernel_cache()
|
|
190
|
-
unittest.main(verbosity=2)
|
|
1
|
+
# Copyright (c) 2023 NVIDIA CORPORATION. All rights reserved.
|
|
2
|
+
# NVIDIA CORPORATION and its licensors retain all intellectual property
|
|
3
|
+
# and proprietary rights in and to this software, related documentation
|
|
4
|
+
# and any modifications thereto. Any use, reproduction, disclosure or
|
|
5
|
+
# distribution of this software and related documentation without an express
|
|
6
|
+
# license agreement from NVIDIA CORPORATION is strictly prohibited.
|
|
7
|
+
|
|
8
|
+
import unittest
|
|
9
|
+
|
|
10
|
+
import warp as wp
|
|
11
|
+
from warp.tests.unittest_utils import *
|
|
12
|
+
|
|
13
|
+
wp.init()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def get_device_pair_with_mempool_access_support():
|
|
17
|
+
devices = wp.get_cuda_devices()
|
|
18
|
+
for target_device in devices:
|
|
19
|
+
for peer_device in devices:
|
|
20
|
+
if target_device != peer_device:
|
|
21
|
+
if wp.is_mempool_access_supported(target_device, peer_device):
|
|
22
|
+
return (target_device, peer_device)
|
|
23
|
+
return None
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def get_device_pair_without_mempool_access_support():
|
|
27
|
+
devices = wp.get_cuda_devices()
|
|
28
|
+
for target_device in devices:
|
|
29
|
+
for peer_device in devices:
|
|
30
|
+
if target_device != peer_device:
|
|
31
|
+
if not wp.is_mempool_access_supported(target_device, peer_device):
|
|
32
|
+
return (target_device, peer_device)
|
|
33
|
+
return None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_mempool_release_threshold(test, device):
|
|
37
|
+
device = wp.get_device(device)
|
|
38
|
+
|
|
39
|
+
assert device.is_mempool_supported
|
|
40
|
+
|
|
41
|
+
test.assertEqual(wp.is_mempool_supported(device), device.is_mempool_supported)
|
|
42
|
+
|
|
43
|
+
was_enabled = wp.is_mempool_enabled(device)
|
|
44
|
+
|
|
45
|
+
# toggle
|
|
46
|
+
wp.set_mempool_enabled(device, not was_enabled)
|
|
47
|
+
test.assertEqual(wp.is_mempool_enabled(device), not was_enabled)
|
|
48
|
+
|
|
49
|
+
# restore
|
|
50
|
+
wp.set_mempool_enabled(device, was_enabled)
|
|
51
|
+
test.assertEqual(wp.is_mempool_enabled(device), was_enabled)
|
|
52
|
+
|
|
53
|
+
saved_threshold = wp.get_mempool_release_threshold(device)
|
|
54
|
+
|
|
55
|
+
# set new absolute threshold
|
|
56
|
+
wp.set_mempool_release_threshold(device, 42000)
|
|
57
|
+
test.assertEqual(wp.get_mempool_release_threshold(device), 42000)
|
|
58
|
+
|
|
59
|
+
# set new fractional threshold
|
|
60
|
+
wp.set_mempool_release_threshold(device, 0.5)
|
|
61
|
+
test.assertEqual(wp.get_mempool_release_threshold(device), int(0.5 * device.total_memory))
|
|
62
|
+
|
|
63
|
+
# restore threshold
|
|
64
|
+
wp.set_mempool_release_threshold(device, saved_threshold)
|
|
65
|
+
test.assertEqual(wp.get_mempool_release_threshold(device), saved_threshold)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def test_mempool_exceptions(test, device):
|
|
69
|
+
device = wp.get_device(device)
|
|
70
|
+
|
|
71
|
+
assert not device.is_mempool_supported
|
|
72
|
+
|
|
73
|
+
if device.is_cuda:
|
|
74
|
+
expected_error = RuntimeError
|
|
75
|
+
else:
|
|
76
|
+
expected_error = ValueError
|
|
77
|
+
|
|
78
|
+
with test.assertRaises(expected_error):
|
|
79
|
+
wp.get_mempool_release_threshold(device)
|
|
80
|
+
|
|
81
|
+
with test.assertRaises(expected_error):
|
|
82
|
+
wp.set_mempool_release_threshold(device, 42000)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def test_mempool_access_self(test, device):
|
|
86
|
+
device = wp.get_device(device)
|
|
87
|
+
|
|
88
|
+
assert device.is_mempool_supported
|
|
89
|
+
|
|
90
|
+
# setting mempool access to self is a no-op
|
|
91
|
+
wp.set_mempool_access_enabled(device, device, True)
|
|
92
|
+
wp.set_mempool_access_enabled(device, device, False)
|
|
93
|
+
|
|
94
|
+
# should always be enabled
|
|
95
|
+
enabled = wp.is_mempool_access_enabled(device, device)
|
|
96
|
+
test.assertTrue(enabled)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@unittest.skipUnless(get_device_pair_with_mempool_access_support(), "Requires devices with mempool access support")
|
|
100
|
+
def test_mempool_access(test, _):
|
|
101
|
+
target_device, peer_device = get_device_pair_with_mempool_access_support()
|
|
102
|
+
|
|
103
|
+
was_enabled = wp.is_mempool_access_enabled(target_device, peer_device)
|
|
104
|
+
|
|
105
|
+
if was_enabled:
|
|
106
|
+
# try disabling
|
|
107
|
+
wp.set_mempool_access_enabled(target_device, peer_device, False)
|
|
108
|
+
is_enabled = wp.is_mempool_access_enabled(target_device, peer_device)
|
|
109
|
+
test.assertFalse(is_enabled)
|
|
110
|
+
|
|
111
|
+
# try re-enabling
|
|
112
|
+
wp.set_mempool_access_enabled(target_device, peer_device, True)
|
|
113
|
+
is_enabled = wp.is_mempool_access_enabled(target_device, peer_device)
|
|
114
|
+
test.assertTrue(is_enabled)
|
|
115
|
+
else:
|
|
116
|
+
# try enabling
|
|
117
|
+
wp.set_mempool_access_enabled(target_device, peer_device, True)
|
|
118
|
+
is_enabled = wp.is_mempool_access_enabled(target_device, peer_device)
|
|
119
|
+
test.assertTrue(is_enabled)
|
|
120
|
+
|
|
121
|
+
# try re-disabling
|
|
122
|
+
wp.set_mempool_access_enabled(target_device, peer_device, False)
|
|
123
|
+
is_enabled = wp.is_mempool_access_enabled(target_device, peer_device)
|
|
124
|
+
test.assertFalse(is_enabled)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@unittest.skipUnless(
|
|
128
|
+
get_device_pair_without_mempool_access_support(), "Requires devices without mempool access support"
|
|
129
|
+
)
|
|
130
|
+
def test_mempool_access_exceptions_unsupported(test, _):
|
|
131
|
+
# get a CUDA device pair without mempool access support
|
|
132
|
+
target_device, peer_device = get_device_pair_without_mempool_access_support()
|
|
133
|
+
|
|
134
|
+
# querying is ok, but must return False
|
|
135
|
+
test.assertFalse(wp.is_mempool_access_enabled(target_device, peer_device))
|
|
136
|
+
|
|
137
|
+
# enabling should raise RuntimeError
|
|
138
|
+
with test.assertRaises(RuntimeError):
|
|
139
|
+
wp.set_mempool_access_enabled(target_device, peer_device, True)
|
|
140
|
+
|
|
141
|
+
# disabling should not raise an error
|
|
142
|
+
wp.set_mempool_access_enabled(target_device, peer_device, False)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
@unittest.skipUnless(wp.is_cpu_available() and wp.is_cuda_available(), "Requires both CUDA and CPU devices")
|
|
146
|
+
def test_mempool_access_exceptions_cpu(test, _):
|
|
147
|
+
# querying is ok, but must return False
|
|
148
|
+
test.assertFalse(wp.is_mempool_access_enabled("cuda:0", "cpu"))
|
|
149
|
+
test.assertFalse(wp.is_mempool_access_enabled("cpu", "cuda:0"))
|
|
150
|
+
|
|
151
|
+
# enabling should raise ValueError
|
|
152
|
+
with test.assertRaises(ValueError):
|
|
153
|
+
wp.set_mempool_access_enabled("cpu", "cuda:0", True)
|
|
154
|
+
with test.assertRaises(ValueError):
|
|
155
|
+
wp.set_mempool_access_enabled("cuda:0", "cpu", True)
|
|
156
|
+
|
|
157
|
+
# disabling should not raise an error
|
|
158
|
+
wp.set_mempool_access_enabled("cpu", "cuda:0", False)
|
|
159
|
+
wp.set_mempool_access_enabled("cuda:0", "cpu", False)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
class TestMempool(unittest.TestCase):
|
|
163
|
+
pass
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
devices_with_mempools = [d for d in get_test_devices() if d.is_mempool_supported]
|
|
167
|
+
devices_without_mempools = [d for d in get_test_devices() if not d.is_mempool_supported]
|
|
168
|
+
|
|
169
|
+
# test devices with mempool support
|
|
170
|
+
add_function_test(
|
|
171
|
+
TestMempool, "test_mempool_release_threshold", test_mempool_release_threshold, devices=devices_with_mempools
|
|
172
|
+
)
|
|
173
|
+
add_function_test(TestMempool, "test_mempool_access_self", test_mempool_access_self, devices=devices_with_mempools)
|
|
174
|
+
|
|
175
|
+
# test devices without mempool support
|
|
176
|
+
add_function_test(TestMempool, "test_mempool_exceptions", test_mempool_exceptions, devices=devices_without_mempools)
|
|
177
|
+
|
|
178
|
+
# mempool access tests
|
|
179
|
+
add_function_test(TestMempool, "test_mempool_access", test_mempool_access)
|
|
180
|
+
|
|
181
|
+
# mempool access exceptions
|
|
182
|
+
add_function_test(TestMempool, "test_mempool_access_exceptions_unsupported", test_mempool_access_exceptions_unsupported)
|
|
183
|
+
add_function_test(TestMempool, "test_mempool_access_exceptions_cpu", test_mempool_access_exceptions_cpu)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
if __name__ == "__main__":
|
|
187
|
+
wp.build.clear_kernel_cache()
|
|
188
|
+
unittest.main(verbosity=2)
|