Memory Allocation

The sdscc/sds++ compilers analyze your program and select data movers to match the requirements for each hardware function call between software and hardware, based on payload size, hardware interface on the accelerator, and properties of the function arguments. When the compiler can guarantee an array argument is located in physically contiguous memory, it can use the most efficient data movers. Allocating or memory-mapping arrays with the following sds_lib library functions can inform the compiler that memory is physically contiguous.
sds_alloc(size_t size); // guarantees physically contiguous memory
sds_mmap(void *paddr, size_t size, void *vaddr); // paddr must point to contiguous memory
sds_register_dmabuf(void *vaddr, int fd); // assumes physically contiguous memory
It is possible that due to the program structure, the sdscc compiler cannot definitively deduce the memory contiguity, and when this occurs, it issues a warning message, as shown:
WARNING: [SDSoC 0-0] Unable to determine the memory attributes passed to foo_arg_A of function 
foo at foo.cpp:102
You can inform the compiler that the data is allocated in a physically contiguous memory by inserting the following pragma immediately before the function declaration (note: the pragma does not guarantee physically contiguous allocation of memory; your code must use sds_alloc to allocate such memory).
#pragma SDS data mem_attribute (A:PHYSICAL_CONTIGUOUS) // default is NON_PHYSICAL_CONTIGUOUS