Skip to content

Commit 7d831a2

Browse files
authored
Restructuring C++ project: (#3146)
Summary: * Reduce unnecessary header inclusions in models and io. * Move autocast to separate folder and hide autograd implementation in an anonymous namespace. * Moving files in subfolders. Reviewed By: fmassa Differential Revision: D25461523 fbshipit-source-id: 756eeb6848aacaa474de4825ed4c1045d17e2cea
1 parent 4d3a309 commit 7d831a2

File tree

104 files changed

+318
-302
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+318
-302
lines changed

CMakeLists.txt

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,6 @@ function(CUDA_CONVERT_FLAGS EXISTING_TARGET)
2828
endif()
2929
endfunction()
3030

31-
file(GLOB HEADERS torchvision/csrc/*.h)
32-
# Image extension
33-
file(GLOB IMAGE_HEADERS torchvision/csrc/cpu/image/*.h)
34-
file(GLOB IMAGE_SOURCES torchvision/csrc/cpu/image/*.cpp)
35-
file(GLOB OPERATOR_HEADERS torchvision/csrc/cpu/*.h)
36-
file(GLOB OPERATOR_SOURCES ${OPERATOR_HEADERS} torchvision/csrc/cpu/*.cpp ${IMAGE_HEADERS} ${IMAGE_SOURCES} ${HEADERS} torchvision/csrc/*.cpp)
37-
if(WITH_CUDA)
38-
file(GLOB OPERATOR_HEADERS ${OPERATOR_HEADERS} torchvision/csrc/cuda/*.h)
39-
file(GLOB OPERATOR_SOURCES ${OPERATOR_SOURCES} ${OPERATOR_HEADERS} torchvision/csrc/cuda/*.cu)
40-
endif()
41-
file(GLOB MODELS_HEADERS torchvision/csrc/models/*.h)
42-
file(GLOB MODELS_SOURCES torchvision/csrc/models/*.h torchvision/csrc/models/*.cpp)
43-
4431
if(MSVC)
4532
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4819")
4633
if(WITH_CUDA)
@@ -64,7 +51,17 @@ endif()
6451
include(GNUInstallDirs)
6552
include(CMakePackageConfigHelpers)
6653

67-
add_library(${PROJECT_NAME} SHARED ${MODELS_SOURCES} ${OPERATOR_SOURCES} ${IMAGE_SOURCES})
54+
set(TVCPP torchvision/csrc)
55+
list(APPEND ALLOW_LISTED ${TVCPP} ${TVCPP}/io/image ${TVCPP}/io/image/cpu ${TVCPP}/models ${TVCPP}/ops ${TVCPP}/ops/cpu)
56+
if(WITH_CUDA)
57+
list(APPEND ALLOW_LISTED ${TVCPP}/ops/cuda ${TVCPP}/ops/autocast)
58+
endif()
59+
60+
FOREACH(DIR ${ALLOW_LISTED})
61+
file(GLOB ALL_SOURCES ${ALL_SOURCES} ${DIR}/*.*)
62+
ENDFOREACH()
63+
64+
add_library(${PROJECT_NAME} SHARED ${ALL_SOURCES})
6865
target_link_libraries(${PROJECT_NAME} PRIVATE ${TORCH_LIBRARIES} ${PNG_LIBRARY} ${JPEG_LIBRARIES} Python3::Python)
6966
set_target_properties(${PROJECT_NAME} PROPERTIES
7067
EXPORT_NAME TorchVision
@@ -95,13 +92,8 @@ install(EXPORT TorchVisionTargets
9592
NAMESPACE TorchVision::
9693
DESTINATION ${TORCHVISION_CMAKECONFIG_INSTALL_DIR})
9794

98-
install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
99-
install(FILES
100-
${OPERATOR_HEADERS}
101-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/cpu)
102-
if(WITH_CUDA)
103-
install(FILES
104-
${OPERATOR_HEADERS}
105-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/cuda)
106-
endif()
107-
install(FILES ${MODELS_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/models)
95+
FOREACH(INPUT_DIR ${ALLOW_LISTED})
96+
string(REPLACE "${TVCPP}" "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}" OUTPUT_DIR ${INPUT_DIR})
97+
file(GLOB INPUT_FILES ${INPUT_DIR}/*.*)
98+
install(FILES ${INPUT_FILES} DESTINATION ${OUTPUT_DIR})
99+
ENDFOREACH()

examples/cpp/hello_world/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#include <iostream>
2+
#include <torch/torch.h>
3+
#include <torchvision/vision.h>
24
#include <torchvision/models/resnet.h>
35

46
int main()

setup.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,9 @@ def get_extensions():
134134
this_dir = os.path.dirname(os.path.abspath(__file__))
135135
extensions_dir = os.path.join(this_dir, 'torchvision', 'csrc')
136136

137-
main_file = glob.glob(os.path.join(extensions_dir, '*.cpp'))
138-
source_cpu = glob.glob(os.path.join(extensions_dir, 'cpu', '*.cpp'))
137+
main_file = glob.glob(os.path.join(extensions_dir, '*.cpp')) + glob.glob(os.path.join(extensions_dir, 'ops',
138+
'*.cpp'))
139+
source_cpu = glob.glob(os.path.join(extensions_dir, 'ops', 'cpu', '*.cpp'))
139140

140141
is_rocm_pytorch = False
141142
if torch.__version__ >= '1.5':
@@ -146,17 +147,19 @@ def get_extensions():
146147
hipify_python.hipify(
147148
project_directory=this_dir,
148149
output_directory=this_dir,
149-
includes="torchvision/csrc/cuda/*",
150+
includes="torchvision/csrc/ops/cuda/*",
150151
show_detailed=True,
151152
is_pytorch_extension=True,
152153
)
153-
source_cuda = glob.glob(os.path.join(extensions_dir, 'hip', '*.hip'))
154+
source_cuda = glob.glob(os.path.join(extensions_dir, 'ops', 'hip', '*.hip'))
154155
# Copy over additional files
155-
for file in glob.glob(r"torchvision/csrc/cuda/*.h"):
156-
shutil.copy(file, "torchvision/csrc/hip")
156+
for file in glob.glob(r"torchvision/csrc/ops/cuda/*.h"):
157+
shutil.copy(file, "torchvision/csrc/ops/hip")
157158

158159
else:
159-
source_cuda = glob.glob(os.path.join(extensions_dir, 'cuda', '*.cu'))
160+
source_cuda = glob.glob(os.path.join(extensions_dir, 'ops', 'cuda', '*.cu'))
161+
162+
source_cuda += glob.glob(os.path.join(extensions_dir, 'ops', 'autocast', '*.cpp'))
160163

161164
sources = main_file + source_cpu
162165
extension = CppExtension
@@ -309,8 +312,8 @@ def get_extensions():
309312
image_library += [jpeg_lib]
310313
image_include += [jpeg_include]
311314

312-
image_path = os.path.join(extensions_dir, 'cpu', 'image')
313-
image_src = glob.glob(os.path.join(image_path, '*.cpp'))
315+
image_path = os.path.join(extensions_dir, 'io', 'image')
316+
image_src = glob.glob(os.path.join(image_path, '*.cpp')) + glob.glob(os.path.join(image_path, 'cpu', '*.cpp'))
314317

315318
if png_found or jpeg_found:
316319
ext_modules.append(extension(
@@ -377,13 +380,13 @@ def get_extensions():
377380
print("ffmpeg library_dir: {}".format(ffmpeg_library_dir))
378381

379382
# TorchVision base decoder + video reader
380-
video_reader_src_dir = os.path.join(this_dir, 'torchvision', 'csrc', 'cpu', 'video_reader')
383+
video_reader_src_dir = os.path.join(this_dir, 'torchvision', 'csrc', 'io', 'video_reader')
381384
video_reader_src = glob.glob(os.path.join(video_reader_src_dir, "*.cpp"))
382-
base_decoder_src_dir = os.path.join(this_dir, 'torchvision', 'csrc', 'cpu', 'decoder')
385+
base_decoder_src_dir = os.path.join(this_dir, 'torchvision', 'csrc', 'io', 'decoder')
383386
base_decoder_src = glob.glob(
384387
os.path.join(base_decoder_src_dir, "*.cpp"))
385388
# Torchvision video API
386-
videoapi_src_dir = os.path.join(this_dir, 'torchvision', 'csrc', 'cpu', 'video')
389+
videoapi_src_dir = os.path.join(this_dir, 'torchvision', 'csrc', 'io', 'video')
387390
videoapi_src = glob.glob(os.path.join(videoapi_src_dir, "*.cpp"))
388391
# exclude tests
389392
base_decoder_src = [x for x in base_decoder_src if '_test.cpp' not in x]

test/tracing/frcnn/test_frcnn_tracing.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
#include <ATen/ATen.h>
21
#include <torch/script.h>
32
#include <torch/torch.h>
4-
#include <torchvision/nms.h>
5-
#include <torchvision/roi_align.h>
3+
#include <torchvision/vision.h>
4+
#include <torchvision/ops/nms.h>
65

76
#ifdef _WIN32
87
// Windows only

torchvision/csrc/cpu/image/image.h

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)