ID 683176
Date 9/24/2018
Public

## 3.4. Allocating Aligned Memory

When allocating host-side memories that will be used to transfer data to and from the FPGA,the memory must be at least 64-byte aligned.

Aligning the host-side memories allows direct memory access (DMA) transfers to occur to and from the FPGA and improves buffer transfer efficiency.

Attention: Depending on how the host-side memory is used, recommends to allocate more strict alignment. For example, if the allocated memory is used to create a buffer using the CL_MEM_USE_HOST_PTR flag, the memory should also be properly aligned to the data types used to access the buffer in kernel(s). For more information on the alignment requirements of host-side memory, refer to section C.3 of the OpenCL Specification version 1.2.

To set up aligned memory allocations, add the following source code to your host program:

• For Windows:
#define AOCL_ALIGNMENT 64
#include <malloc.h>
void *ptr = _aligned_malloc (size, AOCL_ALIGNMENT);

To free up an aligned memory block, include the function call _aligned_free(ptr);

• For Linux:
#define AOCL_ALIGNMENT 64
#include <stdlib.h>
void *ptr = NULL;
posix_memalign (&ptr, AOCL_ALIGNMENT, size);

To free up an aligned memory block, include the function call free(ptr);