3.1. Mercurium FPGA Phase options

The following sections list and summarize the Mercurium options from the FPGA Phase.

3.1.1. force_fpga_periodic_support

Force enabling the periodic tasks support in all FPGA task accelerators. This feature is only enabled in the FPGA task accelerators that require it (the target directive has the period or num_repetitions caluses). Usage example:

fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \
  --Wf,--board=zedboard --variable=force_fpga_periodic_support:1

3.1.2. fpga_check_limits_memory_port

[Available in release 2.5.0] Controls whether the limits of local variables should be enforced when fullfilled using the shared memory port. This means, checking that data is not wrote/read behind the local variable limits. This happens when the variable width is not multiple of shared memory port width. By default the check is enabled. Usage example to disable the check:

fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct --Wf,--board=zedboard \
  --variable=fpga_memory_port_width:128 --variable=fpga_check_limits_memory_port:0

Warning

This option can reduce the resources usage, but the application must ensure that the localmem variables have widths multiple of the shared memory port width.

3.1.3. fpga_ignore_deps_task_spawn

Ignore the data dependences when spawning a task inside a FPGA task accelerator. This creates the task like it was annotated without data dependences. Note that this only affects the task spawn inside a FPGA task accelerator, not other devices which may spawn the task task. Usage example:

fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \
  --Wf,--board=zedboard --variable=fpga_ignore_deps_task_spawn:1

3.1.4. fpga_memory_port_width

Defines the width (in bits) of memory ports (only for wrapper localmem data) for FPGA task accelerators. Usage example:

fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \
  --Wf,--board=zedboard --variable=fpga_memory_port_width:128

3.1.5. fpga_memory_ports_mode

[Available in release 2.5.0] Changes the creation strategy of memory ports between dedicated (default) and type. The dedicated mode creates a port for each task parameter. The type mode creates a port for each parameter data type. Usage example:

fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \
  --Wf,--board=zedboard  --variable=fpga_memory_ports_mode:type

3.1.6. fpga_unaligned_memory_port

[Available in release 2.3.0] Enables the logic to support unaligned memory regions handled by the shared memory port. This option only has effect when the fpga_memory_port_width option is also present. Usage example:

fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \
  --Wf,--board=zedboard  --variable=fpga_memory_port_width:128 \
  --variable=fpga_unaligned_memory_port:1

Warning

This option will increase the resources consumption of FPGA wrappers. However, it may be mandatory depending on application data partition.

3.1.7. fpga_unordered_args

[Available in release 2.5.0] Controls whether the support for handling the task argument out of order must be implemented or not. By default it is enabled, the HLS generation remains equal to previous releases. Usage example to disable the support:

fpgacc --ompss --bitstream-generation src/dotproduct.c -o dotproduct \
  --Wf,--board=zedboard --variable=fpga_unordered_args:0