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_directive_data_pack

[Available in release 3.0.0] Controls whether the DATA_PACK directive is placed in the HLS wrapper for struct/class parameters. It is enabled by default (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_directive_data_pack:0

3.1.4. 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.5. 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

It assumes that all task arguments read through the shared wide port are aligned to the port width. Then, the first element of all arguments with a localmem is aligned to the shared memory port width. For example, a shared memory port with a width of 512 bits will require an alignment of 64 bytes. This alignment has to be enforced in all FPGA task levels. The alignment of data copies managed by Nanos++ can be modified with the fpga-alloc-align option (see nanox-fpga-help for more information). Alternatively, the Mercurium option fpga_unaligned_memory_port adds support for unaligned arguments but with a higher FPGA resource consumption.

3.1.6. 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.7. 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.8. 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. It is enabled by default up to release 2.5.2 (the HLS generation remains equal to previous releases). It is disabled by default since release 3.0.0. Usage example to disable the support:

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