mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-12-19 05:40:34 +08:00
use workaround for points_normals
Summary: Use existing workaround for batched 3x3 symeig because it is faster than torch.symeig. Added benchmark showing speedup. True = workaround. ``` Benchmark Avg Time(μs) Peak Time(μs) Iterations -------------------------------------------------------------------------------- normals_True_3000 16237 17233 31 normals_True_6000 33028 33391 16 normals_False_3000 18623069 18623069 1 normals_False_6000 36535475 36535475 1 ``` Should help https://github.com/facebookresearch/pytorch3d/issues/988 Reviewed By: nikhilaravi Differential Revision: D33660585 fbshipit-source-id: d1162b277f5d61ed67e367057a61f25e03888dce
This commit is contained in:
committed by
Facebook GitHub Bot
parent
5053142363
commit
c2862ff427
47
tests/benchmarks/bm_points_normals.py
Normal file
47
tests/benchmarks/bm_points_normals.py
Normal file
@@ -0,0 +1,47 @@
|
||||
# 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
|
||||
|
||||
import torch
|
||||
from fvcore.common.benchmark import benchmark
|
||||
from pytorch3d.ops import estimate_pointcloud_normals
|
||||
from test_points_normals import TestPCLNormals
|
||||
|
||||
|
||||
def to_bm(num_points, use_symeig_workaround):
|
||||
device = torch.device("cuda:0")
|
||||
points_padded, _normals = TestPCLNormals.init_spherical_pcl(
|
||||
num_points=num_points, device=device, use_pointclouds=False
|
||||
)
|
||||
torch.cuda.synchronize()
|
||||
|
||||
def run():
|
||||
estimate_pointcloud_normals(
|
||||
points_padded, use_symeig_workaround=use_symeig_workaround
|
||||
)
|
||||
torch.cuda.synchronize()
|
||||
|
||||
return run
|
||||
|
||||
|
||||
def bm_points_normals() -> None:
|
||||
case_grid = {
|
||||
"use_symeig_workaround": [True, False],
|
||||
"num_points": [3000, 6000],
|
||||
}
|
||||
test_cases = itertools.product(*case_grid.values())
|
||||
kwargs_list = [dict(zip(case_grid.keys(), case)) for case in test_cases]
|
||||
benchmark(
|
||||
to_bm,
|
||||
"normals",
|
||||
kwargs_list,
|
||||
warmup_iters=1,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bm_points_normals()
|
||||
Reference in New Issue
Block a user