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

FPGA Extensions

The following section summarizes FPGA extensions supported:

fpga_reg Extension

fpga_reg Extension

FPGA Extension

Description

Example

ext::intel::fpga_reg()

Helps the compiler infer at least one pipelining register in the datapath.

#include <sycl/ext/intel/fpga_extensions.hpp>
r[k] = ext::intel::fpga_reg(a[k]) + b[k];

task_sequence Extension

The following table summarizes the task_sequence template parameters and function APIs:

task_sequence Template Parameters
Template Parameter Description
auto &f typename ReturnT, typename... ArgsT, ReturnT (&f)(ArgsT...) Callable f that defines the asynchronous task to be associated with the task_sequence.
uint32_t invocation_capacity The size of the hardware queue instantiated for async() function calls.
uint32_t response_capacity The size of the hardware queue instantiated to hold task function results.
task_sequence Function APIs
Function API Description
void async(ArgsT... Args) Asynchronously calls f with Args. Increments the number of outstanding tasks by 1.
ReturnT get() Synchronously retrieves the result of an asynchronous call.
~task_sequence() Destructor for task_sequence.

device_global Extension

device_global Extension

FPGA Extension

Description

Example

sycl::ext::oneapi::experimental::device_global()

Introduces device-scoped memory allocations into SYCL that can be accessed within a kernel using C++ global variable syntax. These memory allocations have unique instances per SYCL device.

namespace exp = sycl::ext::oneapi::experimental;
using FPGAProperties = decltype(exp::properties(
    exp::device_image_scope, exp::host_access_none));
exp::device_global<int, FPGAProperties> val;