Skip to content

Commit 5594567

Browse files
committed
Made example method for passing data to and from libtorch.
1 parent 7d36321 commit 5594567

2 files changed

Lines changed: 54 additions & 28 deletions

File tree

bridge/Bridge

-50.4 KB
Binary file not shown.

bridge/lib/Bridge.chpl

Lines changed: 54 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
// require "mylib.h", "-lMyLib";
3+
use Allocators;
34

45
extern proc baz(): int;
56
extern proc wrHello(): void;
@@ -13,6 +14,12 @@ extern record bridge_tensor_t {
1314
var dim: int(32);
1415
}
1516

17+
// extern record bridge_tensor_t_const {
18+
// var data: c_ptrConst(real(32));
19+
// var sizes: c_ptr(int(32));
20+
// var dim: int(32);
21+
// }
22+
1623
extern proc increment2(arr: [] real(32), sizes: [] int(32), dim: int(32)): bridge_tensor_t;
1724
extern proc increment3(in arr: bridge_tensor_t): bridge_tensor_t;
1825

@@ -66,6 +73,22 @@ for (idx,i) in zip(dom,0..<dom.size) do
6673
// increment(a,shape.sizes,shape.rank,b);
6774
// writeln("B: ", b);
6875

76+
// var c = increment2(a,shape.sizes,shape.rank);
77+
78+
// var cShape = getResultTensorShape(shape.rank, c);
79+
80+
// var cDom = domainFromShape((...cShape));
81+
82+
// var C: [cDom] real(32);
83+
// forall i in 0..<cDom.size {
84+
// var idx = cDom.orderToIndex(i);
85+
// C[idx] = c.data[i];
86+
// }
87+
88+
// var c = bridgeTensorToArray(shape.rank, increment2(a,shape.sizes,shape.rank));
89+
90+
91+
// writeln("C: ", c);
6992

7093
proc getSizeArray(const ref arr: [] ?eltType): [] int(32) {
7194
var sizes: [0..<arr.rank] int(32);
@@ -98,49 +121,52 @@ proc bridgeTensorToArray(param rank: int, package: bridge_tensor_t): [] real(32)
98121
var idx = dom.orderToIndex(i);
99122
result[idx] = package.data[i];
100123
}
124+
deallocate(package.data);
125+
deallocate(package.sizes);
101126
return result;
102127
}
103-
// var c = increment2(a,shape.sizes,shape.rank);
104-
105-
// var cShape = getResultTensorShape(shape.rank, c);
106-
107-
// var cDom = domainFromShape((...cShape));
108-
109-
// var C: [cDom] real(32);
110-
// forall i in 0..<cDom.size {
111-
// var idx = cDom.orderToIndex(i);
112-
// C[idx] = c.data[i];
113-
// }
114-
115-
// var c = bridgeTensorToArray(shape.rank, increment2(a,shape.sizes,shape.rank));
116-
117-
118-
// writeln("C: ", c);
119-
120-
use Allocators;
121-
122128

123129

124130
proc createBridgeTensor(ref data: [] real(32)): bridge_tensor_t {
125-
// var alloc = new mallocWrapper();
126-
// alloc.allocate(1024);
127-
128-
129131
var result: bridge_tensor_t;
130132
result.data = c_ptrTo(data);
131133
result.sizes = allocate(int(32),data.rank);
132134
const sizeArr = getSizeArray(data);
133135
for i in 0..<data.rank do
134136
result.sizes[i] = sizeArr[i];
135137

136-
// result.sizes = c_ptrTo(getSizeArray(data));
137138
result.dim = data.rank;
138139
return result;
140+
}
141+
142+
// proc createBridgeTensor(const ref data: [] real(32)): bridge_tensor_t_const {
143+
// var result: bridge_tensor_t_const;
144+
// result.data = c_ptrToConst(data);
145+
// result.sizes = allocate(int(32),data.rank);
146+
// const sizeArr = getSizeArray(data);
147+
// for i in 0..<data.rank do
148+
// result.sizes[i] = sizeArr[i];
139149

140-
// var res = newWithAllocator(alloc, bridge_tensor_t, result);
141-
// return res;
150+
// result.dim = data.rank;
151+
// return result;
152+
// }
153+
154+
155+
proc chplIncrement(ref data: [] real(32)): [] real(32) {
156+
param rank = data.rank;
157+
var dataBT = createBridgeTensor(data);
158+
var resultBT = increment3(dataBT);
159+
var result = bridgeTensorToArray(rank, resultBT);
160+
deallocate(dataBT.data);
161+
deallocate(dataBT.sizes);
162+
return result;
142163
}
143164

144-
writeln(createBridgeTensor(a));
145165

146-
writeln(bridgeTensorToArray(2,increment3(createBridgeTensor(a))));
166+
167+
// writeln(bridgeTensorToArray(2,increment3(createBridgeTensor(a))));
168+
writeln(a);
169+
writeln("----------");
170+
writeln(chplIncrement(a));
171+
writeln("----------");
172+
writeln(a);

0 commit comments

Comments
 (0)