Skip to content

Commit 751b8e3

Browse files
committed
SPIR-V Alignment and ArrayStride
Signed-off-by: Natalia Gavrilenko <natalia.gavrilenko@huawei.com>
1 parent 5a60d99 commit 751b8e3

124 files changed

Lines changed: 8941 additions & 2398 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// clang -x cl -cl-std=CL2.0 -target spir-unknown-unknown -fno-discard-value-names -cl-opt-disable -emit-llvm -c alignment1-array-global.cl -o a.bc
2+
// llvm-spirv a.bc -o a.spv
3+
// spirv-dis a.spv > alignment1-array-global.spvasm
4+
5+
typedef int aligned_t __attribute__((vector_size(3 * sizeof(int))));
6+
typedef int unaligned_t[3];
7+
8+
global static aligned_t aligned[3];
9+
global static unaligned_t unaligned[3];
10+
11+
__kernel void test(global int *r_aligned, global int* r_unaligned) {
12+
aligned[0][0] = 0;
13+
aligned[0][1] = 1;
14+
aligned[0][2] = 2;
15+
16+
aligned[1][0] = 3;
17+
aligned[1][1] = 4;
18+
aligned[1][2] = 5;
19+
20+
unaligned[0][0] = 6;
21+
unaligned[0][1] = 7;
22+
unaligned[0][2] = 8;
23+
24+
unaligned[1][0] = 9;
25+
unaligned[1][1] = 10;
26+
unaligned[1][2] = 11;
27+
28+
for (int i = 0; i < 8; i++) {
29+
r_aligned[i] = *(((int*) aligned) + i);
30+
r_unaligned[i] = *(((int*) unaligned) + i);
31+
}
32+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// clang -x cl -cl-std=CL2.0 -target spir-unknown-unknown -fno-discard-value-names -cl-opt-disable -emit-llvm -c alignment1-array-local.cl -o a.bc
2+
// llvm-spirv a.bc -o a.spv
3+
// spirv-dis a.spv > alignment1-array-local.spvasm
4+
5+
// clspv -O0 alignment1-array-local.cl --cl-std=CL2.0 --inline-entry-points --spv-version=1.6
6+
// spirv-opt --upgrade-memory-model -o a.opt.spv a.spv
7+
// spirv-dis a.opt.spv > alignment1-array-local.spvasm
8+
9+
typedef int aligned_t __attribute__((vector_size(3 * sizeof(int))));
10+
typedef int unaligned_t[3];
11+
12+
__kernel void test(global int *r_aligned, global int* r_unaligned) {
13+
local aligned_t aligned[3];
14+
local unaligned_t unaligned[3];
15+
16+
aligned[0][0] = 0;
17+
aligned[0][1] = 1;
18+
aligned[0][2] = 2;
19+
20+
aligned[1][0] = 3;
21+
aligned[1][1] = 4;
22+
aligned[1][2] = 5;
23+
24+
unaligned[0][0] = 6;
25+
unaligned[0][1] = 7;
26+
unaligned[0][2] = 8;
27+
28+
unaligned[1][0] = 9;
29+
unaligned[1][1] = 10;
30+
unaligned[1][2] = 11;
31+
32+
for (int i = 0; i < 8; i++) {
33+
r_aligned[i] = *(((int*) aligned) + i);
34+
r_unaligned[i] = *(((int*) unaligned) + i);
35+
}
36+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// clang -x cl -cl-std=CL2.0 -target spir-unknown-unknown -fno-discard-value-names -cl-opt-disable -emit-llvm -c alignment1-array-pointer.cl -o a.bc
2+
// llvm-spirv a.bc -o a.spv
3+
// spirv-dis a.spv > alignment1-array-pointer.spvasm
4+
5+
// clspv -O0 alignment1-array-pointer.cl --cl-std=CL2.0 --inline-entry-points --spv-version=1.6
6+
// spirv-opt --upgrade-memory-model -o a.opt.spv a.spv
7+
// spirv-dis a.opt.spv > alignment1-array-pointer.spvasm
8+
9+
typedef int aligned_t __attribute__((vector_size(3 * sizeof(int))));
10+
typedef int unaligned_t[3] __attribute__((aligned (4)));
11+
12+
__kernel void test(global aligned_t* aligned, global unaligned_t* unaligned, global int *r_aligned, global int* r_unaligned) {
13+
aligned[0][0] = 0;
14+
aligned[0][1] = 1;
15+
aligned[0][2] = 2;
16+
17+
aligned[1][0] = 3;
18+
aligned[1][1] = 4;
19+
aligned[1][2] = 5;
20+
21+
unaligned[0][0] = 6;
22+
unaligned[0][1] = 7;
23+
unaligned[0][2] = 8;
24+
25+
unaligned[1][0] = 9;
26+
unaligned[1][1] = 10;
27+
unaligned[1][2] = 11;
28+
29+
for (int i = 0; i < 8; i++) {
30+
r_aligned[i] = *(((int*) aligned) + i);
31+
r_unaligned[i] = *(((int*) unaligned) + i);
32+
}
33+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// clang -x cl -cl-std=CL2.0 -target spir-unknown-unknown -fno-discard-value-names -cl-opt-disable -emit-llvm -c alignment1-struct-global.cl -o a.bc
2+
// llvm-spirv a.bc -o a.spv
3+
// spirv-dis a.spv > alignment1-struct-global.spvasm
4+
5+
typedef struct __attribute__ ((aligned (16))) {
6+
int x;
7+
int y;
8+
int z;
9+
} aligned_t;
10+
11+
typedef struct {
12+
int x;
13+
int y;
14+
int z;
15+
} unaligned_t;
16+
17+
global static aligned_t aligned[3];
18+
global static unaligned_t unaligned[3];
19+
20+
__kernel void test(global int *r_aligned, global int* r_unaligned) {
21+
aligned[0].x = 0;
22+
aligned[0].y = 1;
23+
aligned[0].z = 2;
24+
25+
aligned[1].x = 3;
26+
aligned[1].y = 4;
27+
aligned[1].z = 5;
28+
29+
unaligned[0].x = 6;
30+
unaligned[0].y = 7;
31+
unaligned[0].z = 8;
32+
33+
unaligned[1].x = 9;
34+
unaligned[1].y = 10;
35+
unaligned[1].z = 11;
36+
37+
for (int i = 0; i < 8; i++) {
38+
r_aligned[i] = *(((int*) aligned) + i);
39+
r_unaligned[i] = *(((int*) unaligned) + i);
40+
}
41+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// clang -x cl -cl-std=CL2.0 -target spir-unknown-unknown -fno-discard-value-names -cl-opt-disable -emit-llvm -c alignment1-struct-local.cl -o a.bc
2+
// llvm-spirv a.bc -o a.spv
3+
// spirv-dis a.spv > alignment1-struct-local.spvasm
4+
5+
// clspv -O0 alignment1-struct-local.cl --cl-std=CL2.0 --inline-entry-points --spv-version=1.6
6+
// spirv-opt --upgrade-memory-model -o a.opt.spv a.spv
7+
// spirv-dis a.opt.spv > alignment1-struct-local.spvasm
8+
9+
typedef struct __attribute__ ((aligned (16))) {
10+
int x;
11+
int y;
12+
int z;
13+
} aligned_t;
14+
15+
typedef struct {
16+
int x;
17+
int y;
18+
int z;
19+
} unaligned_t;
20+
21+
__kernel void test(global int *r_aligned, global int* r_unaligned) {
22+
local aligned_t aligned[3];
23+
local unaligned_t unaligned[3];
24+
25+
aligned[0].x = 0;
26+
aligned[0].y = 1;
27+
aligned[0].z = 2;
28+
29+
aligned[1].x = 3;
30+
aligned[1].y = 4;
31+
aligned[1].z = 5;
32+
33+
unaligned[0].x = 6;
34+
unaligned[0].y = 7;
35+
unaligned[0].z = 8;
36+
37+
unaligned[1].x = 9;
38+
unaligned[1].y = 10;
39+
unaligned[1].z = 11;
40+
41+
for (int i = 0; i < 8; i++) {
42+
r_aligned[i] = *(((int*) aligned) + i);
43+
r_unaligned[i] = *(((int*) unaligned) + i);
44+
}
45+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// clang -x cl -cl-std=CL2.0 -target spir-unknown-unknown -fno-discard-value-names -cl-opt-disable -emit-llvm -c alignment1-struct-pointer.cl -o a.bc
2+
// llvm-spirv a.bc -o a.spv
3+
// spirv-dis a.spv > alignment1-struct-pointer.spvasm
4+
5+
// clspv -O0 alignment1-struct-pointer.cl --cl-std=CL2.0 --inline-entry-points --spv-version=1.6
6+
// spirv-opt --upgrade-memory-model -o a.opt.spv a.spv
7+
// spirv-dis a.opt.spv > alignment1-struct-pointer.spvasm
8+
9+
typedef struct __attribute__ ((aligned (16))) {
10+
int x;
11+
int y;
12+
int z;
13+
} aligned_t;
14+
15+
typedef struct {
16+
int x;
17+
int y;
18+
int z;
19+
} unaligned_t;
20+
21+
__kernel void test(global aligned_t* aligned, global unaligned_t* unaligned, global int *r_aligned, global int* r_unaligned) {
22+
aligned[0].x = 0;
23+
aligned[0].y = 1;
24+
aligned[0].z = 2;
25+
26+
aligned[1].x = 3;
27+
aligned[1].y = 4;
28+
aligned[1].z = 5;
29+
30+
unaligned[0].x = 6;
31+
unaligned[0].y = 7;
32+
unaligned[0].z = 8;
33+
34+
unaligned[1].x = 9;
35+
unaligned[1].y = 10;
36+
unaligned[1].z = 11;
37+
38+
for (int i = 0; i < 8; i++) {
39+
r_aligned[i] = *(((int*) aligned) + i);
40+
r_unaligned[i] = *(((int*) unaligned) + i);
41+
}
42+
}

benchmarks/opencl/alignment/alignment1.cl

Lines changed: 0 additions & 21 deletions
This file was deleted.

benchmarks/opencl/alignment/alignment10.cl

Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// clang -x cl -cl-std=CL2.0 -target spir-unknown-unknown -fno-discard-value-names -cl-opt-disable -emit-llvm -c alignment2-struct-global.cl -o a.bc
2+
// llvm-spirv a.bc -o a.spv
3+
// spirv-dis a.spv > alignment2-struct-global.spvasm
4+
5+
typedef struct __attribute__ ((aligned (32))) {
6+
int a;
7+
int b;
8+
int c;
9+
int d;
10+
int e;
11+
} aligned_t;
12+
13+
typedef struct {
14+
int a;
15+
int b;
16+
int c;
17+
int d;
18+
int e;
19+
} unaligned_t;
20+
21+
global static aligned_t aligned[3];
22+
global static unaligned_t unaligned[3];
23+
24+
__kernel void test(global int *r_aligned, global int* r_unaligned) {
25+
aligned[0].a = 0;
26+
aligned[0].b = 1;
27+
aligned[0].c = 2;
28+
aligned[0].d = 3;
29+
aligned[0].e = 4;
30+
31+
aligned[1].a = 5;
32+
aligned[1].b = 6;
33+
aligned[1].c = 7;
34+
aligned[1].d = 8;
35+
aligned[1].e = 9;
36+
37+
unaligned[0].a = 10;
38+
unaligned[0].b = 11;
39+
unaligned[0].c = 12;
40+
unaligned[0].d = 13;
41+
unaligned[0].e = 14;
42+
43+
unaligned[1].a = 15;
44+
unaligned[1].b = 16;
45+
unaligned[1].c = 17;
46+
unaligned[1].d = 18;
47+
unaligned[1].e = 19;
48+
49+
for (int i = 0; i < 16; i++) {
50+
r_aligned[i] = *(((int*) aligned) + i);
51+
r_unaligned[i] = *(((int*) unaligned) + i);
52+
}
53+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// clang -x cl -cl-std=CL2.0 -target spir-unknown-unknown -fno-discard-value-names -cl-opt-disable -emit-llvm -c alignment2-struct-local.cl -o a.bc
2+
// llvm-spirv a.bc -o a.spv
3+
// spirv-dis a.spv > alignment2-struct-local.spvasm
4+
5+
// clspv -O0 alignment2-struct-local.cl --cl-std=CL2.0 --inline-entry-points --spv-version=1.6
6+
// spirv-opt --upgrade-memory-model -o a.opt.spv a.spv
7+
// spirv-dis a.opt.spv > alignment2-struct-local.spvasm
8+
9+
typedef struct __attribute__ ((aligned (32))) {
10+
int a;
11+
int b;
12+
int c;
13+
int d;
14+
int e;
15+
} aligned_t;
16+
17+
typedef struct {
18+
int a;
19+
int b;
20+
int c;
21+
int d;
22+
int e;
23+
} unaligned_t;
24+
25+
__kernel void test(global int *r_aligned, global int* r_unaligned) {
26+
local aligned_t aligned[3];
27+
local unaligned_t unaligned[3];
28+
29+
aligned[0].a = 0;
30+
aligned[0].b = 1;
31+
aligned[0].c = 2;
32+
aligned[0].d = 3;
33+
aligned[0].e = 4;
34+
35+
aligned[1].a = 5;
36+
aligned[1].b = 6;
37+
aligned[1].c = 7;
38+
aligned[1].d = 8;
39+
aligned[1].e = 9;
40+
41+
unaligned[0].a = 10;
42+
unaligned[0].b = 11;
43+
unaligned[0].c = 12;
44+
unaligned[0].d = 13;
45+
unaligned[0].e = 14;
46+
47+
unaligned[1].a = 15;
48+
unaligned[1].b = 16;
49+
unaligned[1].c = 17;
50+
unaligned[1].d = 18;
51+
unaligned[1].e = 19;
52+
53+
for (int i = 0; i < 16; i++) {
54+
r_aligned[i] = *(((int*) aligned) + i);
55+
r_unaligned[i] = *(((int*) unaligned) + i);
56+
}
57+
}

0 commit comments

Comments
 (0)