Skip to content

Commit 67f5656

Browse files
committed
Improving bridge interface and cleaning demos up.
1 parent 973e7af commit 67f5656

10 files changed

Lines changed: 187 additions & 197 deletions

File tree

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
@@ -20,12 +20,14 @@ typedef unsigned long long uint64_t;
2020
void debug_cpu_only_mode(bool_t mode);
2121

2222
typedef struct bridge_tensor_t {
23-
float* data;
24-
int* sizes;
25-
int dim;
23+
float32_t* data;
24+
uint32_t* sizes;
25+
uint32_t dim;
2626
bool_t created_by_c;
27+
bool_t was_freed;
2728
} bridge_tensor_t;
2829

30+
void free_bridge_tensor(bridge_tensor_t bt);
2931

3032
typedef struct bridge_pt_model_t {
3133
void* pt_module;

bridge/lib/bridge.cpp

Lines changed: 27 additions & 22 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

@@ -81,9 +83,9 @@ torch::ScalarType get_best_dtype() {
8183
}
8284
}
8385

84-
int bridge_tensor_elements(bridge_tensor_t &bt) {
85-
int size = 1;
86-
for (int i = 0; i < bt.dim; ++i) {
86+
std::size_t bridge_tensor_elements(bridge_tensor_t &bt) {
87+
std::size_t size = 1;
88+
for (std::size_t i = 0; i < bt.dim; ++i) {
8789
size *= bt.sizes[i];
8890
}
8991
return size;
@@ -95,24 +97,39 @@ size_t bridge_tensor_size(bridge_tensor_t &bt) {
9597

9698
void store_tensor(at::Tensor &input, float32_t* dest) {
9799
float32_t * data = input.data_ptr<float32_t>();
98-
size_t bytes_size = sizeof(float32_t) * input.numel();
100+
std::size_t bytes_size = sizeof(float32_t) * input.numel();
99101
// std::memmove(dest,data,bytes_size);
100102
std::memcpy(dest,data,bytes_size);
101103
}
102104

103105
bridge_tensor_t torch_to_bridge(at::Tensor &tensor) {
104106
bridge_tensor_t result;
105107
result.created_by_c = true;
108+
result.was_freed = false;
109+
106110
result.dim = tensor.dim();
107-
result.sizes = new int32_t[result.dim];
108-
for (int i = 0; i < result.dim; ++i) {
109-
result.sizes[i] = tensor.size(i);
111+
112+
std::size_t sizes_bytes = sizeof(uint32_t) * result.dim;
113+
result.sizes = static_cast<uint32_t*>(malloc(sizes_bytes));
114+
for (uint32_t i = 0; i < result.dim; ++i) {
115+
result.sizes[i] = static_cast<uint32_t>(tensor.size(i));
110116
}
111-
result.data = new float32_t[bridge_tensor_elements(result)];
117+
118+
std::size_t data_bytes = sizeof(float32_t) * tensor.numel();
119+
result.data = static_cast<float32_t*>(malloc(data_bytes));
112120
store_tensor(tensor, result.data);
113121
return result;
114122
}
115123

124+
extern "C" void free_bridge_tensor(bridge_tensor_t bt) {
125+
if (bt.created_by_c && !bt.was_freed) {
126+
free(bt.sizes);
127+
free(bt.data);
128+
bt.was_freed = true;
129+
}
130+
}
131+
132+
116133
at::Tensor bridge_to_torch(bridge_tensor_t &bt) {
117134
std::vector<int64_t> sizes_vec(bt.sizes, bt.sizes + bt.dim);
118135
auto shape = torch::IntArrayRef(sizes_vec);
@@ -229,7 +246,7 @@ extern "C" bridge_pt_model_t load_model(const uint8_t* model_path) {
229246

230247

231248

232-
bridge_tensor_t model_forward(bridge_pt_model_t model, bridge_tensor_t input, bool is_vgg_based_model) {
249+
extern "C" bridge_tensor_t model_forward(bridge_pt_model_t model, bridge_tensor_t input) {
233250
auto tn_mps = bridge_to_torch(input,best_device,true,best_dtype);
234251
// tn_mps = tn_mps.permute({2, 0, 1}).contiguous();
235252
// tn_mps.unsqueeze_(0);//.contiguous();
@@ -243,24 +260,12 @@ bridge_tensor_t model_forward(bridge_pt_model_t model, bridge_tensor_t input, bo
243260
// auto tn_out = o.squeeze(0).permute({1, 2, 0}).contiguous();
244261
auto tn_out = o.squeeze(0).contiguous().permute({1, 2, 0}).contiguous();
245262

246-
if (is_vgg_based_model) {
247-
tn_out.div_(255.0);
248-
}
249-
250263
auto tn_out_cpu = tn_out.to(torch::kCPU,torch::kFloat32,false,true);
251264

252265
return torch_to_bridge(tn_out_cpu);
253266

254267
}
255268

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

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,

demos/video/chapel-webcam/main.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -167,20 +167,6 @@ int main(int argc, char* argv[]) {
167167
chpl__init_Bridge(0, 0);
168168
chpl__init_smol(0, 0);
169169

170-
square(3);
171-
172-
// int64_t array[4] = {1,2,3,4};
173-
// chpl_external_array array_ptr = chpl_make_external_array_ptr(&array,4);
174-
// int64_t sum = sumArray(&array_ptr);
175-
// chpl_free_external_array(array_ptr);
176-
// printf("sum: %d\n", sum);
177-
178-
179-
int64_t matrix[2][3] = { {1, 4, 2}, {3, 6, 8} };
180-
chpl_external_array matrix_ptr = chpl_make_external_array_ptr(matrix, 3 * 2);
181-
printArray(&matrix_ptr);
182-
chpl_free_external_array(matrix_ptr);
183-
184170
globalLoadModel();
185171

186172
int code = mirror();

0 commit comments

Comments
 (0)