11
22// require "mylib.h", "-lMyLib";
3+ use Allocators;
34
45extern proc baz(): int ;
56extern 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+
1623extern proc increment2(arr: [] real (32 ), sizes: [] int (32 ), dim: int (32 )): bridge_tensor_t;
1724extern 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
7093proc 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
124130proc 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