@@ -93,26 +93,24 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueUSMMemcpy2D(
93
93
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
94
94
}
95
95
96
- UR_APIEXPORT ur_result_t UR_APICALL urEnqueueMemBufferRead (
97
- ur_queue_handle_t hQueue, ur_mem_handle_t hBuffer, bool blockingRead,
98
- size_t offset, size_t size, void *pDst, uint32_t numEventsInWaitList,
99
- const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent) {
100
-
96
+ namespace {
97
+ ur_result_t doMemcpy (ur_queue_handle_t hQueue, void *DestPtr,
98
+ ol_device_handle_t DestDevice, const void *SrcPtr,
99
+ ol_device_handle_t SrcDevice, size_t size, bool blocking,
100
+ uint32_t numEventsInWaitList,
101
+ const ur_event_handle_t *phEventWaitList,
102
+ ur_event_handle_t *phEvent) {
101
103
// Ignore wait list for now
102
104
(void )numEventsInWaitList;
103
105
(void )phEventWaitList;
104
106
//
105
107
106
108
ol_event_handle_t EventOut = nullptr ;
107
109
108
- char *DevPtr =
109
- reinterpret_cast <char *>(std::get<BufferMem>(hBuffer->Mem ).Ptr );
110
-
111
- OL_RETURN_ON_ERR (olMemcpy (hQueue->OffloadQueue , pDst, Adapter->HostDevice ,
112
- DevPtr + offset, hQueue->OffloadDevice , size,
113
- phEvent ? &EventOut : nullptr ));
110
+ OL_RETURN_ON_ERR (olMemcpy (hQueue->OffloadQueue , DestPtr, DestDevice, SrcPtr,
111
+ SrcDevice, size, phEvent ? &EventOut : nullptr ));
114
112
115
- if (blockingRead ) {
113
+ if (blocking ) {
116
114
OL_RETURN_ON_ERR (olWaitQueue (hQueue->OffloadQueue ));
117
115
}
118
116
@@ -124,37 +122,63 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueMemBufferRead(
124
122
125
123
return UR_RESULT_SUCCESS;
126
124
}
125
+ } // namespace
126
+
127
+ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueMemBufferRead (
128
+ ur_queue_handle_t hQueue, ur_mem_handle_t hBuffer, bool blockingRead,
129
+ size_t offset, size_t size, void *pDst, uint32_t numEventsInWaitList,
130
+ const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent) {
131
+ char *DevPtr =
132
+ reinterpret_cast <char *>(std::get<BufferMem>(hBuffer->Mem ).Ptr );
133
+
134
+ return doMemcpy (hQueue, pDst, Adapter->HostDevice , DevPtr + offset,
135
+ hQueue->OffloadDevice , size, blockingRead,
136
+ numEventsInWaitList, phEventWaitList, phEvent);
137
+ }
127
138
128
139
UR_APIEXPORT ur_result_t UR_APICALL urEnqueueMemBufferWrite (
129
140
ur_queue_handle_t hQueue, ur_mem_handle_t hBuffer, bool blockingWrite,
130
141
size_t offset, size_t size, const void *pSrc, uint32_t numEventsInWaitList,
131
142
const ur_event_handle_t *phEventWaitList, ur_event_handle_t *phEvent) {
132
-
133
- // Ignore wait list for now
134
- (void )numEventsInWaitList;
135
- (void )phEventWaitList;
136
- //
137
-
138
- ol_event_handle_t EventOut = nullptr ;
139
-
140
143
char *DevPtr =
141
144
reinterpret_cast <char *>(std::get<BufferMem>(hBuffer->Mem ).Ptr );
142
145
143
- OL_RETURN_ON_ERR (olMemcpy (hQueue->OffloadQueue , DevPtr + offset,
144
- hQueue->OffloadDevice , pSrc, Adapter->HostDevice ,
145
- size, phEvent ? &EventOut : nullptr ));
146
+ return doMemcpy (hQueue, DevPtr + offset, hQueue->OffloadDevice , pSrc,
147
+ Adapter->HostDevice , size, blockingWrite, numEventsInWaitList,
148
+ phEventWaitList, phEvent);
149
+ }
146
150
147
- if (blockingWrite) {
148
- OL_RETURN_ON_ERR (olWaitQueue (hQueue->OffloadQueue ));
151
+ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueDeviceGlobalVariableRead (
152
+ ur_queue_handle_t hQueue, ur_program_handle_t hProgram, const char *name,
153
+ bool blockingRead, size_t count, size_t offset, void *pDst,
154
+ uint32_t numEventsInWaitList, const ur_event_handle_t *phEventWaitList,
155
+ ur_event_handle_t *phEvent) {
156
+ void *Ptr;
157
+ if (auto Err = urProgramGetGlobalVariablePointer (nullptr , hProgram, name,
158
+ nullptr , &Ptr)) {
159
+ return Err;
149
160
}
150
161
151
- if (phEvent) {
152
- auto *Event = new ur_event_handle_t_ ();
153
- Event->OffloadEvent = EventOut;
154
- *phEvent = Event;
162
+ return doMemcpy (hQueue, pDst, Adapter->HostDevice ,
163
+ reinterpret_cast <const char *>(Ptr) + offset,
164
+ hQueue->OffloadDevice , count, blockingRead,
165
+ numEventsInWaitList, phEventWaitList, phEvent);
166
+ }
167
+
168
+ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueDeviceGlobalVariableWrite (
169
+ ur_queue_handle_t hQueue, ur_program_handle_t hProgram, const char *name,
170
+ bool blockingWrite, size_t count, size_t offset, const void *pSrc,
171
+ uint32_t numEventsInWaitList, const ur_event_handle_t *phEventWaitList,
172
+ ur_event_handle_t *phEvent) {
173
+ void *Ptr;
174
+ if (auto Err = urProgramGetGlobalVariablePointer (nullptr , hProgram, name,
175
+ nullptr , &Ptr)) {
176
+ return Err;
155
177
}
156
178
157
- return UR_RESULT_SUCCESS;
179
+ return doMemcpy (hQueue, reinterpret_cast <char *>(Ptr) + offset,
180
+ hQueue->OffloadDevice , pSrc, Adapter->HostDevice , count,
181
+ blockingWrite, numEventsInWaitList, phEventWaitList, phEvent);
158
182
}
159
183
160
184
ur_result_t enqueueNoOp (ur_queue_handle_t hQueue, ur_event_handle_t *phEvent) {
0 commit comments