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