Intel® FPGA SDK for OpenCL™ Standard Edition: Best Practices Guide

ID 683176
Date 9/24/2018
Public
Document Table of Contents

7.2.2. Manual Partitioning of Global Memory

You can partition the memory manually so that each buffer occupies a different memory bank.
The default burst-interleaved configuration of the global memory prevents load imbalance by ensuring that memory accesses do not favor one external memory bank over another. However, you have the option to control the memory bandwidth across a group of buffers by partitioning your data manually.
The cannot burst-interleave across different memory types. To manually partition a specific type of global memory , compile your OpenCL™ kernels with the -no-interleaving=<global_memory_type> flag to configure each bank of a certain memory type as non-interleaved banks.

If your kernel accesses two buffers of equal size in memory, you can distribute your data to both memory banks simultaneously regardless of dynamic scheduling between the loads. This optimization step might increase your apparent memory bandwidth.

If your kernel accesses heterogeneous global memory types, include the -no-interleaving=<global_memory_type> option in the aoc command for each memory type that you want to partition manually.
For more information on the usage of the -no-interleaving=<global_memory_type> option, refer to the Disabling Burst-Interleaving of Global Memory (-no-interleaving=<global_memory_type>) section of the Standard Edition Programming Guide.