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.
FPGA Optimization Guide for Intel® oneAPI Toolkits
Introduction To FPGA Design Concepts
Analyze Your Design
Optimize Your Design
FPGA Optimization Flags, Attributes, Pragmas, and Extensions
Quick Reference
Additional Information
Document Revision History for the FPGA Optimization Guide for Intel® oneAPI Toolkits
Refactor the Loop-Carried Data Dependency
Relax Loop-Carried Dependency
Transfer Loop-Carried Dependency to Local Memory
Minimize the Memory Dependencies for Loop Pipelining
Unroll Loops
Fuse Loops to Reduce Overhead and Improve Performance
Optimize Loops With Loop Speculation
Remove Loop Bottlenecks
Shannonization to Improve FMAX/II
Optimize Inner Loop Throughput
Improve Loop Performance by Caching On-Chip Memory
Global Memory Bandwidth Use Calculation
Manual Partition of Global Memory
Partitioning Buffers Across Different Memory Types (Heterogeneous Memory)
Partitioning Buffers Across Memory Channels of the Same Memory Type
Ignoring Dependencies Between Accessor Arguments
Contiguous Memory Accesses
Static Memory Coalescing
Specify Schedule FMAX Target for Kernels (-Xsclock=<clock target>)
Create a 2xclock Interface (-Xsuse-2xclock)
Disable Burst-Interleaving of Global Memory (-Xsno-interleaving=<global_memory_name>)
Force Ring Interconnect for Global Memory (-Xsglobal-ring)
Force a Single Store Ring to Reduce Area (-Xsforce-single-store-ring)
Force Fewer Read Data Reorder Units to Reduce Area (-Xsnum-reorder)
Disable Hardware Kernel Invocation Queue (-Xsno-hardware-kernel-invocation-queue)
Modify the Handshaking Protocol Between Clusters (-Xshyper-optimized-handshaking)
Disable Automatic Fusion of Loops (-Xsdisable-auto-loop-fusion)
Fuse Adjacent Loops With Unequal Trip Counts (-Xsenable-unequal-tc-fusion)
Pipeline Loops in Non-task Kernels (-Xsauto-pipeline)
Control Semantics of Floating-Point Operations (-fp-model=<value>)
Modify the Rounding Mode of Floating-point Operations (-Xsrounding=<rounding_type>)
Global Control of Exit FIFO Latency of Stall-free Clusters (-Xssfc-exit-fifo-type=<value>)
Enable the Read-Only Cache for Read-Only Accessors (-Xsread-only-cache-size=<N>)
Control Hardware Implementation of the Supported Data Types and Math Operations (-Xsdsp-mode=<option>)
Generate Register Map Wrapper (-Xsregister-map-wrapper-type)
Modify the Handshaking Protocol Between Clusters (-Xshyper-optimized-handshaking)
To modify the handshaking protocol between clusters, use the -Xshyper-optimized-handshaking=<auto|off|on> option in your icpx command. The -Xshyper-optimized-handshaking option can be set to one of the following values:
- auto: The Intel® oneAPI DPC++/C++ Compiler chooses whether to enable or disable the optimization. This is the default behavior for all flows except the minimum latency optimization flow.
- on: The compiler enables the optimization if possible. Use this value to achieve a higher fMAX. When you enable the optimization, the compiler adds pipeline registers to the handshaking paths of the stallable nodes. As a result, you observe higher fMAX at the cost of increased area and latency.
- off: The compiler attempts to optimize for lower latency at the potential cost of lower fMAX. Disabling hyper-optimized handshaking might also decrease area. This is useful for smaller designs where you are willing to give up fMAX for lower latency and area. This is the default for the minimum latency optimization flow.
Examples
icpx -fsycl -fintelfpga -Xshardware -Xshyper-optimized-handshaking=auto <source_file>.cpp
icpx -fsycl -fintelfpga -Xshardware -Xshyper-optimized-handshaking=off <source_file>.cpp
icpx -fsycl -fintelfpga -Xshardware -Xshyper-optimized-handshaking=on <source_file>.cpp
NOTE:
The -Xshyper-optimized-handshaking option applies only to designs targeting Intel® Stratix® 10 and Intel Agilex® 7 devices. If you use this option on other target devices, the compiler fails and produces an error. This option applies only when running the report or hardware flow.
Parent topic: Optimization Flags