kupl_mem_copyin
Copy memory from ddr to hbw.
Interface Definition
int kupl_mem_copyin(void *ddr_addr, size_t size, kupl_mem_copyin_flag_t flag, kupl_queue_h queue);
Parameters
Parameter |
Type |
Description |
Input/Output |
|---|---|---|---|
ddr_addr |
void * |
Address of the DDR memory to be copied. |
Input |
size |
size_t |
Size of the memory to be copied, in bytes. |
Input |
flag |
kupl_mem_copyin_flag_t |
Type of the swap-in operation, including: KUPL_MEM_CREATE: If ddr_addr is not in the present state, create a mapping from ddr to hbw (the state changes to present). Otherwise, increment the reference count by 1. KUPL_MEM_IN: If ddr_addr is not in the present state, create a mapping from ddr to hbw and copy the content from ddr to hbw (the state changes to present). Otherwise, increment the reference count by 1. KUPL_MEM_PUSH: Copies the content from ddr to hbw. |
Input |
queue |
kupl_queue_h |
Queue on which the operation is performed. |
Input |
Return Value
- Success: KUPL_OK
- Failure: KUPL_ERROR
Examples
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include "kupl.h" #include <cassert> static int a = 1; void query_and_modify(void *args) { void *hbw = kupl_mem_query(&a); int ret = kupl_hbw_verify(hbw, sizeof(int), 0); *(int *)hbw = 2; } int main() { auto queue = kupl_queue_acquire(1); kupl_mem_copyin(&a, sizeof(int), KUPL_MEM_IN, queue); auto present = kupl_mem_is_present(&a); assert(present == true); kupl_queue_item_desc_t desc { .field_mask = KUPL_QUEUE_ITEM_DESC_FIELD_NAME, .func = query_and_modify, .args = nullptr, .name = "query_and_modify", }; kupl_queue_submit(queue, &desc); kupl_mem_copyout(&a, sizeof(int), KUPL_MEM_OUT, queue); kupl_queue_wait(queue); present = kupl_mem_is_present(&a); assert(present == false); printf("a: %d\n", a); } |
The execution result is as follows:
a: 2
- The preceding example demonstrates the complete swap-in and swap-out process of the ddr and hbw memory. First, use kupl_mem_copyin to copy the memory from ddr to hbw. Then, use kupl_mem_is_present to check memory accessibility. Next, submit an asynchronous task to use kupl_mem_query to look up hbw address for ddr and modify the address. Finally, use kupl_mem_copyout to copy the hbw address back to ddr.