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

ID 683521
Date 3/28/2022
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

8.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 Intel® FPGA SDK for OpenCL™ Offline Compiler 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 about 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 Intel® FPGA SDK for OpenCL™ Programming Guide.