Skip to content

Commit 93d4781

Browse files
authored
Merge branch 'main' into main
2 parents 8fe00c4 + d174053 commit 93d4781

41 files changed

Lines changed: 4821 additions & 312 deletions

Some content is hidden

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

CMakeLists.txt

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,21 @@ set(LIBTORCH_LIBS_LINKER_ARGS
199199
)
200200
cmake_print_variables(LIBTORCH_LIBS_LINKER_ARGS)
201201

202+
set(CHAI_LINKER_ARGS
203+
-M ${PROJECT_ROOT_DIR}/lib
204+
${BRIDGE_DIR}/include/bridge.h
205+
${BRIDGE_OBJECT_FILES}
206+
-L ${LIBTORCH_DIR}/lib
207+
${LIBTORCH_LIBS_LINKER_ARGS}
208+
--ccflags "-I${BRIDGE_DIR}/include -L${PROJECT_ROOT_DIR}/build"
209+
--ldflags "-L${PROJECT_ROOT_DIR}/build -Wl,-rpath,${LIBTORCH_DIR}/lib"
210+
)
211+
202212

203213
add_executable(TorchBridge ${BRIDGE_DIR}/lib/Bridge.chpl)
204214
add_dependencies(TorchBridge bridge)
205215
add_dependencies(TorchBridge ChAI)
216+
add_dependencies(TorchBridge bridge_objs)
206217
target_link_options(TorchBridge
207218
PRIVATE
208219
${BRIDGE_DIR}/include/bridge.h
@@ -228,9 +239,27 @@ add_dependencies(TinyLayerTest ChAI)
228239
target_link_options(TinyLayerTest
229240
PRIVATE
230241
--main-module layer_test.chpl
231-
# -M ${PROJECT_ROOT_DIR}/lib
242+
-M ${PROJECT_ROOT_DIR}/lib
232243
${CHAI_LINKER_ARGS}
233244
)
245+
246+
247+
add_executable(TinyBridgeSystemTest
248+
${PROJECT_ROOT_DIR}/test/tiny/bridge_system_test.chpl
249+
${CHAI_LIB_FILES}
250+
)
251+
add_dependencies(TinyBridgeSystemTest bridge)
252+
add_dependencies(TinyBridgeSystemTest ChAI)
253+
add_dependencies(TinyBridgeSystemTest bridge_objs)
254+
add_dependencies(TinyBridgeSystemTest TorchBridge)
255+
target_link_options(TinyBridgeSystemTest
256+
PRIVATE
257+
--main-module bridge_system_test.chpl
258+
-M ${PROJECT_ROOT_DIR}/lib
259+
${CHAI_LINKER_ARGS}
260+
)
261+
262+
234263
# chpl test/tiny/layer_test.chpl -M lib bridge/include/bridge.h build/CMakeFiles/bridge.dir/bridge/lib/bridge.cpp.o -L libtorch/lib -ltorch -ltorch_cpu -lc10 -ltorch_global_deps --ldflags "-Wl,-rpath,libtorch/lib"
235264

236265
# chpl --fast -o vgg test.chpl -M ../../lib /Users/iainmoncrief/Documents/Github/ChAI/bridge/include/bridge.h /Users/iainmoncrief/Documents/Github/ChAI/build/CMakeFiles/bridge.dir/bridge/lib/bridge.cpp.o -L /Users/iainmoncrief/Documents/Github/ChAI/libtorch/lib -ltorch -ltorch_cpu -lc10 -ltorch_global_deps --ldflags "-Wl,-rpath,/Users/iainmoncrief/Documents/Github/ChAI/libtorch/lib"
@@ -241,15 +270,7 @@ target_link_options(TinyLayerTest
241270

242271

243272

244-
set(CHAI_LINKER_ARGS
245-
-M ${PROJECT_ROOT_DIR}/lib
246-
${BRIDGE_DIR}/include/bridge.h
247-
${BRIDGE_OBJECT_FILES}
248-
-L ${LIBTORCH_DIR}/lib
249-
${LIBTORCH_LIBS_LINKER_ARGS}
250-
--ccflags "-I${BRIDGE_DIR}/include -L${PROJECT_ROOT_DIR}/build"
251-
--ldflags "-L${PROJECT_ROOT_DIR}/build -Wl,-rpath,${LIBTORCH_DIR}/lib"
252-
)
273+
253274

254275

255276

bridge/include/bridge.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@ typedef unsigned long long uint64_t;
3030
void debug_cpu_only_mode(bool_t mode);
3131

3232
typedef struct bridge_tensor_t {
33-
float* data;
34-
int* sizes;
35-
int dim;
33+
float32_t* data;
34+
uint32_t* sizes;
35+
uint32_t dim;
3636
bool_t created_by_c;
37+
bool_t was_freed;
3738
} bridge_tensor_t;
3839

40+
void free_bridge_tensor(bridge_tensor_t bt);
3941

4042
typedef struct bridge_pt_model_t {
4143
void* pt_module;

bridge/lib/bridge.cpp

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@
1414
#include <sstream>
1515
#include <cstdlib>
1616
#include <vector>
17-
#include <cstdint>
1817
#include <chrono>
1918
#include <thread>
19+
#include <cstdio>
20+
#include <cstdint>
21+
#include <cstdlib>
2022

2123

2224

@@ -66,6 +68,8 @@ extern "C" void debug_cpu_only_mode(bool_t mode) {
6668
} else {
6769
best_device = get_best_device();
6870
}
71+
std::cout << "Debug CPU only mode: " << (debug_cpu_only ? "ON" : "OFF") << std::endl;
72+
std::cout.flush();
6973
}
7074

7175
extern "C" bool_t accelerator_available() {
@@ -82,38 +86,51 @@ torch::ScalarType get_best_dtype() {
8286
}
8387
}
8488

85-
int bridge_tensor_elements(bridge_tensor_t &bt) {
86-
int size = 1;
87-
for (int i = 0; i < bt.dim; ++i) {
88-
size *= bt.sizes[i];
89-
}
90-
return size;
91-
}
92-
93-
size_t bridge_tensor_size(bridge_tensor_t &bt) {
94-
return sizeof(float32_t) * bridge_tensor_elements(bt);
95-
}
9689

9790
void store_tensor(at::Tensor &input, float32_t* dest) {
98-
float32_t * data = input.data_ptr<float32_t>();
99-
size_t bytes_size = sizeof(float32_t) * input.numel();
91+
const float32_t * data = input.const_data_ptr<float32_t>();
92+
std::size_t bytes_size = sizeof(float32_t) * input.numel();
10093
// std::memmove(dest,data,bytes_size);
10194
std::memcpy(dest,data,bytes_size);
10295
}
10396

10497
bridge_tensor_t torch_to_bridge(at::Tensor &tensor) {
10598
bridge_tensor_t result;
10699
result.created_by_c = true;
100+
result.was_freed = false;
101+
107102
result.dim = tensor.dim();
108-
result.sizes = new int32_t[result.dim];
109-
for (int i = 0; i < result.dim; ++i) {
110-
result.sizes[i] = tensor.size(i);
103+
104+
std::size_t sizes_bytes = sizeof(uint32_t) * result.dim;
105+
result.sizes = static_cast<uint32_t*>(malloc(sizes_bytes));
106+
for (uint32_t i = 0; i < result.dim; ++i) {
107+
result.sizes[i] = static_cast<uint32_t>(tensor.size(i));
111108
}
112-
result.data = new float32_t[bridge_tensor_elements(result)];
109+
110+
std::size_t data_bytes = sizeof(float32_t) * tensor.numel();
111+
result.data = static_cast<float32_t*>(malloc(data_bytes));
113112
store_tensor(tensor, result.data);
114113
return result;
115114
}
116115

116+
extern "C" void free_bridge_tensor(bridge_tensor_t bt) {
117+
if (bt.created_by_c && !bt.was_freed) {
118+
free(bt.sizes);
119+
free(bt.data);
120+
return;
121+
} else if (!bt.created_by_c) {
122+
std::cerr << "Warning: Attempting to free a tensor not created by C code." << std::endl;
123+
std::cerr.flush();
124+
} else if (bt.was_freed) {
125+
std::cerr << "Warning: Attempting to free a tensor that has already been freed." << std::endl;
126+
std::cerr.flush();
127+
} else {
128+
std::cerr << "Warning: Attempting to free a tensor with an unknown state." << std::endl;
129+
std::cerr.flush();
130+
}
131+
}
132+
133+
117134
at::Tensor bridge_to_torch(bridge_tensor_t &bt) {
118135
std::vector<int64_t> sizes_vec(bt.sizes, bt.sizes + bt.dim);
119136
auto shape = torch::IntArrayRef(sizes_vec);
@@ -130,7 +147,6 @@ at::Tensor bridge_to_torch(bridge_tensor_t &bt,torch::Device device, bool copy,t
130147
return t.to(device, dtype, /*non_blocking=*/false, /*copy=*/true);
131148
else
132149
return t.to(device, dtype, /*non_blocking=*/false, /*copy=*/false);
133-
134150
}
135151

136152
extern "C" float32_t* unsafe(const float32_t* arr) {
@@ -230,8 +246,8 @@ extern "C" bridge_pt_model_t load_model(const uint8_t* model_path) {
230246

231247

232248

233-
bridge_tensor_t model_forward(bridge_pt_model_t model, bridge_tensor_t input, bool is_vgg_based_model) {
234-
auto tn_mps = bridge_to_torch(input,best_device,true,best_dtype);
249+
extern "C" bridge_tensor_t model_forward(bridge_pt_model_t model, bridge_tensor_t input) {
250+
auto tn_mps = bridge_to_torch(input,best_device,false,best_dtype);
235251
// tn_mps = tn_mps.permute({2, 0, 1}).contiguous();
236252
// tn_mps.unsqueeze_(0);//.contiguous();
237253
auto tn = tn_mps.permute({2, 0, 1}).unsqueeze(0).contiguous();
@@ -244,24 +260,12 @@ bridge_tensor_t model_forward(bridge_pt_model_t model, bridge_tensor_t input, bo
244260
// auto tn_out = o.squeeze(0).permute({1, 2, 0}).contiguous();
245261
auto tn_out = o.squeeze(0).contiguous().permute({1, 2, 0}).contiguous();
246262

247-
if (is_vgg_based_model) {
248-
tn_out.div_(255.0);
249-
}
250-
251-
auto tn_out_cpu = tn_out.to(torch::kCPU,torch::kFloat32,false,true);
263+
auto tn_out_cpu = tn_out.to(torch::kCPU,torch::kFloat32,false,false);
252264

253265
return torch_to_bridge(tn_out_cpu);
254266

255267
}
256268

257-
extern "C" bridge_tensor_t model_forward(bridge_pt_model_t model, bridge_tensor_t input) {
258-
return model_forward(model, input, false);
259-
}
260-
261-
extern "C" bridge_tensor_t model_forward_style_transfer(bridge_pt_model_t model, bridge_tensor_t input) {
262-
return model_forward(model, input, true);
263-
}
264-
265269
// std::tuple<uint64_t, uint64_t> get_cpu_frame_size(uint64_t width, uint64_t height, float32_t scale_factor) {
266270
// // if (best_device == torch::kMPS || best_device == torch::kCUDA)
267271
// if (accelerator_available())

demos/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ add_subdirectory(video)
33
# add_subdirectory(webcam_filter)
44

55
# add_subdirectory(torchtest)
6-
add_subdirectory(torchtest_bridge)
6+
add_subdirectory(torchtest_bridge)
7+

demos/video/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,6 @@ add_custom_command(
9999
"${CMAKE_CURRENT_SOURCE_DIR}/style-transfer/models"
100100
"$<TARGET_FILE_DIR:StyleTransfer>/style-transfer/models"
101101
COMMENT "NOT! Copying ${PROJECT_ROOT_DIR}/examples/vgg/images to $<TARGET_FILE_DIR:vgg>/images"
102-
)
102+
)
103+
104+
add_subdirectory(cpp-model-construction)
6.43 MB
Binary file not shown.

demos/video/chapel-webcam/lib/smol.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,8 @@ void chpl__init_ndarrayRandom(int64_t _ln,
3131
int32_t _fn);
3232
void chpl__init_smol(int64_t _ln,
3333
int32_t _fn);
34-
chpl_bool acceleratorAvailable(void);
3534
int64_t getScaledFrameWidth(int64_t width);
3635
int64_t getScaledFrameHeight(int64_t height);
37-
int64_t square(int64_t x);
38-
void printArray(chpl_external_array * a);
3936
void globalLoadModel(void);
4037
chpl_external_array getNewFrame(chpl_external_array * frame,
4138
int64_t height,

0 commit comments

Comments
 (0)