Developer Guide
Intel® oneAPI DPC++/C++ Compiler Handbook for FPGAs
                    
                        ID
                        785441
                    
                
                
                    Date
                    6/24/2024
                
                
                    Public
                
            A newer version of this document is available. Customers should click here to go to the newest version.
                
                    
                    
                        Intel oneAPI DPC++/C++ Compiler Handbook for FPGAs Overview
                    
                
                    
                        Introduction To FPGA Design Concepts
                    
                    
                
                    
                        Intel oneAPI FPGA Development
                    
                    
                
                    
                        Getting Started with the Intel oneAPI DPC++/C++ Compiler for Intel FPGA Development
                    
                    
                
                    
                        Defining a Kernel for FPGAs
                    
                    
                
                    
                        Debugging and Verifying Your Design
                    
                    
                
                    
                        Analyzing Your Design
                    
                    
                
                    
                    
                        Optimizing Your Kernel
                    
                
                    
                        Optimizing Your Host Application
                    
                    
                
                    
                    
                        Integrating Your Kernel into DSP Builder for Intel FPGAs
                    
                
                    
                        Integrating Your RTL IP Core Into a System
                    
                    
                
                    
                        RTL IP Core Kernel Interfaces
                    
                    
                
                    
                        Loops
                    
                    
                
                    
                        Pipes
                    
                    
                
                    
                        Data Types and Arithmetic Operations
                    
                    
                
                    
                        Parallelism
                    
                    
                
                    
                        Memories and Memory Operations
                    
                    
                
                    
                        Libraries
                    
                    
                
                    
                        Additional FPGA Acceleration Flow Considerations
                    
                    
                
                    
                        FPGA Optimization Flags, Attributes, Pragmas, and Extensions
                    
                    
                
                    
                        Quick Reference
                    
                    
                
                    
                    
                        Additional Information
                    
                
                    
                    
                        Document Revision History for the Intel oneAPI DPC++/C++ Compiler Handbook for Intel FPGAs
                    
                
                    
                    
                        Notices and Disclaimers
                    
                
            
        
                                    
                                    
                                        
                                        
                                            Set the Environment Variables and Launch Visual Studio* Code
                                        
                                        
                                    
                                        
                                        
                                            Create an FPGA Visual Studio* Code Project
                                        
                                        
                                    
                                        
                                        
                                            Enable Code Completion in a Visual Studio* Code Project
                                        
                                        
                                    
                                        
                                        
                                            Configure Running and Debugging in a Visual Studio* Code Project
                                        
                                        
                                    
                                        
                                        
                                            Debugging Your Kernel in Visual Studio* Code with a Native Debugger
                                        
                                        
                                    
                                        
                                        
                                            Generate and View the FPGA Optimization Report
                                        
                                        
                                    
                                        
                                        
                                            Build and Run the FPGA Hardware Image
                                        
                                        
                                    
                                
                            
                        
                        
                            
                            
                                Throughput
                            
                        
                            
                            
                                Resource Use
                            
                        
                            
                                System-level Profiling Using the Intercept Layer for OpenCL™ Applications
                            
                            
                        
                            
                            
                                Multithreaded Host Application
                            
                        
                            
                            
                                Utilizing Hardware Kernel Invocation Queue
                            
                        
                            
                                Double Buffering Host Utilizing Kernel Invocation Queue
                            
                            
                        
                            
                            
                                N-Way Buffering to Overlap Kernel Execution
                            
                        
                            
                            
                                Prepinning Memory
                            
                        
                            
                            
                                Simple Host-Device Streaming
                            
                        
                            
                            
                                Buffered Host-Device Streaming
                            
                        
                    
                
                        
                        
                            
                            
                                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
                            
                        
                            
                            
                                Improve fMAX/II with Shannonization
                            
                        
                            
                            
                                Optimize Inner Loop Throughput
                            
                        
                            
                            
                                Improve Loop Performance by Caching Data in 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)
                                        
                                        
                                    
                                        
                                        
                                            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)
                                        
                                        
                                    
                                        
                                        
                                            Allow Wide Memory Initialization (-Xsallow-wide-device-globals)
                                        
                                        
                                    
                                
                            
                                    
                                    
                                        
                                        
                                            Specify Schedule fMAX Target for Kernels (scheduler_target_fmax_mhz)
                                        
                                        
                                    
                                        
                                        
                                            Specify a Workgroup Size (max_work_group_size/reqd_work_group_size)
                                        
                                        
                                    
                                        
                                        
                                            Specify Number of SIMD Work Items (num_simd_work_items)
                                        
                                        
                                    
                                        
                                        
                                            Omit Hardware that Generates and Dispatches Kernel IDs (max_global_work_dim)
                                        
                                        
                                    
                                        
                                        
                                            Omit Hardware that Supports Global Work Offsets (no_global_work_offset)
                                        
                                        
                                    
                                        
                                        
                                            Reduce Kernel Area and Latency (use_stall_enable_clusters)
                                        
                                        
                                    
                                
                            Quartus (Static) Summary
After you generate the FPGA image, sections that summarize the compilation results are populated in the report.html. The following sections appear on the Summary page:
- Clock Frequency Summary > Quartus Achieved Clock Frequency: Shows the maximum clock frequencies that you can achieve for the design.
- Quartus Fit Resource Utilization Summary: Shows the total area utilization both for the entire design and for each kernel individually. There is no breakdown of area information by source line.
Compile the entire design in the same folder. The Summary includes everything, as shown in the following report:
 
 
   Parent topic: Analyzing Your Design