@@ -109,55 +109,65 @@ static unsigned char conflict_matrix_half_duplex
109
109
[ACL_NUM_CONFLICT_TYPES][ACL_NUM_CONFLICT_TYPES] = {
110
110
111
111
// NONE, MEM_READ, MEM_WRITE, MEM_RW, KERNEL,
112
- // PROGRAM, HOSTPIPE_READ, HOSTPIPE_WRITE
112
+ // PROGRAM, HOSTPIPE_READ, HOSTPIPE_WRITE,
113
+ // DEVICE_GLOBAL_READ, DEVICE_GLOBAL_WRITE
113
114
// NONE vs.
114
- {0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 }
115
+ {0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 }
115
116
// MEM_READ vs.
116
117
,
117
- {0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 }
118
+ {0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 }
118
119
// MEM_WRITE vs.
119
120
,
120
- {0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 }
121
+ {0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 }
121
122
// MEM_RW vs.
122
123
,
123
- {0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 }
124
+ {0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 }
124
125
// KERNEL vs.
125
126
,
126
- {0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 }
127
+ {0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 }
127
128
// PROGRAM vs.
128
129
,
129
- {1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
130
+ {1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
130
131
// HOSTPIPE_READ vs.
131
- {0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 },
132
+ {0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 1 },
132
133
// HOSTPIPE_WRITE vs.
133
- {0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 }};
134
+ {0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 1 },
135
+ // DEVICE_GLOBAL_READ vs.
136
+ {0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 },
137
+ // DEVICE_GLOBAL_WRITE vs.
138
+ {0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 }};
134
139
135
140
static unsigned char conflict_matrix_full_duplex
136
141
[ACL_NUM_CONFLICT_TYPES][ACL_NUM_CONFLICT_TYPES] = {
137
142
138
143
// NONE, MEM_READ, MEM_WRITE, MEM_RW, KERNEL,
139
144
// PROGRAM, HOSTPIPE_READ, HOSTPIPE_WRITE
145
+ // DEVICE_GLOBAL_READ, DEVICE_GLOBAL_WRITE
140
146
// NONE vs.
141
- {0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 }
147
+ {0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 }
142
148
// MEM_READ vs.
143
149
,
144
- {0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 }
150
+ {0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 0 }
145
151
// MEM_WRITE vs.
146
152
,
147
- {0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 }
153
+ {0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 1 }
148
154
// MEM_RW vs.
149
155
,
150
- {0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 }
156
+ {0 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 1 }
151
157
// KERNEL vs.
152
158
,
153
- {0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 }
159
+ {0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 }
154
160
// PROGRAM vs.
155
161
,
156
- {1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
162
+ {1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
157
163
// HOSTPIPE_READ vs.
158
- {0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 },
164
+ {0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 0 },
159
165
// HOSTPIPE_WRITE vs.
160
- {0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 }};
166
+ {0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 0 },
167
+ // DEVICE_GLOBAL_READ vs.
168
+ {0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 0 },
169
+ // DEVICE_GLOBAL_WRITE vs.
170
+ {0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 1 }};
161
171
162
172
static const char *l_type_name (int op_type) {
163
173
switch (op_type) {
@@ -191,6 +201,12 @@ static const char *l_type_name(int op_type) {
191
201
case ACL_DEVICE_OP_HOSTPIPE_WRITE:
192
202
return " HOSTPIPE_WRITE" ;
193
203
break ;
204
+ case ACL_DEVICE_OP_DEVICE_GLOBAL_READ:
205
+ return " DEVICE_GLOBAL_READ" ;
206
+ break ;
207
+ case ACL_DEVICE_OP_DEVICE_GLOBAL_WRITE:
208
+ return " DEVICE_GLOBAL_WRITE" ;
209
+ break ;
194
210
default :
195
211
return " <err>" ;
196
212
break ;
@@ -279,6 +295,8 @@ void acl_init_device_op_queue_limited(acl_device_op_queue_t *doq,
279
295
doq->usm_memcpy = acl_usm_memcpy;
280
296
doq->hostpipe_read = acl_read_program_hostpipe;
281
297
doq->hostpipe_write = acl_write_program_hostpipe;
298
+ doq->device_global_read = acl_read_device_global;
299
+ doq->device_global_write = acl_write_device_global;
282
300
doq->log_update = 0 ;
283
301
284
302
for (i = 0 ; i < ACL_MAX_DEVICE; i++) {
@@ -334,6 +352,12 @@ acl_device_op_conflict_type_t acl_device_op_conflict_type(acl_device_op_t *op) {
334
352
case ACL_DEVICE_OP_HOSTPIPE_WRITE:
335
353
result = ACL_CONFLICT_HOSTPIPE_WRITE;
336
354
break ;
355
+ case ACL_DEVICE_OP_DEVICE_GLOBAL_READ:
356
+ result = ACL_CONFLICT_DEVICE_GLOBAL_READ;
357
+ break ;
358
+ case ACL_DEVICE_OP_DEVICE_GLOBAL_WRITE:
359
+ result = ACL_CONFLICT_DEVICE_GLOBAL_WRITE;
360
+ break ;
337
361
case ACL_DEVICE_OP_NONE:
338
362
case ACL_NUM_DEVICE_OP_TYPES:
339
363
result = ACL_CONFLICT_NONE;
@@ -630,6 +654,15 @@ l_get_devices_affected_for_op(acl_device_op_t *op, unsigned int physical_ids[],
630
654
num_devices_affected = 1 ;
631
655
}
632
656
break ;
657
+ case ACL_DEVICE_OP_DEVICE_GLOBAL_READ:
658
+ case ACL_DEVICE_OP_DEVICE_GLOBAL_WRITE:
659
+ if (acl_event_is_valid (event) &&
660
+ acl_command_queue_is_valid (event->command_queue )) {
661
+ physical_ids[0 ] = event->command_queue ->device ->def .physical_device_id ;
662
+ conflicts[0 ] = acl_device_op_conflict_type (op);
663
+ num_devices_affected = 1 ;
664
+ }
665
+ break ;
633
666
case ACL_DEVICE_OP_NONE:
634
667
case ACL_NUM_DEVICE_OP_TYPES:
635
668
break ;
@@ -995,7 +1028,9 @@ unsigned l_update_device_op_queue_once(acl_device_op_queue_t *doq) {
995
1028
op->info .type == ACL_DEVICE_OP_MEM_TRANSFER_WRITE ||
996
1029
op->info .type == ACL_DEVICE_OP_MEM_TRANSFER_COPY ||
997
1030
op->info .type == ACL_DEVICE_OP_HOSTPIPE_READ ||
998
- op->info .type == ACL_DEVICE_OP_HOSTPIPE_WRITE)) {
1031
+ op->info .type == ACL_DEVICE_OP_HOSTPIPE_WRITE ||
1032
+ op->info .type == ACL_DEVICE_OP_DEVICE_GLOBAL_READ ||
1033
+ op->info .type == ACL_DEVICE_OP_DEVICE_GLOBAL_WRITE)) {
999
1034
if (!acl_mem_op_requires_transfer (op->info .event ->cmd )) {
1000
1035
is_conflicting = 0 ;
1001
1036
}
@@ -1347,6 +1382,12 @@ void acl_submit_device_op(acl_device_op_queue_t *doq, acl_device_op_t *op) {
1347
1382
case ACL_DEVICE_OP_HOSTPIPE_WRITE:
1348
1383
DOIT (hostpipe_write, op);
1349
1384
break ;
1385
+ case ACL_DEVICE_OP_DEVICE_GLOBAL_READ:
1386
+ DOIT (device_global_read, op);
1387
+ break ;
1388
+ case ACL_DEVICE_OP_DEVICE_GLOBAL_WRITE:
1389
+ DOIT (device_global_write, op);
1390
+ break ;
1350
1391
default :
1351
1392
break ;
1352
1393
}
0 commit comments