111
|
1
|
|
2 // Tile parititioning
|
|
3
|
|
4 void Ok ()
|
|
5 {
|
|
6 #pragma acc parallel num_gangs (10) num_workers(32) vector_length(32)
|
|
7 {
|
|
8
|
|
9 #pragma acc loop tile(*) gang vector
|
|
10 for (int ix = 0; ix < 10; ix++)
|
|
11 {
|
|
12 }
|
|
13
|
|
14 #pragma acc loop tile(*)
|
|
15 for (int ix = 0; ix < 10; ix++)
|
|
16 {
|
|
17 }
|
|
18
|
|
19 #pragma acc loop tile(*) gang
|
|
20 for (int ix = 0; ix < 10; ix++)
|
|
21 {
|
|
22 #pragma acc loop vector
|
|
23 for (int jx = 0; jx < 10; jx++)
|
|
24 ;
|
|
25 }
|
|
26
|
|
27 #pragma acc loop tile(*)
|
|
28 for (int ix = 0; ix < 10; ix++)
|
|
29 {
|
|
30 #pragma acc loop vector
|
|
31 for (int jx = 0; jx < 10; jx++)
|
|
32 ;
|
|
33 }
|
|
34
|
|
35 #pragma acc loop gang
|
|
36 for (int jx = 0; jx < 10; jx++)
|
|
37 {
|
|
38 #pragma acc loop tile(*) vector
|
|
39 for (int ix = 0; ix < 10; ix++)
|
|
40 {
|
|
41 }
|
|
42
|
|
43 #pragma acc loop tile(*)
|
|
44 for (int ix = 0; ix < 10; ix++)
|
|
45 {
|
|
46 }
|
|
47 }
|
|
48
|
|
49 #pragma acc loop tile(*) worker
|
|
50 for (int ix = 0; ix < 10; ix++)
|
|
51 {
|
|
52 #pragma acc loop vector
|
|
53 for (int jx = 0; jx < 10; jx++)
|
|
54 ;
|
|
55 }
|
|
56 }
|
|
57 }
|
|
58
|
|
59 void Bad ()
|
|
60 {
|
|
61 #pragma acc parallel num_gangs (10) num_workers(32) vector_length(32)
|
|
62 {
|
|
63
|
|
64 #pragma acc loop tile(*) gang vector /* { dg-message "containing loop" } */
|
|
65 for (int ix = 0; ix < 10; ix++)
|
|
66 {
|
|
67 #pragma acc loop vector /* { dg-error "uses same" } */
|
|
68 for (int jx = 0; jx < 10; jx++)
|
|
69 ;
|
|
70 }
|
|
71
|
|
72 #pragma acc loop tile(*) gang vector
|
|
73 for (int ix = 0; ix < 10; ix++)
|
|
74 {
|
|
75 #pragma acc loop auto /* { dg-warning "insufficient partitioning" } */
|
|
76 for (int jx = 0; jx < 10; jx++)
|
|
77 ;
|
|
78 }
|
|
79
|
|
80 #pragma acc loop tile(*) auto /* { dg-warning "insufficient partitioning" } */
|
|
81 for (int ix = 0; ix < 10; ix++)
|
|
82 {
|
|
83 #pragma acc loop worker
|
|
84 for (int jx = 0; jx < 10; jx++)
|
|
85 ;
|
|
86 }
|
|
87
|
|
88 #pragma acc loop worker /* { dg-message "containing loop" } */
|
|
89 for (int jx = 0; jx < 10; jx++)
|
|
90 {
|
|
91 #pragma acc loop tile(*) gang vector /* { dg-error "incorrectly nested" } */
|
|
92 for (int ix = 0; ix < 10; ix++)
|
|
93 {
|
|
94 }
|
|
95
|
|
96 #pragma acc loop tile(*) vector /* { dg-warning "insufficient partitioning" } */
|
|
97 for (int ix = 0; ix < 10; ix++)
|
|
98 {
|
|
99 }
|
|
100
|
|
101 #pragma acc loop tile(*) /* { dg-warning "insufficient partitioning" } */
|
|
102 for (int ix = 0; ix < 10; ix++)
|
|
103 {
|
|
104 }
|
|
105 }
|
|
106 }
|
|
107 }
|