@@ -23,6 +23,14 @@ extern record bridge_tensor_t {
2323extern proc increment2(arr: [] real (32 ), sizes: [] int (32 ), dim: int (32 )): bridge_tensor_t;
2424extern proc increment3(in arr: bridge_tensor_t): bridge_tensor_t;
2525
26+ extern proc convolve2d(
27+ in input: bridge_tensor_t,
28+ in kernel: bridge_tensor_t,
29+ in bias: bridge_tensor_t,
30+ in stride: int (32 ),
31+ in padding: int (32 )): bridge_tensor_t;
32+
33+ extern proc unsafe(const ref arr: [] real (32 )): c_ptr(real (32 ));
2634
2735// baz();
2836
@@ -127,9 +135,9 @@ proc bridgeTensorToArray(param rank: int, package: bridge_tensor_t): [] real(32)
127135}
128136
129137
130- proc createBridgeTensor(ref data: [] real (32 )): bridge_tensor_t {
138+ proc createBridgeTensor(const ref data: [] real (32 )): bridge_tensor_t {
131139 var result: bridge_tensor_t;
132- result.data = c_ptrTo (data);
140+ result.data = c_ptrToConst (data) : c_ptr( real ( 32 ) );
133141 result.sizes = allocate(int (32 ),data.rank);
134142 const sizeArr = getSizeArray(data);
135143 for i in 0 ..< data.rank do
@@ -169,4 +177,19 @@ writeln(a);
169177writeln (" ----------" );
170178writeln (chplIncrement(a));
171179writeln (" ----------" );
172- writeln (a);
180+ writeln (a);
181+
182+
183+ var input: [ domainFromShape(2 ,64 ,28 ,28 )] real (32 ) = 1.0 ;
184+ var kernel: [ domainFromShape(128 ,64 ,3 ,3 )] real (32 ) = 2.0 ;
185+ var bias: [ domainFromShape(128 )] real (32 ) = 3.0 ;
186+ var stride: int (32 ) = 1 ;
187+ var padding: int (32 ) = 1 ;
188+ writeln (" Begin." );
189+ var resultBT = convolve2d(createBridgeTensor(input), createBridgeTensor(kernel), createBridgeTensor(bias), stride, padding);
190+ var result = bridgeTensorToArray(4 , resultBT);
191+ // writeln("Input: ", input);
192+ // writeln("Kernel: ", kernel);
193+ // writeln("Bias: ", bias);
194+ // writeln("Result: ", result);
195+ writeln (" Result: " , result.size);
0 commit comments