Skip to content

Commit 7d36321

Browse files
committed
Change tensor_result_t to bridge_tensor_t.
1 parent 62f0a59 commit 7d36321

5 files changed

Lines changed: 62 additions & 66 deletions

File tree

bridge/Bridge

-960 Bytes
Binary file not shown.

bridge/bridge.o

-440 Bytes
Binary file not shown.

bridge/include/bridge.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
extern "C" {
88
#endif
99

10-
typedef struct tensor_result_t {
10+
typedef struct bridge_tensor_t {
1111
float* data;
1212
int* sizes;
1313
int dim;
14-
} tensor_result_t;
14+
} bridge_tensor_t;
1515

1616
int baz(void);
1717

@@ -22,8 +22,8 @@ void wrHelloTorch(void);
2222
float sumArray(float* arr, int* sizes, int dim);
2323

2424
void increment(float* arr, int* sizes, int dim, float* output);
25-
tensor_result_t increment2(float* arr, int* sizes, int dim);
26-
tensor_result_t increment3(tensor_result_t arr);
25+
bridge_tensor_t increment2(float* arr, int* sizes, int dim);
26+
bridge_tensor_t increment3(bridge_tensor_t arr);
2727

2828
// void convolve(
2929
// float* input,

bridge/lib/Bridge.chpl

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ extern proc wrHelloTorch(): void;
77
extern proc sumArray(arr: [] real(32), sizes: [] int(32), dim: int(32)): real(32);
88
extern proc increment(arr: [] real(32), sizes: [] int(32), dim: int(32), ref output: [] real(32)): void;
99

10-
extern record tensor_result_t {
10+
extern record bridge_tensor_t {
1111
var data: c_ptr(real(32));
1212
var sizes: c_ptr(int(32));
1313
var dim: int(32);
1414
}
1515

16-
extern proc increment2(arr: [] real(32), sizes: [] int(32), dim: int(32)): tensor_result_t;
17-
extern proc increment3(in arr: tensor_result_t): tensor_result_t;
16+
extern proc increment2(arr: [] real(32), sizes: [] int(32), dim: int(32)): bridge_tensor_t;
17+
extern proc increment3(in arr: bridge_tensor_t): bridge_tensor_t;
1818

1919

2020
// baz();
@@ -39,40 +39,42 @@ for (idx,i) in zip(dom,0..<dom.size) do
3939
// writeln("Sum of array: ", sumArray(a,sizes,a.rank));
4040

4141

42-
record arrayShape_c {
43-
param rank: int;
44-
var sizes: [0..<rank] int(32);
45-
}
42+
// record arrayShape_c {
43+
// param rank: int;
44+
// var sizes: [0..<rank] int(32);
45+
// }
4646

47-
proc getSizeArray(const ref arr: [] ?eltType): [] int(32) {
48-
var sizes: [0..<arr.rank] int(32);
49-
for i in 0..<arr.rank do
50-
sizes[i] = arr.dim(i).size : int(32);
51-
return sizes;
52-
}
5347

54-
proc getArrayShapeC(const ref arr: [] ?eltType): arrayShape_c(arr.rank) {
55-
var shape: arrayShape_c(arr.rank);
56-
for i in 0..<arr.rank do
57-
shape.sizes[i] = arr.dim(i).size : int(32);
58-
return shape;
59-
}
48+
49+
// proc getArrayShapeC(const ref arr: [] ?eltType): arrayShape_c(arr.rank) {
50+
// var shape: arrayShape_c(arr.rank);
51+
// for i in 0..<arr.rank do
52+
// shape.sizes[i] = arr.dim(i).size : int(32);
53+
// return shape;
54+
// }
6055

6156
// writeln("Sum of array: ", sumArray(a,getSizeArray(a),a.rank));
6257

6358
// var shape = getArrayShapeC(a);
6459
// writeln("Shape of array: ", shape.sizes);
6560
// writeln("Sum of array: ", sumArray(a,shape.sizes,shape.rank));
6661

67-
var shape = getArrayShapeC(a);
68-
writeln("A: ", a);
62+
// var shape = getArrayShapeC(a);
63+
// writeln("A: ", a);
6964

70-
var b: [a.domain] real(32);
71-
increment(a,shape.sizes,shape.rank,b);
72-
writeln("B: ", b);
65+
// var b: [a.domain] real(32);
66+
// increment(a,shape.sizes,shape.rank,b);
67+
// writeln("B: ", b);
7368

7469

75-
proc getResultTensorShape(param dim: int, result: tensor_result_t): dim*int {
70+
proc getSizeArray(const ref arr: [] ?eltType): [] int(32) {
71+
var sizes: [0..<arr.rank] int(32);
72+
for i in 0..<arr.rank do
73+
sizes[i] = arr.dim(i).size : int(32);
74+
return sizes;
75+
}
76+
77+
proc bridgeTensorShape(param dim: int, result: bridge_tensor_t): dim*int {
7678
var shape: dim*int;
7779
for i in 0..<dim do
7880
shape[i] = result.sizes[i] : int;
@@ -88,8 +90,8 @@ proc domainFromShape(shape: int ...?rank): domain(rank,int) {
8890
}
8991

9092

91-
proc tensorResultToArray(param rank: int, package: tensor_result_t): [] real(32) {
92-
var shape = getResultTensorShape(rank, package);
93+
proc bridgeTensorToArray(param rank: int, package: bridge_tensor_t): [] real(32) {
94+
var shape = bridgeTensorShape(rank, package);
9395
var dom = domainFromShape((...shape));
9496
var result: [dom] real(32);
9597
forall i in 0..<dom.size {
@@ -110,21 +112,21 @@ proc tensorResultToArray(param rank: int, package: tensor_result_t): [] real(32)
110112
// C[idx] = c.data[i];
111113
// }
112114

113-
var c = tensorResultToArray(shape.rank, increment2(a,shape.sizes,shape.rank));
115+
// var c = bridgeTensorToArray(shape.rank, increment2(a,shape.sizes,shape.rank));
114116

115117

116-
writeln("C: ", c);
118+
// writeln("C: ", c);
117119

118120
use Allocators;
119121

120122

121123

122-
proc createTensorResult(ref data: [] real(32)): tensor_result_t {
124+
proc createBridgeTensor(ref data: [] real(32)): bridge_tensor_t {
123125
// var alloc = new mallocWrapper();
124126
// alloc.allocate(1024);
125127

126128

127-
var result: tensor_result_t;
129+
var result: bridge_tensor_t;
128130
result.data = c_ptrTo(data);
129131
result.sizes = allocate(int(32),data.rank);
130132
const sizeArr = getSizeArray(data);
@@ -135,10 +137,10 @@ proc createTensorResult(ref data: [] real(32)): tensor_result_t {
135137
result.dim = data.rank;
136138
return result;
137139

138-
// var res = newWithAllocator(alloc, tensor_result_t, result);
140+
// var res = newWithAllocator(alloc, bridge_tensor_t, result);
139141
// return res;
140142
}
141143

142-
writeln(createTensorResult(a));
144+
writeln(createBridgeTensor(a));
143145

144-
writeln(tensorResultToArray(2,increment3(createTensorResult(a))));
146+
writeln(bridgeTensorToArray(2,increment3(createBridgeTensor(a))));

bridge/lib/bridge.cpp

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@
1111
using float32_t = float;
1212

1313

14-
int tensor_result_elements(tensor_result_t &result) {
14+
int bridge_tensor_elements(bridge_tensor_t &bt) {
1515
int size = 1;
16-
for (int i = 0; i < result.dim; ++i) {
17-
size *= result.sizes[i];
16+
for (int i = 0; i < bt.dim; ++i) {
17+
size *= bt.sizes[i];
1818
}
1919
return size;
2020
}
2121

22-
size_t tensor_result_size(tensor_result_t &result) {
23-
return sizeof(float32_t) * tensor_result_elements(result);
22+
size_t bridge_tensor_size(bridge_tensor_t &bt) {
23+
return sizeof(float32_t) * bridge_tensor_elements(bt);
2424
}
2525

2626
void store_tensor(torch::Tensor &input, float32_t* dest) {
@@ -29,30 +29,36 @@ void store_tensor(torch::Tensor &input, float32_t* dest) {
2929
std::memmove(dest,data,bytes_size);
3030
}
3131

32-
tensor_result_t tensor_result_convert(torch::Tensor &tensor) {
33-
tensor_result_t result;
32+
bridge_tensor_t tensor_result_convert(torch::Tensor &tensor) {
33+
bridge_tensor_t result;
3434
result.dim = tensor.dim();
3535
result.sizes = new int[result.dim];
3636
for (int i = 0; i < result.dim; ++i) {
3737
result.sizes[i] = tensor.size(i);
3838
}
39-
result.data = new float32_t[tensor_result_elements(result)];
39+
result.data = new float32_t[bridge_tensor_elements(result)];
4040
store_tensor(tensor, result.data);
4141
return result;
4242
}
4343

44-
void secret() {
45-
std::cout << "Secret function called!" << std::endl;
46-
auto x = torch::randn({5, 3});
47-
// torch::Tensor tensor = torch::eye(3);
48-
std::cout << "Tensor: " << x << std::endl;
44+
torch::Tensor bridge_to_torch(bridge_tensor_t &bt) {
45+
std::vector<int64_t> sizes_vec(bt.sizes, bt.sizes + bt.dim);
46+
auto shape = at::IntArrayRef(sizes_vec);
47+
auto t = torch::from_blob(bt.data, shape, torch::kFloat);
48+
return t;
49+
}
4950

50-
// std::cout << "Secret function called! Tensor: " << tensor << std::endl;
51+
extern "C" bridge_tensor_t increment3(bridge_tensor_t arr) {
52+
auto t = bridge_to_torch(arr);
53+
// Increment the tensor
54+
auto incremented_tensor = t + 1;
55+
56+
return tensor_result_convert(incremented_tensor);
5157
}
5258

59+
5360
extern "C" int baz(void) {
5461
printf("Hello from baz!\n");
55-
secret();
5662
auto x = torch::randn({5, 3});
5763
return x.size(0);
5864
}
@@ -88,7 +94,7 @@ extern "C" void increment(float* arr, int* sizes, int dim, float* output) {
8894
incremented_tensor.copy_(t + 1);
8995
}
9096

91-
extern "C" tensor_result_t increment2(float* arr, int* sizes, int dim) {
97+
extern "C" bridge_tensor_t increment2(float* arr, int* sizes, int dim) {
9298
// Convert sizes to std::vector<int64_t>
9399
std::vector<int64_t> sizes_vec(sizes, sizes + dim);
94100
auto shape = at::IntArrayRef(sizes_vec);
@@ -105,18 +111,6 @@ extern "C" tensor_result_t increment2(float* arr, int* sizes, int dim) {
105111
return tensor_result_convert(incremented_tensor);
106112
}
107113

108-
extern "C" tensor_result_t increment3(tensor_result_t arr) {
109-
// Convert sizes to std::vector<int64_t>
110-
std::vector<int64_t> sizes_vec(arr.sizes, arr.sizes + arr.dim);
111-
auto shape = at::IntArrayRef(sizes_vec);
112-
auto t = torch::from_blob(arr.data, shape, torch::kFloat);
113-
114-
// Increment the tensor
115-
auto incremented_tensor = t + 1;
116-
117-
return tensor_result_convert(incremented_tensor);
118-
}
119-
120114

121115
extern "C" float sumArray(float* arr, int* sizes, int dim) {
122116
// Convert sizes to std::vector<int64_t>

0 commit comments

Comments
 (0)