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.

torchvision/csrc/cpu/image/read_image_cpu.cpp renamed to torchvision/csrc/io/image/cpu/read_image_cpu.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "read_image_cpu.h"
2+
23
#include "readjpeg_cpu.h"
34
#include "readpng_cpu.h"
45

torchvision/csrc/cpu/image/read_image_cpu.h renamed to torchvision/csrc/io/image/cpu/read_image_cpu.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#pragma once
22

3-
#include <torch/torch.h>
4-
#include "image_read_mode.h"
3+
#include <torch/types.h>
4+
#include "../image_read_mode.h"
55

66
C10_EXPORT torch::Tensor decode_image(
77
const torch::Tensor& data,

torchvision/csrc/cpu/image/read_write_file_cpu.h renamed to torchvision/csrc/io/image/cpu/read_write_file_cpu.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
#pragma once
22

3-
#include <errno.h>
43
#include <sys/stat.h>
5-
#include <torch/torch.h>
4+
#include <torch/types.h>
65

76
C10_EXPORT torch::Tensor read_file(const std::string& filename);
87

torchvision/csrc/cpu/image/readjpeg_cpu.cpp renamed to torchvision/csrc/io/image/cpu/readjpeg_cpu.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
#include "readjpeg_cpu.h"
22

3-
#include <ATen/ATen.h>
4-
53
#if !JPEG_FOUND
64
torch::Tensor decodeJPEG(const torch::Tensor& data, ImageReadMode mode) {
75
TORCH_CHECK(
86
false, "decodeJPEG: torchvision not compiled with libjpeg support");
97
}
108
#else
11-
#include <jpeglib.h>
12-
#include <setjmp.h>
13-
#include "jpegcommon.h"
9+
#include "../jpegcommon.h"
1410

1511
struct torch_jpeg_mgr {
1612
struct jpeg_source_mgr pub;

torchvision/csrc/cpu/image/readjpeg_cpu.h renamed to torchvision/csrc/io/image/cpu/readjpeg_cpu.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#pragma once
22

3-
#include <torch/torch.h>
4-
#include "image_read_mode.h"
3+
#include <torch/types.h>
4+
#include "../image_read_mode.h"
55

66
C10_EXPORT torch::Tensor decodeJPEG(
77
const torch::Tensor& data,

torchvision/csrc/cpu/image/readpng_cpu.cpp renamed to torchvision/csrc/io/image/cpu/readpng_cpu.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#include "readpng_cpu.h"
22

3-
#include <ATen/ATen.h>
4-
53
#if !PNG_FOUND
64
torch::Tensor decodePNG(const torch::Tensor& data, ImageReadMode mode) {
75
TORCH_CHECK(false, "decodePNG: torchvision not compiled with libPNG support");

torchvision/csrc/cpu/image/readpng_cpu.h renamed to torchvision/csrc/io/image/cpu/readpng_cpu.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#pragma once
22

3-
#include <torch/torch.h>
4-
#include "image_read_mode.h"
3+
#include <torch/types.h>
4+
#include "../image_read_mode.h"
55

66
C10_EXPORT torch::Tensor decodePNG(
77
const torch::Tensor& data,

torchvision/csrc/cpu/image/writejpeg_cpu.cpp renamed to torchvision/csrc/io/image/cpu/writejpeg_cpu.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
#include "writejpeg_cpu.h"
22

3-
#include <setjmp.h>
4-
#include <string>
5-
63
#if !JPEG_FOUND
74

85
torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality) {
@@ -11,9 +8,7 @@ torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality) {
118
}
129

1310
#else
14-
15-
#include <jpeglib.h>
16-
#include "jpegcommon.h"
11+
#include "../jpegcommon.h"
1712

1813
torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality) {
1914
// Define compression structures and error handling
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#pragma once
22

3-
#include <torch/torch.h>
3+
#include <torch/types.h>
44

55
C10_EXPORT torch::Tensor encodeJPEG(const torch::Tensor& data, int64_t quality);

torchvision/csrc/cpu/image/writepng_cpu.cpp renamed to torchvision/csrc/io/image/cpu/writepng_cpu.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
#include "writejpeg_cpu.h"
22

3-
#include <setjmp.h>
4-
#include <string>
5-
63
#if !PNG_FOUND
74

85
torch::Tensor encodePNG(const torch::Tensor& data, int64_t compression_level) {
96
TORCH_CHECK(false, "encodePNG: torchvision not compiled with libpng support");
107
}
118

129
#else
13-
1410
#include <png.h>
11+
#include <setjmp.h>
1512

1613
struct torch_mem_encode {
1714
char* buffer;

torchvision/csrc/cpu/image/writepng_cpu.h renamed to torchvision/csrc/io/image/cpu/writepng_cpu.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
#include <torch/torch.h>
3+
#include <torch/types.h>
44

55
C10_EXPORT torch::Tensor encodePNG(
66
const torch::Tensor& data,

torchvision/csrc/cpu/image/image.cpp renamed to torchvision/csrc/io/image/image.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
21
#include "image.h"
3-
#include <ATen/ATen.h>
2+
43
#include <Python.h>
54

65
// If we are in a Windows environment, we need to define

torchvision/csrc/io/image/image.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#pragma once
2+
3+
#include "cpu/read_image_cpu.h"
4+
#include "cpu/read_write_file_cpu.h"
5+
#include "cpu/readjpeg_cpu.h"
6+
#include "cpu/readpng_cpu.h"
7+
#include "cpu/writejpeg_cpu.h"
8+
#include "cpu/writepng_cpu.h"

torchvision/csrc/cpu/image/jpegcommon.cpp renamed to torchvision/csrc/io/image/jpegcommon.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1+
#if JPEG_FOUND
12
#include "jpegcommon.h"
2-
#include <string>
33

4-
#if JPEG_FOUND
54
void torch_jpeg_error_exit(j_common_ptr cinfo) {
65
/* cinfo->err really points to a torch_jpeg_error_mgr struct, so coerce
76
* pointer */

torchvision/csrc/cpu/image/jpegcommon.h renamed to torchvision/csrc/io/image/jpegcommon.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#if JPEG_FOUND
99
#include <jpeglib.h>
1010
#include <setjmp.h>
11-
#include <string>
1211

1312
static const JOCTET EOI_BUFFER[1] = {JPEG_EOI};
1413
struct torch_jpeg_error_mgr {

torchvision/csrc/models/alexnet.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
#include <torch/torch.h>
3+
#include <torch/nn.h>
44
#include "../macros.h"
55

66
namespace vision {

torchvision/csrc/models/densenet.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
#include <torch/torch.h>
3+
#include <torch/nn.h>
44
#include "../macros.h"
55

66
namespace vision {

torchvision/csrc/models/googlenet.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#include "googlenet.h"
22

3-
#include "modelsimpl.h"
4-
53
namespace vision {
64
namespace models {
75

torchvision/csrc/models/googlenet.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
#include <torch/torch.h>
3+
#include <torch/nn.h>
44
#include "../macros.h"
55

66
namespace vision {

torchvision/csrc/models/inception.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
#include <torch/torch.h>
3+
#include <torch/nn.h>
44
#include "../macros.h"
55

66
namespace vision {

torchvision/csrc/models/mnasnet.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
#include <torch/torch.h>
3+
#include <torch/nn.h>
44
#include "../macros.h"
55

66
namespace vision {

torchvision/csrc/models/mobilenet.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
#include <torch/torch.h>
3+
#include <torch/nn.h>
44
#include "../macros.h"
55

66
namespace vision {

torchvision/csrc/models/modelsimpl.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
#pragma once
22

3-
#include <torch/torch.h>
4-
5-
#ifndef TORCH_CHECK
6-
#define TORCH_CHECK AT_CHECK
7-
#endif
3+
#include <torch/nn.h>
84

95
namespace vision {
106
namespace models {

torchvision/csrc/models/resnet.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
#include "resnet.h"
22

3-
#include "modelsimpl.h"
4-
53
namespace vision {
64
namespace models {
75
namespace _resnetimpl {

torchvision/csrc/models/resnet.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
#include <torch/torch.h>
3+
#include <torch/nn.h>
44
#include "../macros.h"
55

66
namespace vision {

0 commit comments

Comments
 (0)