We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 889c69b commit 9cde086Copy full SHA for 9cde086
4 files changed
bridge/include/bridge.h
@@ -7,14 +7,17 @@
7
extern "C" {
8
#endif
9
10
+typedef float float32_t;
11
+typedef double float64_t;
12
+typedef char bool_t;
13
+
14
typedef struct bridge_tensor_t {
15
float* data;
16
int* sizes;
17
int dim;
18
+ bool_t created_by_c;
19
} bridge_tensor_t;
20
-typedef float float32_t;
-typedef double float64_t;
21
22
int baz(void);
23
bridge/lib/bridge.cpp
@@ -34,6 +34,7 @@ void store_tensor(torch::Tensor &input, float32_t* dest) {
34
35
bridge_tensor_t torch_to_bridge(torch::Tensor &tensor) {
36
bridge_tensor_t result;
37
+ result.created_by_c = true;
38
result.dim = tensor.dim();
39
result.sizes = new int[result.dim];
40
for (int i = 0; i < result.dim; ++i) {
lib/Bridge.chpl
@@ -9,6 +9,7 @@ module Bridge {
var data: c_ptr(real(32));
var sizes: c_ptr(int(32));
var dim: int(32);
+ var created_by_c: bool;
}
proc tensorHandle(type eltType) type {
@@ -51,8 +52,10 @@ module Bridge {
51
52
var result: [dom] real(32);
53
forall (i,idx) in dom.everyZip() do
54
result[idx] = package.data[i];
- deallocate(package.data);
55
- deallocate(package.sizes);
+ if package.created_by_c {
56
+ deallocate(package.data);
57
+ deallocate(package.sizes);
58
+ }
59
return result;
60
61
@@ -64,8 +67,10 @@ module Bridge {
64
67
const dom = existing.domain;
65
68
66
69
existing[idx] = package.data[i];
70
71
72
73
74
75
76
proc createBridgeTensor(const ref data: [] real(32)): bridge_tensor_t {
test/tiny/layer_test.chpl
@@ -66,7 +66,10 @@ writeln(arr);
writeln(arr.toBridgeTensor());
var bt = arr.toBridgeTensor();
+writeln(bt);
arr.loadFromBridgeTensor(bt);
writeln(arr);
writeln(arr.shape);
writeln(ndarray.fromBridgeTensor(2,bt));
0 commit comments