Spaces:
Running
Running
# 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 os | |
from itertools import product | |
import torch | |
from fvcore.common.benchmark import benchmark | |
from tests.test_rasterize_meshes import TestRasterizeMeshes | |
BM_RASTERIZE_MESHES_N_THREADS = os.getenv("BM_RASTERIZE_MESHES_N_THREADS", 1) | |
torch.set_num_threads(int(BM_RASTERIZE_MESHES_N_THREADS)) | |
# ico levels: | |
# 0: (12 verts, 20 faces) | |
# 1: (42 verts, 80 faces) | |
# 3: (642 verts, 1280 faces) | |
# 4: (2562 verts, 5120 faces) | |
# 5: (10242 verts, 20480 faces) | |
# 6: (40962 verts, 81920 faces) | |
def bm_rasterize_meshes() -> None: | |
kwargs_list = [ | |
{ | |
"num_meshes": 1, | |
"ico_level": 0, | |
"image_size": 10, # very slow with large image size | |
"blur_radius": 0.0, | |
"faces_per_pixel": 3, | |
} | |
] | |
benchmark( | |
TestRasterizeMeshes.rasterize_meshes_python_with_init, | |
"RASTERIZE_MESHES", | |
kwargs_list, | |
warmup_iters=1, | |
) | |
kwargs_list = [] | |
num_meshes = [1] | |
ico_level = [1] | |
image_size = [64, 128, 512] | |
blur = [1e-6] | |
faces_per_pixel = [3, 50] | |
test_cases = product(num_meshes, ico_level, image_size, blur, faces_per_pixel) | |
for case in test_cases: | |
n, ic, im, b, f = case | |
kwargs_list.append( | |
{ | |
"num_meshes": n, | |
"ico_level": ic, | |
"image_size": im, | |
"blur_radius": b, | |
"faces_per_pixel": f, | |
} | |
) | |
benchmark( | |
TestRasterizeMeshes.rasterize_meshes_cpu_with_init, | |
"RASTERIZE_MESHES", | |
kwargs_list, | |
warmup_iters=1, | |
) | |
if torch.cuda.is_available(): | |
kwargs_list = [] | |
num_meshes = [8, 16] | |
ico_level = [4, 5, 6] | |
# Square and non square cases | |
image_size = [64, 128, 512, (512, 256), (256, 512)] | |
blur = [1e-6] | |
faces_per_pixel = [40] | |
test_cases = product(num_meshes, ico_level, image_size, blur, faces_per_pixel) | |
for case in test_cases: | |
n, ic, im, b, f = case | |
kwargs_list.append( | |
{ | |
"num_meshes": n, | |
"ico_level": ic, | |
"image_size": im, | |
"blur_radius": b, | |
"faces_per_pixel": f, | |
} | |
) | |
benchmark( | |
TestRasterizeMeshes.rasterize_meshes_cuda_with_init, | |
"RASTERIZE_MESHES_CUDA", | |
kwargs_list, | |
warmup_iters=1, | |
) | |
# Test a subset of the cases with the | |
# image plane intersecting the mesh. | |
kwargs_list = [] | |
num_meshes = [8, 16] | |
# Square and non square cases | |
image_size = [64, 128, 512, (512, 256), (256, 512)] | |
dist = [3, 0.8, 0.5] | |
test_cases = product(num_meshes, dist, image_size) | |
for case in test_cases: | |
n, d, im = case | |
kwargs_list.append( | |
{ | |
"num_meshes": n, | |
"ico_level": 4, | |
"image_size": im, | |
"blur_radius": 1e-6, | |
"faces_per_pixel": 40, | |
"dist": d, | |
} | |
) | |
benchmark( | |
TestRasterizeMeshes.bm_rasterize_meshes_with_clipping, | |
"RASTERIZE_MESHES_CUDA_CLIPPING", | |
kwargs_list, | |
warmup_iters=1, | |
) | |
if __name__ == "__main__": | |
bm_rasterize_meshes() | |