Developer Guide

FPGA Optimization Guide for Intel® oneAPI Toolkits

ID 767853
Date 7/13/2023
Public

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

Document Table of Contents

Manual Partition 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® oneAPI DPC++/C++ Compiler cannot burst-interleave across different memory types. To manually partition a specific type of global memory, compile your kernels with the -Xsno-interleaving=<global_memory_name> 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 -Xsno-interleaving=<global_memory_name> option in the icpx -fsycl command for each memory type that you want to partition manually.

For more information, refer to Disable Burst-Interleaving of Global Memory (-Xsno-interleaving=<global_memory_name>).