@@ -5,28 +5,37 @@ extern proc baz(): int;
55extern proc wrHello(): void ;
66extern proc wrHelloTorch(): void ;
77extern proc sumArray(arr: [] real (32 ), sizes: [] int (32 ), dim: int (32 )): real (32 );
8+ extern proc increment(arr: [] real (32 ), sizes: [] int (32 ), dim: int (32 ), ref output: [] real (32 )): void ;
9+
10+ extern record tensor_result_t {
11+ var data: c_ptr(real (32 ));
12+ var sizes: c_ptr(int (32 ));
13+ var dim: int (32 );
14+ }
15+
16+ extern proc increment2(arr: [] real (32 ), sizes: [] int (32 ), dim: int (32 )): tensor_result_t;
817
918
10- baz();
19+ // baz();
1120
12- wrHello();
21+ // wrHello();
1322
1423
15- wrHelloTorch();
24+ // wrHelloTorch();
1625
17- writeln (" baz: " , baz());
26+ // writeln("baz: ", baz());
1827
1928
2029var dom = {0 ..< 10 , 0 ..< 10 };
2130var a: [ dom] real (32 );
2231for (idx,i) in zip (dom,0 ..< dom.size) do
2332 a[ idx] = i: real (32 );
2433
25- var sizes: [ 0 ..1 ] int (32 );
26- sizes[ 0 ] = dom.dim(0 ).size : int (32 );
27- sizes[ 1 ] = dom.dim(1 ).size : int (32 );
34+ // var sizes: [0..1] int(32);
35+ // sizes[0] = dom.dim(0).size : int(32);
36+ // sizes[1] = dom.dim(1).size : int(32);
2837
29- writeln (" Sum of array: " , sumArray(a,sizes,a.rank));
38+ // writeln("Sum of array: ", sumArray(a,sizes,a.rank));
3039
3140
3241record arrayShape_c {
@@ -48,8 +57,47 @@ proc getArrayShapeC(const ref arr: [] ?eltType): arrayShape_c(arr.rank) {
4857 return shape;
4958}
5059
51- writeln (" Sum of array: " , sumArray(a,getSizeArray(a),a.rank));
60+ // writeln("Sum of array: ", sumArray(a,getSizeArray(a),a.rank));
61+
62+ // var shape = getArrayShapeC(a);
63+ // writeln("Shape of array: ", shape.sizes);
64+ // writeln("Sum of array: ", sumArray(a,shape.sizes,shape.rank));
5265
5366var shape = getArrayShapeC(a);
54- writeln (" Shape of array: " , shape.sizes);
55- writeln (" Sum of array: " , sumArray(a,shape.sizes,shape.rank));
67+ writeln (" A: " , a);
68+
69+ var b: [ a.domain ] real (32 );
70+ increment(a,shape.sizes,shape.rank,b);
71+ writeln (" B: " , b);
72+
73+
74+ proc getResultTensorShape(param dim: int , result: tensor_result_t): dim* int {
75+ var shape: dim* int ;
76+ for i in 0 ..< dim do
77+ shape[ i] = result.sizes[ i] : int ;
78+ return shape;
79+ }
80+
81+ proc domainFromShape(shape: int ...?rank): domain (rank,int ) {
82+ const _shape = shape;
83+ var ranges: rank* range ;
84+ for param i in 0 ..< rank do
85+ ranges(i) = 0 ..< _shape(i);
86+ return {(...ranges)};
87+ }
88+
89+ var c = increment2(a,shape.sizes,shape.rank);
90+
91+ var cShape = getResultTensorShape(shape.rank, c);
92+
93+ var cDom = domainFromShape((...cShape));
94+
95+ var C: [ cDom] real (32 );
96+ forall i in 0 ..< cDom.size {
97+ var idx = cDom.orderToIndex(i);
98+ C[ idx] = c.data[ i] ;
99+ }
100+
101+
102+ writeln (" C: " , C);
103+
0 commit comments