warp-lang 0.10.1__py3-none-win_amd64.whl → 0.11.0__py3-none-win_amd64.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 +10 -4
- warp/__init__.pyi +1 -0
- warp/bin/warp-clang.dll +0 -0
- warp/bin/warp.dll +0 -0
- warp/build.py +5 -3
- warp/build_dll.py +29 -9
- warp/builtins.py +868 -507
- warp/codegen.py +1074 -638
- warp/config.py +3 -3
- warp/constants.py +6 -0
- warp/context.py +715 -222
- warp/fabric.py +326 -0
- warp/fem/__init__.py +27 -0
- warp/fem/cache.py +389 -0
- warp/fem/dirichlet.py +181 -0
- warp/fem/domain.py +263 -0
- warp/fem/field/__init__.py +101 -0
- warp/fem/field/field.py +149 -0
- warp/fem/field/nodal_field.py +299 -0
- warp/fem/field/restriction.py +21 -0
- warp/fem/field/test.py +181 -0
- warp/fem/field/trial.py +183 -0
- warp/fem/geometry/__init__.py +19 -0
- warp/fem/geometry/closest_point.py +70 -0
- warp/fem/geometry/deformed_geometry.py +271 -0
- warp/fem/geometry/element.py +744 -0
- warp/fem/geometry/geometry.py +186 -0
- warp/fem/geometry/grid_2d.py +373 -0
- warp/fem/geometry/grid_3d.py +435 -0
- warp/fem/geometry/hexmesh.py +953 -0
- warp/fem/geometry/partition.py +376 -0
- warp/fem/geometry/quadmesh_2d.py +532 -0
- warp/fem/geometry/tetmesh.py +840 -0
- warp/fem/geometry/trimesh_2d.py +577 -0
- warp/fem/integrate.py +1616 -0
- warp/fem/operator.py +191 -0
- warp/fem/polynomial.py +213 -0
- warp/fem/quadrature/__init__.py +2 -0
- warp/fem/quadrature/pic_quadrature.py +245 -0
- warp/fem/quadrature/quadrature.py +294 -0
- warp/fem/space/__init__.py +292 -0
- warp/fem/space/basis_space.py +489 -0
- warp/fem/space/collocated_function_space.py +105 -0
- warp/fem/space/dof_mapper.py +236 -0
- warp/fem/space/function_space.py +145 -0
- warp/fem/space/grid_2d_function_space.py +267 -0
- warp/fem/space/grid_3d_function_space.py +306 -0
- warp/fem/space/hexmesh_function_space.py +352 -0
- warp/fem/space/partition.py +350 -0
- warp/fem/space/quadmesh_2d_function_space.py +369 -0
- warp/fem/space/restriction.py +160 -0
- warp/fem/space/shape/__init__.py +15 -0
- warp/fem/space/shape/cube_shape_function.py +738 -0
- warp/fem/space/shape/shape_function.py +103 -0
- warp/fem/space/shape/square_shape_function.py +611 -0
- warp/fem/space/shape/tet_shape_function.py +567 -0
- warp/fem/space/shape/triangle_shape_function.py +429 -0
- warp/fem/space/tetmesh_function_space.py +292 -0
- warp/fem/space/topology.py +295 -0
- warp/fem/space/trimesh_2d_function_space.py +221 -0
- warp/fem/types.py +77 -0
- warp/fem/utils.py +495 -0
- warp/native/array.h +147 -44
- warp/native/builtin.h +122 -149
- warp/native/bvh.cpp +73 -325
- warp/native/bvh.cu +406 -23
- warp/native/bvh.h +34 -43
- warp/native/clang/clang.cpp +13 -8
- warp/native/crt.h +2 -0
- warp/native/cuda_crt.h +5 -0
- warp/native/cuda_util.cpp +15 -3
- warp/native/cuda_util.h +3 -1
- warp/native/cutlass/tools/library/scripts/conv2d_operation.py +463 -0
- warp/native/cutlass/tools/library/scripts/conv3d_operation.py +321 -0
- warp/native/cutlass/tools/library/scripts/gemm_operation.py +988 -0
- warp/native/cutlass/tools/library/scripts/generator.py +4625 -0
- warp/native/cutlass/tools/library/scripts/library.py +799 -0
- warp/native/cutlass/tools/library/scripts/manifest.py +402 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/docs/source/conf.py +96 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/profile/conv/conv2d_f16_sm80.py +106 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/profile/gemm/gemm_f32_sm80.py +91 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/setup.py +80 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/__init__.py +48 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/arguments.py +118 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/c_types.py +241 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/compiler.py +432 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/conv2d_operation.py +631 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/epilogue.py +1026 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/frontend.py +104 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/gemm_operation.py +1276 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/library.py +744 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/memory_manager.py +74 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/operation.py +110 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/parser.py +619 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/reduction_operation.py +398 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/tensor_ref.py +70 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/__init__.py +4 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/conv2d_testbed.py +646 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/gemm_grouped_testbed.py +235 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/gemm_testbed.py +557 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/profiler.py +70 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/type_hint.py +39 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/__init__.py +1 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/device.py +76 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/reference_model.py +255 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/__init__.py +0 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +201 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +177 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +98 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +95 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_few_channels_f16nhwc_f16nhwc_f16nhwc_tensor_op_f32_sm80.py +163 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_fixed_channels_f16nhwc_f16nhwc_f16nhwc_tensor_op_f32_sm80.py +187 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +309 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +54 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +96 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +107 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_strided_dgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +253 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +97 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +242 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +96 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +107 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/run_all_tests.py +10 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/frontend/test_frontend.py +146 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/__init__.py +0 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_bf16_sm80.py +96 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f16_sm80.py +447 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f32_sm80.py +146 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f64_sm80.py +102 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_grouped_sm80.py +203 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_s8_sm80.py +229 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/run_all_tests.py +9 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/unit/test_sm80.py +453 -0
- warp/native/cutlass/tools/library/scripts/rank_2k_operation.py +398 -0
- warp/native/cutlass/tools/library/scripts/rank_k_operation.py +387 -0
- warp/native/cutlass/tools/library/scripts/rt.py +796 -0
- warp/native/cutlass/tools/library/scripts/symm_operation.py +400 -0
- warp/native/cutlass/tools/library/scripts/trmm_operation.py +407 -0
- warp/native/cutlass_gemm.cu +5 -3
- warp/native/exports.h +1240 -952
- warp/native/fabric.h +228 -0
- warp/native/hashgrid.cpp +4 -4
- warp/native/hashgrid.h +22 -2
- warp/native/intersect.h +22 -7
- warp/native/intersect_adj.h +8 -8
- warp/native/intersect_tri.h +1 -1
- warp/native/marching.cu +157 -161
- warp/native/mat.h +80 -19
- warp/native/matnn.h +2 -2
- warp/native/mesh.cpp +33 -108
- warp/native/mesh.cu +114 -23
- warp/native/mesh.h +446 -46
- warp/native/noise.h +272 -329
- warp/native/quat.h +51 -8
- warp/native/rand.h +45 -35
- warp/native/range.h +6 -2
- warp/native/reduce.cpp +1 -1
- warp/native/reduce.cu +10 -12
- warp/native/runlength_encode.cu +6 -10
- warp/native/scan.cu +8 -11
- warp/native/sparse.cpp +4 -4
- warp/native/sparse.cu +164 -154
- warp/native/spatial.h +2 -2
- warp/native/temp_buffer.h +14 -30
- warp/native/vec.h +107 -23
- warp/native/volume.h +120 -0
- warp/native/warp.cpp +560 -30
- warp/native/warp.cu +431 -44
- warp/native/warp.h +13 -4
- warp/optim/__init__.py +1 -0
- warp/optim/linear.py +922 -0
- warp/optim/sgd.py +92 -0
- warp/render/render_opengl.py +335 -119
- warp/render/render_usd.py +11 -11
- warp/sim/__init__.py +2 -2
- warp/sim/articulation.py +385 -185
- warp/sim/collide.py +8 -0
- warp/sim/import_mjcf.py +297 -106
- warp/sim/import_urdf.py +389 -210
- warp/sim/import_usd.py +198 -97
- warp/sim/inertia.py +17 -18
- warp/sim/integrator_euler.py +14 -8
- warp/sim/integrator_xpbd.py +158 -16
- warp/sim/model.py +795 -291
- warp/sim/render.py +3 -3
- warp/sim/utils.py +3 -0
- warp/sparse.py +640 -150
- warp/stubs.py +606 -267
- warp/tape.py +61 -10
- warp/tests/__main__.py +3 -6
- warp/tests/assets/curlnoise_golden.npy +0 -0
- warp/tests/assets/pnoise_golden.npy +0 -0
- warp/tests/{test_class_kernel.py → aux_test_class_kernel.py} +9 -1
- warp/tests/aux_test_conditional_unequal_types_kernels.py +21 -0
- warp/tests/{test_dependent.py → aux_test_dependent.py} +2 -2
- warp/tests/{test_reference.py → aux_test_reference.py} +1 -1
- warp/tests/aux_test_unresolved_func.py +14 -0
- warp/tests/aux_test_unresolved_symbol.py +14 -0
- warp/tests/disabled_kinematics.py +239 -0
- warp/tests/run_coverage_serial.py +31 -0
- warp/tests/test_adam.py +103 -106
- warp/tests/test_arithmetic.py +128 -74
- warp/tests/test_array.py +212 -97
- warp/tests/test_array_reduce.py +57 -23
- warp/tests/test_atomic.py +64 -28
- warp/tests/test_bool.py +99 -0
- warp/tests/test_builtins_resolution.py +1292 -0
- warp/tests/test_bvh.py +42 -18
- warp/tests/test_closest_point_edge_edge.py +54 -57
- warp/tests/test_codegen.py +208 -130
- warp/tests/test_compile_consts.py +28 -20
- warp/tests/test_conditional.py +108 -24
- warp/tests/test_copy.py +10 -12
- warp/tests/test_ctypes.py +112 -88
- warp/tests/test_dense.py +21 -14
- warp/tests/test_devices.py +98 -0
- warp/tests/test_dlpack.py +75 -75
- warp/tests/test_examples.py +277 -0
- warp/tests/test_fabricarray.py +955 -0
- warp/tests/test_fast_math.py +15 -11
- warp/tests/test_fem.py +1271 -0
- warp/tests/test_fp16.py +53 -19
- warp/tests/test_func.py +187 -86
- warp/tests/test_generics.py +194 -49
- warp/tests/test_grad.py +178 -109
- warp/tests/test_grad_customs.py +176 -0
- warp/tests/test_hash_grid.py +52 -37
- warp/tests/test_import.py +10 -23
- warp/tests/test_indexedarray.py +32 -31
- warp/tests/test_intersect.py +18 -9
- warp/tests/test_large.py +141 -0
- warp/tests/test_launch.py +14 -41
- warp/tests/test_lerp.py +64 -65
- warp/tests/test_linear_solvers.py +154 -0
- warp/tests/test_lvalue.py +493 -0
- warp/tests/test_marching_cubes.py +12 -13
- warp/tests/test_mat.py +517 -2898
- warp/tests/test_mat_lite.py +115 -0
- warp/tests/test_mat_scalar_ops.py +2889 -0
- warp/tests/test_math.py +103 -9
- warp/tests/test_matmul.py +305 -69
- warp/tests/test_matmul_lite.py +410 -0
- warp/tests/test_mesh.py +71 -14
- warp/tests/test_mesh_query_aabb.py +41 -25
- warp/tests/test_mesh_query_point.py +140 -22
- warp/tests/test_mesh_query_ray.py +39 -22
- warp/tests/test_mlp.py +30 -22
- warp/tests/test_model.py +92 -89
- warp/tests/test_modules_lite.py +39 -0
- warp/tests/test_multigpu.py +88 -114
- warp/tests/test_noise.py +12 -11
- warp/tests/test_operators.py +16 -20
- warp/tests/test_options.py +11 -11
- warp/tests/test_pinned.py +17 -18
- warp/tests/test_print.py +32 -11
- warp/tests/test_quat.py +275 -129
- warp/tests/test_rand.py +18 -16
- warp/tests/test_reload.py +38 -34
- warp/tests/test_rounding.py +50 -43
- warp/tests/test_runlength_encode.py +168 -20
- warp/tests/test_smoothstep.py +9 -11
- warp/tests/test_snippet.py +143 -0
- warp/tests/test_sparse.py +261 -63
- warp/tests/test_spatial.py +276 -243
- warp/tests/test_streams.py +110 -85
- warp/tests/test_struct.py +268 -63
- warp/tests/test_tape.py +39 -21
- warp/tests/test_torch.py +118 -89
- warp/tests/test_transient_module.py +12 -13
- warp/tests/test_types.py +614 -0
- warp/tests/test_utils.py +494 -0
- warp/tests/test_vec.py +354 -2050
- warp/tests/test_vec_lite.py +73 -0
- warp/tests/test_vec_scalar_ops.py +2099 -0
- warp/tests/test_volume.py +457 -293
- warp/tests/test_volume_write.py +124 -134
- warp/tests/unittest_serial.py +35 -0
- warp/tests/unittest_suites.py +341 -0
- warp/tests/unittest_utils.py +568 -0
- warp/tests/unused_test_misc.py +71 -0
- warp/tests/{test_debug.py → walkthough_debug.py} +3 -17
- warp/thirdparty/appdirs.py +36 -45
- warp/thirdparty/unittest_parallel.py +549 -0
- warp/torch.py +9 -6
- warp/types.py +1089 -366
- warp/utils.py +93 -387
- warp_lang-0.11.0.dist-info/METADATA +238 -0
- warp_lang-0.11.0.dist-info/RECORD +332 -0
- {warp_lang-0.10.1.dist-info → warp_lang-0.11.0.dist-info}/WHEEL +1 -1
- warp/tests/test_all.py +0 -219
- warp/tests/test_array_scan.py +0 -60
- warp/tests/test_base.py +0 -208
- warp/tests/test_unresolved_func.py +0 -7
- warp/tests/test_unresolved_symbol.py +0 -7
- warp_lang-0.10.1.dist-info/METADATA +0 -21
- warp_lang-0.10.1.dist-info/RECORD +0 -188
- /warp/tests/{test_compile_consts_dummy.py → aux_test_compile_consts_dummy.py} +0 -0
- /warp/tests/{test_reference_reference.py → aux_test_reference_reference.py} +0 -0
- /warp/tests/{test_square.py → aux_test_square.py} +0 -0
- {warp_lang-0.10.1.dist-info → warp_lang-0.11.0.dist-info}/LICENSE.md +0 -0
- {warp_lang-0.10.1.dist-info → warp_lang-0.11.0.dist-info}/top_level.txt +0 -0
warp/tests/test_hash_grid.py
CHANGED
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
# distribution of this software and related documentation without an express
|
|
6
6
|
# license agreement from NVIDIA CORPORATION is strictly prohibited.
|
|
7
7
|
|
|
8
|
+
import unittest
|
|
9
|
+
|
|
8
10
|
import numpy as np
|
|
9
11
|
|
|
10
12
|
import warp as wp
|
|
11
|
-
from warp.tests.
|
|
12
|
-
|
|
13
|
-
np.random.seed(532)
|
|
13
|
+
from warp.tests.unittest_utils import *
|
|
14
14
|
|
|
15
15
|
wp.init()
|
|
16
16
|
|
|
@@ -41,9 +41,7 @@ def count_neighbors(grid: wp.uint64, radius: float, points: wp.array(dtype=wp.ve
|
|
|
41
41
|
count = int(0)
|
|
42
42
|
|
|
43
43
|
# construct query around point p
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
for index in neighbors:
|
|
44
|
+
for index in wp.hash_grid_query(grid, p, radius):
|
|
47
45
|
# compute distance to point
|
|
48
46
|
d = wp.length(p - points[index])
|
|
49
47
|
|
|
@@ -74,6 +72,9 @@ def count_neighbors_reference(
|
|
|
74
72
|
|
|
75
73
|
|
|
76
74
|
def test_hashgrid_query(test, device):
|
|
75
|
+
wp.load_module(device=device)
|
|
76
|
+
rng = np.random.default_rng(123)
|
|
77
|
+
|
|
77
78
|
grid = wp.HashGrid(dim_x, dim_y, dim_z, device)
|
|
78
79
|
|
|
79
80
|
for i in range(num_runs):
|
|
@@ -81,15 +82,14 @@ def test_hashgrid_query(test, device):
|
|
|
81
82
|
print(f"Run: {i+1}")
|
|
82
83
|
print("---------")
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
points = np.random.rand(num_points, 3) * scale - np.array((scale, scale, scale)) * 0.5
|
|
85
|
+
points = rng.random(size=(num_points, 3)) * scale - np.array((scale, scale, scale)) * 0.5
|
|
86
86
|
|
|
87
87
|
def particle_grid(dim_x, dim_y, dim_z, lower, radius, jitter):
|
|
88
88
|
points = np.meshgrid(
|
|
89
89
|
np.linspace(0, dim_x, dim_x), np.linspace(0, dim_y, dim_y), np.linspace(0, dim_z, dim_z)
|
|
90
90
|
)
|
|
91
91
|
points_t = np.array((points[0], points[1], points[2])).T * radius * 2.0 + np.array(lower)
|
|
92
|
-
points_t = points_t +
|
|
92
|
+
points_t = points_t + rng.random(size=points_t.shape) * radius * jitter
|
|
93
93
|
|
|
94
94
|
return points_t.reshape((-1, 3))
|
|
95
95
|
|
|
@@ -99,27 +99,28 @@ def test_hashgrid_query(test, device):
|
|
|
99
99
|
counts_arr = wp.zeros(len(points), dtype=int, device=device)
|
|
100
100
|
counts_arr_ref = wp.zeros(len(points), dtype=int, device=device)
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
102
|
+
profiler = {}
|
|
103
|
+
|
|
104
|
+
with wp.ScopedTimer("grid operations", print=print_enabled, dict=profiler, synchronize=True):
|
|
105
|
+
with wp.ScopedTimer("brute", print=print_enabled, dict=profiler, synchronize=True):
|
|
106
|
+
wp.launch(
|
|
107
|
+
kernel=count_neighbors_reference,
|
|
108
|
+
dim=len(points) * len(points),
|
|
109
|
+
inputs=[query_radius, points_arr, counts_arr_ref, len(points)],
|
|
110
|
+
device=device,
|
|
111
|
+
)
|
|
112
|
+
wp.synchronize()
|
|
113
|
+
|
|
114
|
+
with wp.ScopedTimer("grid build", print=print_enabled, dict=profiler, synchronize=True):
|
|
115
|
+
grid.build(points_arr, cell_radius)
|
|
116
|
+
|
|
117
|
+
with wp.ScopedTimer("grid query", print=print_enabled, dict=profiler, synchronize=True):
|
|
118
|
+
wp.launch(
|
|
119
|
+
kernel=count_neighbors,
|
|
120
|
+
dim=len(points),
|
|
121
|
+
inputs=[grid.id, query_radius, points_arr, counts_arr],
|
|
122
|
+
device=device,
|
|
123
|
+
)
|
|
123
124
|
|
|
124
125
|
counts = counts_arr.numpy()
|
|
125
126
|
counts_ref = counts_arr_ref.numpy()
|
|
@@ -133,17 +134,31 @@ def test_hashgrid_query(test, device):
|
|
|
133
134
|
test.assertTrue(np.array_equal(counts, counts_ref))
|
|
134
135
|
|
|
135
136
|
|
|
136
|
-
def
|
|
137
|
-
|
|
137
|
+
def test_hashgrid_codegen_adjoints_with_select(test, device):
|
|
138
|
+
def kernel_fn(
|
|
139
|
+
grid: wp.uint64,
|
|
140
|
+
):
|
|
141
|
+
v = wp.vec3(0.0, 0.0, 0.0)
|
|
142
|
+
|
|
143
|
+
if True:
|
|
144
|
+
query = wp.hash_grid_query(grid, v, 0.0)
|
|
145
|
+
else:
|
|
146
|
+
query = wp.hash_grid_query(grid, v, 0.0)
|
|
147
|
+
|
|
148
|
+
wp.Kernel(func=kernel_fn)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
devices = get_test_devices()
|
|
152
|
+
|
|
138
153
|
|
|
139
|
-
|
|
140
|
-
|
|
154
|
+
class TestHashGrid(unittest.TestCase):
|
|
155
|
+
pass
|
|
141
156
|
|
|
142
|
-
add_function_test(TestHashGrid, "test_hashgrid_query", test_hashgrid_query, devices=devices)
|
|
143
157
|
|
|
144
|
-
|
|
158
|
+
add_function_test(TestHashGrid, "test_hashgrid_query", test_hashgrid_query, devices=devices)
|
|
159
|
+
add_function_test(TestHashGrid, "test_hashgrid_codegen_adjoints_with_select", test_hashgrid_codegen_adjoints_with_select, devices=devices)
|
|
145
160
|
|
|
146
161
|
|
|
147
162
|
if __name__ == "__main__":
|
|
148
|
-
|
|
163
|
+
wp.build.clear_kernel_cache()
|
|
149
164
|
unittest.main(verbosity=2, failfast=False)
|
warp/tests/test_import.py
CHANGED
|
@@ -5,20 +5,14 @@
|
|
|
5
5
|
# distribution of this software and related documentation without an express
|
|
6
6
|
# license agreement from NVIDIA CORPORATION is strictly prohibited.
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
import numpy as np
|
|
10
|
-
import math
|
|
8
|
+
import unittest
|
|
11
9
|
|
|
12
10
|
import warp as wp
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
import unittest
|
|
11
|
+
import warp.tests.test_func as test_func
|
|
12
|
+
from warp.tests.unittest_utils import *
|
|
16
13
|
|
|
17
14
|
wp.init()
|
|
18
15
|
|
|
19
|
-
# from test_func import sqr
|
|
20
|
-
import warp.tests.test_func as test_func
|
|
21
|
-
|
|
22
16
|
|
|
23
17
|
@wp.kernel
|
|
24
18
|
def test_import_func():
|
|
@@ -30,23 +24,16 @@ def test_import_func():
|
|
|
30
24
|
wp.expect_eq(y, 8.0)
|
|
31
25
|
|
|
32
26
|
|
|
33
|
-
|
|
34
|
-
devices = get_test_devices()
|
|
35
|
-
|
|
36
|
-
class TestImport(parent):
|
|
37
|
-
pass
|
|
27
|
+
devices = get_test_devices()
|
|
38
28
|
|
|
39
|
-
add_kernel_test(TestImport, kernel=test_import_func, name="test_import_func", dim=1, devices=devices)
|
|
40
29
|
|
|
41
|
-
|
|
30
|
+
class TestImport(unittest.TestCase):
|
|
31
|
+
pass
|
|
42
32
|
|
|
43
33
|
|
|
44
|
-
|
|
45
|
-
c = register(unittest.TestCase)
|
|
46
|
-
# unittest.main(verbosity=2)
|
|
34
|
+
add_kernel_test(TestImport, kernel=test_import_func, name="test_import_func", dim=1, devices=devices)
|
|
47
35
|
|
|
48
|
-
wp.force_load()
|
|
49
36
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
37
|
+
if __name__ == "__main__":
|
|
38
|
+
wp.build.clear_kernel_cache()
|
|
39
|
+
unittest.main(verbosity=2)
|
warp/tests/test_indexedarray.py
CHANGED
|
@@ -5,15 +5,14 @@
|
|
|
5
5
|
# distribution of this software and related documentation without an express
|
|
6
6
|
# license agreement from NVIDIA CORPORATION is strictly prohibited.
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
import numpy as np
|
|
8
|
+
import unittest
|
|
10
9
|
from typing import Any
|
|
11
10
|
|
|
12
|
-
import
|
|
13
|
-
from warp.tests.test_base import *
|
|
14
|
-
from .test_array import FillStruct
|
|
11
|
+
import numpy as np
|
|
15
12
|
|
|
16
|
-
import
|
|
13
|
+
import warp as wp
|
|
14
|
+
from warp.tests.test_array import FillStruct
|
|
15
|
+
from warp.tests.unittest_utils import *
|
|
17
16
|
|
|
18
17
|
wp.init()
|
|
19
18
|
|
|
@@ -37,7 +36,7 @@ def test_indexedarray_1d(test, device):
|
|
|
37
36
|
|
|
38
37
|
indices = wp.array([1, 3, 5, 7, 9], dtype=int, device=device)
|
|
39
38
|
|
|
40
|
-
iarr = wp.
|
|
39
|
+
iarr = wp.indexedarray1d(arr, [indices])
|
|
41
40
|
|
|
42
41
|
test.assertEqual(iarr.dtype, arr.dtype)
|
|
43
42
|
test.assertEqual(iarr.ndim, 1)
|
|
@@ -73,7 +72,7 @@ def test_indexedarray_2d(test, device):
|
|
|
73
72
|
indices0 = wp.array([1, 3], dtype=int, device=device)
|
|
74
73
|
indices1 = wp.array([2, 4, 8], dtype=int, device=device)
|
|
75
74
|
|
|
76
|
-
iarr = wp.
|
|
75
|
+
iarr = wp.indexedarray2d(arr, [indices0, indices1])
|
|
77
76
|
|
|
78
77
|
test.assertEqual(iarr.dtype, arr.dtype)
|
|
79
78
|
test.assertEqual(iarr.ndim, 2)
|
|
@@ -113,7 +112,7 @@ def test_indexedarray_3d(test, device):
|
|
|
113
112
|
indices1 = wp.array([2, 4, 8], dtype=int, device=device)
|
|
114
113
|
indices2 = wp.array([0, 5], dtype=int, device=device)
|
|
115
114
|
|
|
116
|
-
iarr = wp.
|
|
115
|
+
iarr = wp.indexedarray3d(arr, [indices0, indices1, indices2])
|
|
117
116
|
|
|
118
117
|
test.assertEqual(iarr.dtype, arr.dtype)
|
|
119
118
|
test.assertEqual(iarr.ndim, 3)
|
|
@@ -158,7 +157,7 @@ def test_indexedarray_4d(test, device):
|
|
|
158
157
|
indices2 = wp.array([0, 5], dtype=int, device=device)
|
|
159
158
|
indices3 = wp.array([6, 7, 9], dtype=int, device=device)
|
|
160
159
|
|
|
161
|
-
iarr = wp.
|
|
160
|
+
iarr = wp.indexedarray4d(arr, [indices0, indices1, indices2, indices3])
|
|
162
161
|
|
|
163
162
|
test.assertEqual(iarr.dtype, arr.dtype)
|
|
164
163
|
test.assertEqual(iarr.ndim, 4)
|
|
@@ -919,7 +918,10 @@ def test_indexedarray_fill_matrix(test, device):
|
|
|
919
918
|
assert_np_equal(a4.numpy(), np.zeros((*a4.shape, *mat_shape), dtype=nptype))
|
|
920
919
|
|
|
921
920
|
# matrix values can be passed as a 1d numpy array, 2d numpy array, flat list, nested list, or Warp matrix instance
|
|
922
|
-
|
|
921
|
+
if wptype != wp.bool:
|
|
922
|
+
fill_arr1 = np.arange(mat_len, dtype=nptype)
|
|
923
|
+
else:
|
|
924
|
+
fill_arr1 = np.ones(mat_len, dtype=nptype)
|
|
923
925
|
fill_arr2 = fill_arr1.reshape(mat_shape)
|
|
924
926
|
fill_list1 = list(fill_arr1)
|
|
925
927
|
fill_list2 = [list(row) for row in fill_arr2]
|
|
@@ -1104,30 +1106,29 @@ def test_indexedarray_fill_struct(test, device):
|
|
|
1104
1106
|
assert_np_equal(a4.numpy(), np.zeros(a4.shape, dtype=nptype))
|
|
1105
1107
|
|
|
1106
1108
|
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
+
devices = get_test_devices()
|
|
1110
|
+
|
|
1109
1111
|
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
+
class TestIndexedArray(unittest.TestCase):
|
|
1113
|
+
pass
|
|
1112
1114
|
|
|
1113
|
-
add_function_test(TestIndexedArray, "test_indexedarray_1d", test_indexedarray_1d, devices=devices)
|
|
1114
|
-
add_function_test(TestIndexedArray, "test_indexedarray_2d", test_indexedarray_2d, devices=devices)
|
|
1115
|
-
add_function_test(TestIndexedArray, "test_indexedarray_3d", test_indexedarray_3d, devices=devices)
|
|
1116
|
-
add_function_test(TestIndexedArray, "test_indexedarray_4d", test_indexedarray_4d, devices=devices)
|
|
1117
|
-
add_function_test(TestIndexedArray, "test_indexedarray_mixed", test_indexedarray_mixed, devices=devices)
|
|
1118
|
-
add_function_test(TestIndexedArray, "test_indexedarray_shape", test_indexedarray_shape, devices=devices)
|
|
1119
|
-
add_function_test(TestIndexedArray, "test_indexedarray_getitem", test_indexedarray_getitem, devices=devices)
|
|
1120
|
-
add_function_test(TestIndexedArray, "test_indexedarray_slicing", test_indexedarray_slicing, devices=devices)
|
|
1121
|
-
add_function_test(TestIndexedArray, "test_indexedarray_generics", test_indexedarray_generics, devices=devices)
|
|
1122
|
-
add_function_test(TestIndexedArray, "test_indexedarray_empty", test_indexedarray_empty, devices=devices)
|
|
1123
|
-
add_function_test(TestIndexedArray, "test_indexedarray_fill_scalar", test_indexedarray_fill_scalar, devices=devices)
|
|
1124
|
-
add_function_test(TestIndexedArray, "test_indexedarray_fill_vector", test_indexedarray_fill_vector, devices=devices)
|
|
1125
|
-
add_function_test(TestIndexedArray, "test_indexedarray_fill_matrix", test_indexedarray_fill_matrix, devices=devices)
|
|
1126
|
-
add_function_test(TestIndexedArray, "test_indexedarray_fill_struct", test_indexedarray_fill_struct, devices=devices)
|
|
1127
1115
|
|
|
1128
|
-
|
|
1116
|
+
add_function_test(TestIndexedArray, "test_indexedarray_1d", test_indexedarray_1d, devices=devices)
|
|
1117
|
+
add_function_test(TestIndexedArray, "test_indexedarray_2d", test_indexedarray_2d, devices=devices)
|
|
1118
|
+
add_function_test(TestIndexedArray, "test_indexedarray_3d", test_indexedarray_3d, devices=devices)
|
|
1119
|
+
add_function_test(TestIndexedArray, "test_indexedarray_4d", test_indexedarray_4d, devices=devices)
|
|
1120
|
+
add_function_test(TestIndexedArray, "test_indexedarray_mixed", test_indexedarray_mixed, devices=devices)
|
|
1121
|
+
add_function_test(TestIndexedArray, "test_indexedarray_shape", test_indexedarray_shape, devices=devices)
|
|
1122
|
+
add_function_test(TestIndexedArray, "test_indexedarray_getitem", test_indexedarray_getitem, devices=devices)
|
|
1123
|
+
add_function_test(TestIndexedArray, "test_indexedarray_slicing", test_indexedarray_slicing, devices=devices)
|
|
1124
|
+
add_function_test(TestIndexedArray, "test_indexedarray_generics", test_indexedarray_generics, devices=devices)
|
|
1125
|
+
add_function_test(TestIndexedArray, "test_indexedarray_empty", test_indexedarray_empty, devices=devices)
|
|
1126
|
+
add_function_test(TestIndexedArray, "test_indexedarray_fill_scalar", test_indexedarray_fill_scalar, devices=devices)
|
|
1127
|
+
add_function_test(TestIndexedArray, "test_indexedarray_fill_vector", test_indexedarray_fill_vector, devices=devices)
|
|
1128
|
+
add_function_test(TestIndexedArray, "test_indexedarray_fill_matrix", test_indexedarray_fill_matrix, devices=devices)
|
|
1129
|
+
add_function_test(TestIndexedArray, "test_indexedarray_fill_struct", test_indexedarray_fill_struct, devices=devices)
|
|
1129
1130
|
|
|
1130
1131
|
|
|
1131
1132
|
if __name__ == "__main__":
|
|
1132
|
-
|
|
1133
|
+
wp.build.clear_kernel_cache()
|
|
1133
1134
|
unittest.main(verbosity=2)
|
warp/tests/test_intersect.py
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
# Copyright (c) 2022 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
|
+
|
|
2
10
|
import numpy as np
|
|
3
|
-
|
|
11
|
+
|
|
12
|
+
import warp as wp
|
|
13
|
+
from warp.tests.unittest_utils import *
|
|
4
14
|
|
|
5
15
|
wp.init()
|
|
6
16
|
|
|
@@ -42,17 +52,16 @@ def test_intersect_tri(test, device):
|
|
|
42
52
|
assert_np_equal(result.numpy(), np.array([0]))
|
|
43
53
|
|
|
44
54
|
|
|
45
|
-
|
|
46
|
-
|
|
55
|
+
devices = get_test_devices()
|
|
56
|
+
|
|
47
57
|
|
|
48
|
-
|
|
49
|
-
|
|
58
|
+
class TestIntersect(unittest.TestCase):
|
|
59
|
+
pass
|
|
50
60
|
|
|
51
|
-
add_function_test(TestIntersect, "test_intersect_tri", test_intersect_tri, devices=devices)
|
|
52
61
|
|
|
53
|
-
|
|
62
|
+
add_function_test(TestIntersect, "test_intersect_tri", test_intersect_tri, devices=devices)
|
|
54
63
|
|
|
55
64
|
|
|
56
65
|
if __name__ == "__main__":
|
|
57
|
-
|
|
66
|
+
wp.build.clear_kernel_cache()
|
|
58
67
|
unittest.main(verbosity=2, failfast=False)
|
warp/tests/test_large.py
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
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 math
|
|
9
|
+
import unittest
|
|
10
|
+
|
|
11
|
+
import warp as wp
|
|
12
|
+
from warp.tests.unittest_utils import *
|
|
13
|
+
|
|
14
|
+
wp.init()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@wp.kernel
|
|
18
|
+
def conditional_sum(result: wp.array(dtype=wp.uint64)):
|
|
19
|
+
i, j, k = wp.tid()
|
|
20
|
+
|
|
21
|
+
if i == 0:
|
|
22
|
+
wp.atomic_add(result, 0, wp.uint64(1))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_large_launch_large_kernel(test, device):
|
|
26
|
+
"""Test tid() on kernel launch of 2**33 threads.
|
|
27
|
+
|
|
28
|
+
The function conditional sum will add 1 to result for every thread that has an i index of 0.
|
|
29
|
+
Due to the size of the grid, this test is not run on CPUs
|
|
30
|
+
"""
|
|
31
|
+
test_result = wp.zeros(shape=(1,), dtype=wp.uint64, device=device)
|
|
32
|
+
|
|
33
|
+
large_dim_length = 2**16
|
|
34
|
+
half_result = large_dim_length * large_dim_length
|
|
35
|
+
|
|
36
|
+
wp.launch(kernel=conditional_sum, dim=[2, large_dim_length, large_dim_length], inputs=[test_result], device=device)
|
|
37
|
+
test.assertEqual(test_result.numpy()[0], half_result)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@wp.kernel
|
|
41
|
+
def count_elements(result: wp.array(dtype=wp.uint64)):
|
|
42
|
+
wp.atomic_add(result, 0, wp.uint64(1))
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def test_large_launch_max_blocks(test, device):
|
|
46
|
+
# Loop over 1000x1x1 elements using a grid of 256 threads
|
|
47
|
+
test_result = wp.zeros(shape=(1,), dtype=wp.uint64, device=device)
|
|
48
|
+
wp.launch(count_elements, (1000,), inputs=[test_result], max_blocks=1, device=device)
|
|
49
|
+
test.assertEqual(test_result.numpy()[0], 1000)
|
|
50
|
+
|
|
51
|
+
# Loop over 2x10x10 elements using a grid of 256 threads, using the tid() index to count half the elements
|
|
52
|
+
test_result.zero_()
|
|
53
|
+
wp.launch(
|
|
54
|
+
conditional_sum,
|
|
55
|
+
(
|
|
56
|
+
2,
|
|
57
|
+
50,
|
|
58
|
+
10,
|
|
59
|
+
),
|
|
60
|
+
inputs=[test_result],
|
|
61
|
+
max_blocks=1,
|
|
62
|
+
device=device,
|
|
63
|
+
)
|
|
64
|
+
test.assertEqual(test_result.numpy()[0], 500)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def test_large_launch_very_large_kernel(test, device):
|
|
68
|
+
"""Due to the size of the grid, this test is not run on CPUs"""
|
|
69
|
+
|
|
70
|
+
# Dim is chosen to be larger than the maximum CUDA one-dimensional grid size (total threads)
|
|
71
|
+
dim = (2**31 - 1) * 256 + 1
|
|
72
|
+
test_result = wp.zeros(shape=(1,), dtype=wp.uint64, device=device)
|
|
73
|
+
wp.launch(count_elements, (dim,), inputs=[test_result], device=device)
|
|
74
|
+
test.assertEqual(test_result.numpy()[0], dim)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def test_large_arrays_slow(test, device):
|
|
78
|
+
# The goal of this test is to use arrays just large enough to know
|
|
79
|
+
# if there's a flaw in handling arrays with more than 2**31-1 elements
|
|
80
|
+
# Unfortunately, it takes a long time to run so it won't be run automatically
|
|
81
|
+
# without changes to support how frequently a test may be run
|
|
82
|
+
total_elements = 2**31 + 8
|
|
83
|
+
|
|
84
|
+
# 1-D to 4-D arrays: test zero_, fill_, then zero_ for scalar data types:
|
|
85
|
+
for total_dims in range(1, 5):
|
|
86
|
+
dim_x = math.ceil(total_elements ** (1 / total_dims))
|
|
87
|
+
shape_tuple = tuple([dim_x] * total_dims)
|
|
88
|
+
|
|
89
|
+
for nptype, wptype in wp.types.np_dtype_to_warp_type.items():
|
|
90
|
+
a1 = wp.zeros(shape_tuple, dtype=wptype, device=device)
|
|
91
|
+
assert_np_equal(a1.numpy(), np.zeros_like(a1.numpy()))
|
|
92
|
+
|
|
93
|
+
a1.fill_(127)
|
|
94
|
+
assert_np_equal(a1.numpy(), 127 * np.ones_like(a1.numpy()))
|
|
95
|
+
|
|
96
|
+
a1.zero_()
|
|
97
|
+
assert_np_equal(a1.numpy(), np.zeros_like(a1.numpy()))
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def test_large_arrays_fast(test, device):
|
|
101
|
+
# A truncated version of test_large_arrays_slow meant to catch basic errors
|
|
102
|
+
total_elements = 2**31 + 8
|
|
103
|
+
|
|
104
|
+
nptype = np.dtype(np.int8)
|
|
105
|
+
wptype = wp.types.np_dtype_to_warp_type[nptype]
|
|
106
|
+
|
|
107
|
+
a1 = wp.zeros((total_elements,), dtype=wptype, device=device)
|
|
108
|
+
assert_np_equal(a1.numpy(), np.zeros_like(a1.numpy()))
|
|
109
|
+
|
|
110
|
+
a1.fill_(127)
|
|
111
|
+
assert_np_equal(a1.numpy(), 127 * np.ones_like(a1.numpy()))
|
|
112
|
+
|
|
113
|
+
a1.zero_()
|
|
114
|
+
assert_np_equal(a1.numpy(), np.zeros_like(a1.numpy()))
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
devices = get_test_devices()
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class TestLarge(unittest.TestCase):
|
|
121
|
+
pass
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
add_function_test(
|
|
125
|
+
TestLarge, "test_large_launch_large_kernel", test_large_launch_large_kernel, devices=get_unique_cuda_test_devices()
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
add_function_test(TestLarge, "test_large_launch_max_blocks", test_large_launch_max_blocks, devices=devices)
|
|
129
|
+
add_function_test(
|
|
130
|
+
TestLarge,
|
|
131
|
+
"test_large_launch_very_large_kernel",
|
|
132
|
+
test_large_launch_very_large_kernel,
|
|
133
|
+
devices=get_unique_cuda_test_devices(),
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
add_function_test(TestLarge, "test_large_arrays_fast", test_large_arrays_fast, devices=devices)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
if __name__ == "__main__":
|
|
140
|
+
wp.build.clear_kernel_cache()
|
|
141
|
+
unittest.main(verbosity=2)
|
warp/tests/test_launch.py
CHANGED
|
@@ -7,11 +7,10 @@
|
|
|
7
7
|
|
|
8
8
|
import unittest
|
|
9
9
|
|
|
10
|
-
# include parent path
|
|
11
10
|
import numpy as np
|
|
12
11
|
|
|
13
12
|
import warp as wp
|
|
14
|
-
from warp.tests.
|
|
13
|
+
from warp.tests.unittest_utils import *
|
|
15
14
|
|
|
16
15
|
wp.init()
|
|
17
16
|
|
|
@@ -306,51 +305,25 @@ def test_launch_tuple_args(test, device):
|
|
|
306
305
|
assert_np_equal(out.numpy(), np.array((0, 3, 6, 9)))
|
|
307
306
|
|
|
308
307
|
|
|
309
|
-
|
|
310
|
-
def conditional_sum(result: wp.array(dtype=wp.uint64)):
|
|
311
|
-
i, j, k = wp.tid()
|
|
312
|
-
|
|
313
|
-
if i == 0:
|
|
314
|
-
wp.atomic_add(result, 0, wp.uint64(1))
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
def test_launch_large_kernel(test, device):
|
|
318
|
-
"""Test tid() on kernel launch of 2**33 threads.
|
|
319
|
-
|
|
320
|
-
The function conditional sum will add 1 to result for every thread that has an i index of 0.
|
|
321
|
-
Due to the size of the grid, this test is not run on CPUs
|
|
322
|
-
"""
|
|
323
|
-
test_result = wp.zeros(shape=(1,), dtype=wp.uint64, device=device)
|
|
324
|
-
|
|
325
|
-
large_dim_length = 2**16
|
|
326
|
-
half_result = large_dim_length * large_dim_length
|
|
327
|
-
|
|
328
|
-
wp.launch(kernel=conditional_sum, dim=[2, large_dim_length, large_dim_length], inputs=[test_result], device=device)
|
|
329
|
-
test.assertEqual(test_result.numpy()[0], half_result)
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
def register(parent):
|
|
333
|
-
devices = get_test_devices()
|
|
308
|
+
devices = get_test_devices()
|
|
334
309
|
|
|
335
|
-
class TestLaunch(parent):
|
|
336
|
-
pass
|
|
337
310
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
add_function_test(TestLaunch, "test_launch_3d", test3d, devices=devices)
|
|
341
|
-
add_function_test(TestLaunch, "test_launch_4d", test4d, devices=devices)
|
|
311
|
+
class TestLaunch(unittest.TestCase):
|
|
312
|
+
pass
|
|
342
313
|
|
|
343
|
-
add_function_test(TestLaunch, "test_launch_cmd", test_launch_cmd, devices=devices)
|
|
344
|
-
add_function_test(TestLaunch, "test_launch_cmd_set_param", test_launch_cmd_set_param, devices=devices)
|
|
345
|
-
add_function_test(TestLaunch, "test_launch_cmd_set_ctype", test_launch_cmd_set_ctype, devices=devices)
|
|
346
|
-
add_function_test(TestLaunch, "test_launch_cmd_set_dim", test_launch_cmd_set_dim, devices=devices)
|
|
347
|
-
add_function_test(TestLaunch, "test_launch_cmd_empty", test_launch_cmd_empty, devices=devices)
|
|
348
314
|
|
|
349
|
-
|
|
315
|
+
add_function_test(TestLaunch, "test_launch_1d", test1d, devices=devices)
|
|
316
|
+
add_function_test(TestLaunch, "test_launch_2d", test2d, devices=devices)
|
|
317
|
+
add_function_test(TestLaunch, "test_launch_3d", test3d, devices=devices)
|
|
318
|
+
add_function_test(TestLaunch, "test_launch_4d", test4d, devices=devices)
|
|
350
319
|
|
|
351
|
-
|
|
320
|
+
add_function_test(TestLaunch, "test_launch_cmd", test_launch_cmd, devices=devices)
|
|
321
|
+
add_function_test(TestLaunch, "test_launch_cmd_set_param", test_launch_cmd_set_param, devices=devices)
|
|
322
|
+
add_function_test(TestLaunch, "test_launch_cmd_set_ctype", test_launch_cmd_set_ctype, devices=devices)
|
|
323
|
+
add_function_test(TestLaunch, "test_launch_cmd_set_dim", test_launch_cmd_set_dim, devices=devices)
|
|
324
|
+
add_function_test(TestLaunch, "test_launch_cmd_empty", test_launch_cmd_empty, devices=devices)
|
|
352
325
|
|
|
353
326
|
|
|
354
327
|
if __name__ == "__main__":
|
|
355
|
-
|
|
328
|
+
wp.build.clear_kernel_cache()
|
|
356
329
|
unittest.main(verbosity=2)
|