mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-08-01 03:12:49 +08:00
Summary: Torch CUDA extension for Marching Cubes - MC involving 3 steps: - 1st forward pass to collect vertices and occupied state for each voxel - Compute compactVoxelArray to skip non-empty voxels - 2nd pass to genereate interpolated vertex positions and faces by marching through the grid - In contrast to existing MC: - Bind each interpolated vertex with a global edge_id to address floating-point precision - Added deduplication process to remove redundant vertices and faces Benchmarks (ms): | N / V(^3) | python | C++ | CUDA | Speedup | | 2 / 20 | 12176873 | 24338 | 4363 | 2790x/5x| | 1 / 100 | - | 3070511 | 27126 | 113x | | 2 / 100 | - | 5968934 | 53129 | 112x | | 1 / 256 | - | 61278092 | 430900 | 142x | | 2 / 256 | - |125687930 | 856941 | 146x | Reviewed By: kjchalup Differential Revision: D39644248 fbshipit-source-id: d679c0c79d67b98b235d12296f383d760a00042a
36 lines
902 B
Python
36 lines
902 B
Python
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
# All rights reserved.
|
|
#
|
|
# This source code is licensed under the BSD-style license found in the
|
|
# LICENSE file in the root directory of this source tree.
|
|
|
|
import itertools
|
|
|
|
from fvcore.common.benchmark import benchmark
|
|
from tests.test_marching_cubes import TestMarchingCubes
|
|
|
|
|
|
def bm_marching_cubes() -> None:
|
|
case_grid = {
|
|
"algo_type": [
|
|
"naive",
|
|
"extension",
|
|
],
|
|
"batch_size": [1, 2],
|
|
"V": [5, 10, 20, 100, 512],
|
|
"device": ["cpu", "cuda:0"],
|
|
}
|
|
test_cases = itertools.product(*case_grid.values())
|
|
kwargs_list = [dict(zip(case_grid.keys(), case)) for case in test_cases]
|
|
|
|
benchmark(
|
|
TestMarchingCubes.marching_cubes_with_init,
|
|
"MARCHING_CUBES",
|
|
kwargs_list,
|
|
warmup_iters=1,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
bm_marching_cubes()
|