XRT 在 4K 边界内分配存储器空间,用于内部存储器管理。如果主机存储器指针未对齐到页面边界,那么 XRT 会执行额外的 memcpy
以使其对齐。因此,您应将主机存储器指针与 4K 边界对齐,以免执行额外的存储器复制操作。
以下示例演示了如何为主机存储器空间指针使用 posix_memalign
以代替 malloc
。
int *host_mem_ptr; // = (int*) malloc(MAX_LENGTH*sizeof(int));
// Aligning memory in 4K boundary
posix_memalign(&host_mem_ptr,4096,MAX_LENGTH*sizeof(int));
// Fill the memory input
for(int i=0; i<MAX_LENGTH; i++) {
host_mem_ptr[i] = <... >
}
cl_mem dev_mem_ptr = clCreateBuffer(context,
CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,
sizeof(int) * number_of_words, host_mem_ptr, NULL);
err = clEnqueueMigrateMemObjects(commands, 1, dev_mem_ptr, 0, 0,
NULL, NULL);