<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.opm-project.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gmarchiori</id>
	<title>opm - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.opm-project.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gmarchiori"/>
	<link rel="alternate" type="text/html" href="https://wiki.opm-project.org/index.php?title=Special:Contributions/Gmarchiori"/>
	<updated>2026-05-02T13:20:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.13</generator>
	<entry>
		<id>https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1877</id>
		<title>FPGA setup and building</title>
		<link rel="alternate" type="text/html" href="https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1877"/>
		<updated>2021-05-30T20:36:53Z</updated>

		<summary type="html">&lt;p&gt;Gmarchiori: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains instructions on how to setup, compile and use the FPGA &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; required to run the Flow simulator when compiled with the fpgaSolver enabled (ILU0-BiCGSTAB accelerated solver).&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
Using the Flow simulator with an FPGA requires the (offline) generation of a &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; file, which is loaded into the FPGA at runtime and configures it to make available a specific function, in this case the ILU0-BiCGSTAB solver.&amp;lt;br&amp;gt;&lt;br /&gt;
This generation process requires, for the kernel currently present in the FPGA repository, the installation of some Xilinx tools and an additional package to target the [https://www.xilinx.com/products/boards-and-kits/alveo/u280.html Xilinx Alveo U280 board].&amp;lt;br&amp;gt;&lt;br /&gt;
Note that, in order to generate the FPGA bitstream, there is no need for an FPGA board to be installed on the host chosen for the generation process.&lt;br /&gt;
&lt;br /&gt;
The bitstream generation has only been tested on Linux systems with CentOS 7 (7.4-7.9).&amp;lt;br&amp;gt;&lt;br /&gt;
It may however be possible to use other OS configurations (e.g. Ubuntu 16.04/18.04 as officially supported by Xilinx), but this has not been tested.&lt;br /&gt;
&lt;br /&gt;
Please refer to [https://www.xilinx.com/html_docs/xilinx2019_2/vitis_doc/aqm1532064088764.html this page] for documentation about:&lt;br /&gt;
* a list of supported OS and minimum hardware requirements in order to compile bitstreams for the Xilinx Alveo boards (Application Acceleration Development Flow)&lt;br /&gt;
* additional packages that may be required on the host (e.g. OpenCL packages, kernel headers, etc.)&lt;br /&gt;
&lt;br /&gt;
The main tools required are:&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis/2019-2.html Xilinx Vitis, version 2019.2]&amp;lt;br&amp;gt;&amp;#039;&amp;#039;&amp;#039;To download the Xilinx Vitis package, a (free) registration to the Xilinx website is required.&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;Choose a file under &amp;quot;Vitis Core Development Kit&amp;quot;, not the &amp;quot;Update 1&amp;quot; version; for example &amp;quot;Xilinx Unified Installer 2019.2: Linux Self Extracting Web Installer&amp;quot;&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/u280.html Xilinx XRT, version 2.3]&amp;lt;br&amp;gt; Note that the XRT can be used for all the Alveo board versions (not just the U280).&amp;lt;br&amp;gt;In the page &amp;quot;Alveo U280 Package File Downloads&amp;quot;, click on the button &amp;quot;Archive&amp;quot; in the &amp;quot;Tool Version&amp;quot; line.&amp;lt;br&amp;gt;This will expand showing the &amp;quot;2019.2&amp;quot; version button: click on it and leave selected &amp;quot;XDMA&amp;quot; as &amp;quot;Platform Type&amp;quot; and &amp;quot;x86_64&amp;quot; as &amp;quot;Architecture&amp;quot;.&amp;lt;br&amp;gt;Finally, select the &amp;quot;Operating System&amp;quot; for which you want to download the package (currently either &amp;quot;RHEL/CentOS&amp;quot; or &amp;quot;Ubuntu&amp;quot;).&amp;lt;br&amp;gt;For example, when selecting &amp;quot;RHEL/CentOS&amp;quot;, &amp;quot;OS Version&amp;quot; will appear: select &amp;quot;7.x&amp;quot; and a frame will appear below, named &amp;quot;Download Installer for Alveo U280&amp;quot;.&amp;lt;br&amp;gt;Select the choice number 1 (Download the Xilinx Runtime): the file to download will be named xrt_201920.2.3.1301_7.4.1708-xrt.rpm&lt;br /&gt;
&lt;br /&gt;
The additional package needed to target the Xilinx Alveo U280 board is:&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/u280.html Development Target Platform, version 201920.1]&amp;lt;br&amp;gt;In the page &amp;quot;Alveo U280 Package File Downloads&amp;quot;, click on the button &amp;quot;Archive&amp;quot; in the &amp;quot;Tool Version&amp;quot; line.&amp;lt;br&amp;gt;This will expand showing the &amp;quot;2019.2&amp;quot; version button: click on it and leave selected &amp;quot;XDMA&amp;quot; as &amp;quot;Platform Type&amp;quot; and &amp;quot;x86_64&amp;quot; as &amp;quot;Architecture&amp;quot;.&amp;lt;br&amp;gt;Finally, select the &amp;quot;Operating System&amp;quot; for which you want to download the package (currently either &amp;quot;RHEL/CentOS&amp;quot; or &amp;quot;Ubuntu&amp;quot;).&amp;lt;br&amp;gt;For example, when selecting &amp;quot;RHEL/CentOS&amp;quot;, &amp;quot;OS Version&amp;quot; will appear: select &amp;quot;7.x&amp;quot; and a frame will appear below, named &amp;quot;Download Installer for Alveo U280&amp;quot;.&amp;lt;br&amp;gt;Select the choice numer 3 (Download the Development Target Platform): the file to download will be named xilinx-u280-xdma-dev-201920.1-2699728.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warning&amp;#039;&amp;#039;&amp;#039;: the Xilinx FPGA shell used to generate the bitstream must be version 201920.1 (XDMA).&amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, this shell version must also be the one installed on the Xilinx Alveo U280 FPGA board which is used to run the accelerated flow application.&amp;lt;br&amp;gt;&lt;br /&gt;
In principle, the shell version can be changed to a different one (typically a newer one), but the bitstream generation process may fail or generate sub-performing bitstreams (e.g. in case the shell allocates the static resources differently than the one used currently), and changes may be required to the makefiles and other code in the FPGA repository.&lt;br /&gt;
&lt;br /&gt;
= Downloading =&lt;br /&gt;
&lt;br /&gt;
Download the FPGA repository (read-only) by doing:&lt;br /&gt;
    git clone git://github.com/OPM/FPGA.git&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
&lt;br /&gt;
After having installed the Xilinx tools and downloaded the FPGA repository, the following steps are needed to generate the bitstream:&lt;br /&gt;
&lt;br /&gt;
* setup the Xilinx Vitis environment, e.g.:&lt;br /&gt;
    source &amp;lt;path to the Xilinx Vitis base directory&amp;gt;/Vitis/2019.2/settings64.sh&lt;br /&gt;
* setup the Xilinx XRT environment, e.g.:&lt;br /&gt;
    source &amp;lt;path to the Xilinx XRT base directory&amp;gt;/source.sh&lt;br /&gt;
* change to the implementation directory and run:&lt;br /&gt;
    cd &amp;lt;path to the FPGA repository base directory&amp;gt;/linearalgebra/ilu0bicgstab/xilinx/alveo_u280/vitis_20192/HW-implementation&lt;br /&gt;
    make bitstream&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039;: in case the Xilinx board package has been installed in a path different than the default one (/opt/xilinx/platforms/xilinx_u280_xdma_201920_1/xilinx_u280_xdma_201920_1.xsa), use the variable &amp;#039;&amp;#039;&amp;#039;PLATFORM_XSA&amp;#039;&amp;#039;&amp;#039; to change its path, e.g.:&lt;br /&gt;
    make PLATFORM_XSA=/path/to/xilinx_u280_xdma_201920_1.xsa bitstream&lt;br /&gt;
&lt;br /&gt;
After the last command finishes successfully (it may take several hours), the following files, among others, will be present in the implementation directory:&lt;br /&gt;
* bicgstab_kernel.xclbin (the bitstream file)&lt;br /&gt;
* bicgstab_kernel.xclbin.info (a text file with a summary of the current bitstream implementation results)&lt;br /&gt;
&lt;br /&gt;
Typically, the bitstream generation process will be mainly constrained by the CPU&amp;#039;s cores maximum frequency (the tools don&amp;#039;t always use multi-threading), the local storage speed and the amount of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
As an example, the bitstream generation flow has been tested by using an host running with CentOS 7.9 (x86_64), an AMD Ryzen 9 3950X CPU, 64 GB of RAM and a fast RAID5 disk configuration.&amp;lt;br&amp;gt;&lt;br /&gt;
The whole generation process took around 3 hours and used around 4 GB of disk space.&lt;br /&gt;
&lt;br /&gt;
Finally, this command can be used to completely clean up the result of a previous implementation; this will &amp;#039;&amp;#039;&amp;#039;delete&amp;#039;&amp;#039;&amp;#039; also the &amp;#039;&amp;#039;&amp;#039;generated bitstream&amp;#039;&amp;#039;&amp;#039;, so &amp;#039;&amp;#039;&amp;#039;use with care!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    make clean_all&lt;br /&gt;
&lt;br /&gt;
= Using the bitstream =&lt;br /&gt;
&lt;br /&gt;
To use the bitstream, copy the file &amp;#039;&amp;#039;&amp;#039;bicgstab_kernel.xclbin&amp;#039;&amp;#039;&amp;#039; on the host where the FPGA board is installed.&amp;lt;br&amp;gt;&lt;br /&gt;
Please refer to the &amp;quot;Install Guide&amp;quot; in [https://www.xilinx.com/products/boards-and-kits/alveo/u280.html#gettingStarted this page] for documentation regarding the installation and setup of the Xilinx Alveo U280 board.&amp;lt;br&amp;gt;&lt;br /&gt;
The XSA shell installed on the board must be the same specified in the [[#Prerequisites]] section.&amp;lt;br&amp;gt;&lt;br /&gt;
It may also be possible to use a cloud service provider that makes available nodes with the Alveo U280 board instead of an on-premises host. Please check the [https://www.xilinx.com/products/boards-and-kits/alveo.html Alveo pages] for more info about this option.&lt;br /&gt;
&lt;br /&gt;
Moreover, you&amp;#039;ll need to use a Flow simulator binary file compiled with FPGA support enabled.&amp;lt;br&amp;gt;&lt;br /&gt;
The current source code for the Flow simulator (still under review at the moment of writing) contains modifications to enable the Xilinx Alveo board (see [https://github.com/OPM/opm-simulators/pull/2998 PR #2998], [https://github.com/OPM/opm-simulators opm-simulators]).&lt;br /&gt;
&lt;br /&gt;
The host containing the FPGA board should be already properly setup (e.g. the proper drivers and the Xilinx XRT must be installed and setup).&amp;lt;br&amp;gt;&lt;br /&gt;
Then, the following command line parameters can be used to run flow with the FPGA:&lt;br /&gt;
    --accelerator-mode=fpga&lt;br /&gt;
    --fpga-bitstream=/path/to/bicgstab_kernel.xclbin&lt;br /&gt;
    --matrix-add-well-contributions=true                    # required for FPGA&lt;br /&gt;
    --opencl-ilu-reorder=[level_scheduling|graph_coloring]  # optional: the default will be &amp;quot;level_scheduling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
An example command line to run flow with the FPGA accelerator is (set the proper paths before running it!):&lt;br /&gt;
    /path/to/flow /path/to/opm-tests/norne/NORNE_ATW2013.DATA \&lt;br /&gt;
     --accelerator-mode=fpga \&lt;br /&gt;
     --fpga-bitstream=/path/to/bicgstab_kernel.xclbin \&lt;br /&gt;
     --matrix-add-well-contributions=true \&lt;br /&gt;
     --threads-per-process=8 \&lt;br /&gt;
     --output-dir=./output_norne_fpga&lt;br /&gt;
&lt;br /&gt;
=== Notes about performance measurements ===&lt;br /&gt;
&lt;br /&gt;
In order to work with flow, the FPGA must be programmed with the proper bitstream before it makes available the solver kernel functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
This is done automatically by flow when it&amp;#039;s run with the proper command line parameters as shown in the previous section.&amp;lt;br&amp;gt;&lt;br /&gt;
However, when running flow for the first time after the host is started (or if the FPGA has been previously programmed with a different bitstream than the solver), the bitstream will be programmed into the FPGA, and this may take around 6 seconds, thus adding overhead to the total execution time.&amp;lt;br&amp;gt;&lt;br /&gt;
The FPGA programming is not needed for successive executions of flow, because the Xilinx runtime (XRT) will recognize that the FPGA is already programmed with the proper bitstream, and there will be no overhead on the total execution time.&amp;lt;br&amp;gt;&lt;br /&gt;
Hence, when interested in checking FPGA performance, it is suggested to use &amp;#039;&amp;#039;&amp;#039;one&amp;#039;&amp;#039;&amp;#039; of the following options before executing the tests:&lt;br /&gt;
* run flow in FPGA mode with a small dataset (e.g., SPE1CASE1.DATA found in opm-tests/spe1/): this will load the bitstream and make it available;&lt;br /&gt;
* run the Xilinx programming tool to pre-load the bitstream (xbutil is part of the Xilinx XRT package):&lt;br /&gt;
    xbutil program -p /path/to/bicgstab_kernel.xclbin&lt;br /&gt;
and then proceed to run with the interesting datasets.&amp;lt;br&amp;gt;&lt;br /&gt;
Note: if you have more than one FPGA boards on the host, add &amp;quot;-d&amp;lt;device number&amp;gt;&amp;quot; on the xbutil command line to specify which FPGA must be programmed. Flow will always use only the first Alveo U280 board in the host (e.g. the one with the lowest device number).&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
The FPGA acceleration is still experimental and the solver kernel may not work when the input case exceeds some internal limitations, which may not be directly connected with the input case size.&amp;lt;br&amp;gt;&lt;br /&gt;
When this happens, flow will exit with an error.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, when running with spe1/SPE10_MODEL1.DATA:&lt;br /&gt;
    [...]&lt;br /&gt;
    ERROR: decode_debuginfo_bicgstab: HW kernel was aborted because it ran for more than 2000000000 clock cycles.&lt;br /&gt;
    ERROR: detected unrecoverable FPGA error (ABRT=1,SIG=0,OVF=0).&lt;br /&gt;
    [...]&lt;br /&gt;
or, when running with norne/NORNE_ATW2013.DATA and using &amp;#039;&amp;#039;graph coloring&amp;#039;&amp;#039; instead of the default &amp;#039;&amp;#039;level scheduling&amp;#039;&amp;#039; reordering (&amp;#039;&amp;#039;level scheduling&amp;#039;&amp;#039; would work fine):&lt;br /&gt;
    [...]&lt;br /&gt;
    ERROR: Current reordering exceeds maximum number of columns per color limit: 9736/8192.&lt;br /&gt;
    ERROR: findPartitionColumns failed (-1).&lt;br /&gt;
    [...]&lt;br /&gt;
(note that the format of the error messages above may change with the evolution of the source code).&lt;br /&gt;
&lt;br /&gt;
The FPGA acceleration does not support ensemble runs, because currently there is only one solver instance on the FPGA which cannot be shared among different processes.&amp;lt;br&amp;gt;&lt;br /&gt;
Hence, the first flow process that starts using the FPGA won&amp;#039;t release it until it finishes, barring the use of the FPGA by other processes for the whole run time.&lt;br /&gt;
&lt;br /&gt;
= Additional documentation =&lt;br /&gt;
&lt;br /&gt;
For further information, please refer to this paper currently on Arxiv: [https://arxiv.org/abs/2101.01745 Hardware Acceleration of HPC Computational Flow Dynamics using HBM-enabled FPGAs]&amp;lt;br&amp;gt;&lt;br /&gt;
This paper provides an in-depth description of the ILU0-BiCGSTAB solver kernel, including some FPGA performances gathered with a slightly older version of the Flow simulator (2020.10-rc4) and a comparison with software-only and GPU implementations.&lt;br /&gt;
&lt;br /&gt;
=== Notes on HBM/DDR4 memory banks usage ===&lt;br /&gt;
&lt;br /&gt;
Here we report some notes about the rationale of the memory banks usage on the current target platform.&amp;lt;br&amp;gt;&lt;br /&gt;
The kernel needs some memory buffers to store the ILU matrices as provided by the decomposition pre-processing step performed on the host, along with the initial values for the input system and some additional data.&amp;lt;br&amp;gt;&lt;br /&gt;
We choose to store most of these data in the DDR4 memory banks because they allow for a larger size (16 GB per bank, two banks available) compared to the HBM memory stacks (256 MB per port because the Xilinx shell doesn&amp;#039;t use the crossbar, 32 ports available), and because on the machine we used the data bandwidth between the host and the DDR4 memory was higher than the one between the host and the HBM banks (this may have been a configuration issue specific of the machine we used, but we couldn&amp;#039;t test the board on another host to confirm it).&amp;lt;br&amp;gt;&lt;br /&gt;
Moreover, the HBM memory is used by the solver mainly to transfer data between the various units of its pipeline (and to hold the final results), hence the lower latency offered by the HBM ports was beneficial for the overall performances.&amp;lt;br&amp;gt;&lt;br /&gt;
Re-targeting the solver for another platform which does not have the HBM memory stacks should be possible, e.g. the Xilinx Alveo U200/U250 boards.&amp;lt;br&amp;gt;&lt;br /&gt;
However, the limited number of DDR4 memory ports available on those boards (up to 4) and the additional routing complexity (the DDR4 ports would be most probably implemented in different SLRs than the solver kernel, which would incur in additional routing delays) would make it difficult to reach high clock speed, compared to the one reached by the current design on the Xilinx Alveo U280 (around 280 MHz).&lt;br /&gt;
&lt;br /&gt;
= Reporting issues =&lt;br /&gt;
&lt;br /&gt;
Issues specific to the FPGA bitstream can be reported in the git issue tracker at:&lt;br /&gt;
    http://github.com/OPM/FPGA/issues&lt;/div&gt;</summary>
		<author><name>Gmarchiori</name></author>
	</entry>
	<entry>
		<id>https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1857</id>
		<title>FPGA setup and building</title>
		<link rel="alternate" type="text/html" href="https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1857"/>
		<updated>2021-01-22T14:15:36Z</updated>

		<summary type="html">&lt;p&gt;Gmarchiori: Removed unnecessary comment in command line.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains instructions on how to setup, compile and use the FPGA &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; required to run the Flow simulator when compiled with the fpgaSolver enabled (ILU0-BiCGSTAB accelerated solver).&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
Using the Flow simulator with an FPGA requires the (offline) generation of a &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; file, which is loaded into the FPGA at runtime and configures it to make available a specific function, in this case the ILU0-BiCGSTAB solver.&amp;lt;br&amp;gt;&lt;br /&gt;
This generation process requires, for the kernel currently present in the FPGA repository, the installation of some Xilinx tools and an additional package to target the [https://www.xilinx.com/products/boards-and-kits/alveo/u280.html Xilinx Alveo U280 board].&amp;lt;br&amp;gt;&lt;br /&gt;
Note that, in order to generate the FPGA bitstream, there is no need for an FPGA board to be installed on the host chosen for the generation process.&lt;br /&gt;
&lt;br /&gt;
The bitstream generation has only been tested on Linux systems with CentOS 7 (7.4-7.9).&amp;lt;br&amp;gt;&lt;br /&gt;
It may however be possible to use other OS configurations (e.g. Ubuntu 16.04/18.04 as officially supported by Xilinx), but this has not been tested.&lt;br /&gt;
&lt;br /&gt;
Please refer to [https://www.xilinx.com/html_docs/xilinx2019_2/vitis_doc/aqm1532064088764.html this page] for documentation about:&lt;br /&gt;
* a list of supported OS and minimum hardware requirements in order to compile bitstreams for the Xilinx Alveo boards (Application Acceleration Development Flow)&lt;br /&gt;
* additional packages that may be required on the host (e.g. OpenCL packages, kernel headers, etc.)&lt;br /&gt;
&lt;br /&gt;
The main tools required are:&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis/2019-2.html Xilinx Vitis, version 2019.2]&amp;lt;br&amp;gt;&amp;#039;&amp;#039;&amp;#039;To download the Xilinx Vitis package, a (free) registration to the Xilinx website is required.&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;Choose a file under &amp;quot;Vitis Core Development Kit&amp;quot;, not the &amp;quot;Update 1&amp;quot; version; for example &amp;quot;Xilinx Unified Installer 2019.2: Linux Self Extracting Web Installer&amp;quot;&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/u280.html Xilinx XRT, version 2.3]&amp;lt;br&amp;gt; Note that the XRT can be used for all the Alveo board versions (not just the U280).&amp;lt;br&amp;gt;In the page &amp;quot;Alveo U280 Package File Downloads&amp;quot;, click on the button &amp;quot;Archive&amp;quot; in the &amp;quot;Tool Version&amp;quot; line.&amp;lt;br&amp;gt;This will expand showing the &amp;quot;2019.2&amp;quot; version button: click on it and leave selected &amp;quot;XDMA&amp;quot; as &amp;quot;Platform Type&amp;quot; and &amp;quot;x86_64&amp;quot; as &amp;quot;Architecture&amp;quot;.&amp;lt;br&amp;gt;Finally, select the &amp;quot;Operating System&amp;quot; for which you want to download the package (currently either &amp;quot;RHEL/CentOS&amp;quot; or &amp;quot;Ubuntu&amp;quot;).&amp;lt;br&amp;gt;For example, when selecting &amp;quot;RHEL/CentOS&amp;quot;, &amp;quot;OS Version&amp;quot; will appear: select &amp;quot;7.x&amp;quot; and a frame will appear below, named &amp;quot;Download Installer for Alveo U280&amp;quot;.&amp;lt;br&amp;gt;Select the choice number 1 (Download the Xilinx Runtime): the file to download will be named xrt_201920.2.3.1301_7.4.1708-xrt.rpm&lt;br /&gt;
&lt;br /&gt;
The additional package needed to target the Xilinx Alveo U280 board is:&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/u280.html Development Target Platform, version 201920.1]&amp;lt;br&amp;gt;In the page &amp;quot;Alveo U280 Package File Downloads&amp;quot;, click on the button &amp;quot;Archive&amp;quot; in the &amp;quot;Tool Version&amp;quot; line.&amp;lt;br&amp;gt;This will expand showing the &amp;quot;2019.2&amp;quot; version button: click on it and leave selected &amp;quot;XDMA&amp;quot; as &amp;quot;Platform Type&amp;quot; and &amp;quot;x86_64&amp;quot; as &amp;quot;Architecture&amp;quot;.&amp;lt;br&amp;gt;Finally, select the &amp;quot;Operating System&amp;quot; for which you want to download the package (currently either &amp;quot;RHEL/CentOS&amp;quot; or &amp;quot;Ubuntu&amp;quot;).&amp;lt;br&amp;gt;For example, when selecting &amp;quot;RHEL/CentOS&amp;quot;, &amp;quot;OS Version&amp;quot; will appear: select &amp;quot;7.x&amp;quot; and a frame will appear below, named &amp;quot;Download Installer for Alveo U280&amp;quot;.&amp;lt;br&amp;gt;Select the choice numer 3 (Download the Development Target Platform): the file to download will be named xilinx-u280-xdma-dev-201920.1-2699728.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warning&amp;#039;&amp;#039;&amp;#039;: the Xilinx FPGA shell used to generate the bitstream must be version 201920.1 (XDMA).&amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, this shell version must also be the one installed on the Xilinx Alveo U280 FPGA board which is used to run the accelerated flow application.&amp;lt;br&amp;gt;&lt;br /&gt;
In principle, the shell version can be changed to a different one (typically a newer one), but the bitstream generation process may fail or generate sub-performing bitstreams (e.g. in case the shell allocates the static resources differently than the one used currently), and changes may be required to the makefiles and other code in the FPGA repository.&lt;br /&gt;
&lt;br /&gt;
= Downloading =&lt;br /&gt;
&lt;br /&gt;
Download the FPGA repository (read-only) by doing:&lt;br /&gt;
    git clone git://github.com/OPM/FPGA.git&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
&lt;br /&gt;
After having installed the Xilinx tools and downloaded the FPGA repository, the following steps are needed to generate the bitstream:&lt;br /&gt;
&lt;br /&gt;
* setup the Xilinx Vitis environment, e.g.:&lt;br /&gt;
    source &amp;lt;path to the Xilinx Vitis base directory&amp;gt;/Vitis/2019.2/settings64.sh&lt;br /&gt;
* setup the Xilinx XRT environment, e.g.:&lt;br /&gt;
    source &amp;lt;path to the Xilinx XRT base directory&amp;gt;/source.sh&lt;br /&gt;
* change to the implementation directory and run:&lt;br /&gt;
    cd &amp;lt;path to the FPGA repository base directory&amp;gt;/linearalgebra/ilu0bicgstab/xilinx/alveo_u280/vitis_20192/HW-implementation&lt;br /&gt;
    make bitstream&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039;: in case the Xilinx board package has been installed in a path different than the default one (/opt/xilinx/platforms/xilinx_u280_xdma_201920_1/xilinx_u280_xdma_201920_1.xsa), use the variable &amp;#039;&amp;#039;&amp;#039;PLATFORM_XSA&amp;#039;&amp;#039;&amp;#039; to change its path, e.g.:&lt;br /&gt;
    make PLATFORM_XSA=/path/to/xilinx_u280_xdma_201920_1.xsa bitstream&lt;br /&gt;
&lt;br /&gt;
After the last command finishes successfully (it may take several hours), the following files, among others, will be present in the implementation directory:&lt;br /&gt;
* bicgstab_kernel.xclbin (the bitstream file)&lt;br /&gt;
* bicgstab_kernel.xclbin.info (a text file with a summary of the current bitstream implementation results)&lt;br /&gt;
&lt;br /&gt;
Typically, the bitstream generation process will be mainly constrained by the CPU&amp;#039;s cores maximum frequency (the tools don&amp;#039;t always use multi-threading), the local storage speed and the amount of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
As an example, the bitstream generation flow has been tested by using an host running with CentOS 7.9 (x86_64), an AMD Ryzen 9 3950X CPU, 64 GB of RAM and a fast RAID5 disk configuration.&amp;lt;br&amp;gt;&lt;br /&gt;
The whole generation process took around 3 hours and used around 4 GB of disk space.&lt;br /&gt;
&lt;br /&gt;
Finally, this command can be used to completely clean up the result of a previous implementation; this will &amp;#039;&amp;#039;&amp;#039;delete&amp;#039;&amp;#039;&amp;#039; also the &amp;#039;&amp;#039;&amp;#039;generated bitstream&amp;#039;&amp;#039;&amp;#039;, so &amp;#039;&amp;#039;&amp;#039;use with care!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    make clean_all&lt;br /&gt;
&lt;br /&gt;
= Using the bitstream =&lt;br /&gt;
&lt;br /&gt;
To use the bitstream, copy the file &amp;#039;&amp;#039;&amp;#039;bicgstab_kernel.xclbin&amp;#039;&amp;#039;&amp;#039; on the host where the FPGA board is installed.&amp;lt;br&amp;gt;&lt;br /&gt;
Please refer to the &amp;quot;Install Guide&amp;quot; in [https://www.xilinx.com/products/boards-and-kits/alveo/u280.html#gettingStarted this page] for documentation regarding the installation and setup of the Xilinx Alveo U280 board.&amp;lt;br&amp;gt;&lt;br /&gt;
The XSA shell installed on the board must be the same specified in the [[#Prerequisites]] section.&amp;lt;br&amp;gt;&lt;br /&gt;
It may also be possible to use a cloud service provider that makes available nodes with the Alveo U280 board instead of an on-premises host. Please check the [https://www.xilinx.com/products/boards-and-kits/alveo.html Alveo pages] for more info about this option.&lt;br /&gt;
&lt;br /&gt;
Moreover, you&amp;#039;ll need to use a Flow simulator binary file compiled with FPGA support enabled.&amp;lt;br&amp;gt;&lt;br /&gt;
The current source code for the Flow simulator (still under review at the moment of writing) contains modifications to enable the Xilinx Alveo board (see [https://github.com/OPM/opm-simulators/pull/2998 PR #2998], [https://github.com/OPM/opm-simulators opm-simulators]).&lt;br /&gt;
&lt;br /&gt;
The host containing the FPGA board should be already properly setup (e.g. the proper drivers and the Xilinx XRT must be installed and setup).&amp;lt;br&amp;gt;&lt;br /&gt;
Then, the following command line parameters can be used to run flow with the FPGA:&lt;br /&gt;
    --accelerator-mode=fpga&lt;br /&gt;
    --fpga-bitstream=/path/to/bicgstab_kernel.xclbin&lt;br /&gt;
    --matrix-add-well-contributions=true                    # required for FPGA&lt;br /&gt;
    --opencl-ilu-reorder=[level_scheduling|graph_coloring]  # optional: the default will be &amp;quot;level_scheduling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
An example command line to run flow with the FPGA accelerator is (set the proper paths before running it!):&lt;br /&gt;
    /path/to/flow /path/to/opm-tests/norne/NORNE_ATW2013.DATA \&lt;br /&gt;
     --accelerator-mode=fpga \&lt;br /&gt;
     --fpga-bitstream=/path/to/bicgstab_kernel.xclbin \&lt;br /&gt;
     --matrix-add-well-contributions=true \&lt;br /&gt;
     --threads-per-process=8 \&lt;br /&gt;
     --output-dir=./output_norne_fpga&lt;br /&gt;
&lt;br /&gt;
=== Notes about performance measurements ===&lt;br /&gt;
&lt;br /&gt;
In order to work with flow, the FPGA must be programmed with the proper bitstream before it makes available the solver kernel functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
This is done automatically by flow when it&amp;#039;s run with the proper command line parameters as shown in the previous section.&amp;lt;br&amp;gt;&lt;br /&gt;
However, when running flow for the first time after the host is started (or if the FPGA has been previously programmed with a different bitstream than the solver), the bitstream will be programmed into the FPGA, and this may take around 6 seconds, thus adding overhead to the total execution time.&amp;lt;br&amp;gt;&lt;br /&gt;
The FPGA programming is not needed for successive executions of flow, because the Xilinx runtime (XRT) will recognize that the FPGA is already programmed with the proper bitstream, and there will be no overhead on the total execution time.&amp;lt;br&amp;gt;&lt;br /&gt;
Hence, when interested in checking FPGA performance, it is suggested to use &amp;#039;&amp;#039;&amp;#039;one&amp;#039;&amp;#039;&amp;#039; of the following options before executing the tests:&lt;br /&gt;
* run flow in FPGA mode with a small dataset (e.g., SPE1CASE1.DATA found in opm-tests/spe1/): this will load the bitstream and make it available;&lt;br /&gt;
* run the Xilinx programming tool to pre-load the bitstream (xbutil is part of the Xilinx XRT package):&lt;br /&gt;
    xbutil program -p /path/to/bicgstab_kernel.xclbin&lt;br /&gt;
and then proceed to run with the interesting datasets.&amp;lt;br&amp;gt;&lt;br /&gt;
Note: if you have more than one FPGA boards on the host, add &amp;quot;-d&amp;lt;device number&amp;gt;&amp;quot; on the xbutil command line to specify which FPGA must be programmed. Flow will always use only the first Alveo U280 board in the host (e.g. the one with the lowest device number).&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
The FPGA acceleration is still experimental and the solver kernel may not work when the input case exceeds some internal limitations, which may not be directly connected with the input case size.&amp;lt;br&amp;gt;&lt;br /&gt;
When this happens, flow will exit with an error.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, when running with spe1/SPE10_MODEL1.DATA:&lt;br /&gt;
    [...]&lt;br /&gt;
    ERROR: decode_debuginfo_bicgstab: HW kernel was aborted because it ran for more than 2000000000 clock cycles.&lt;br /&gt;
    ERROR: detected unrecoverable FPGA error (ABRT=1,SIG=0,OVF=0).&lt;br /&gt;
    [...]&lt;br /&gt;
or, when running with norne/NORNE_ATW2013.DATA and using &amp;#039;&amp;#039;graph coloring&amp;#039;&amp;#039; instead of the default &amp;#039;&amp;#039;level scheduling&amp;#039;&amp;#039; reordering (&amp;#039;&amp;#039;level scheduling&amp;#039;&amp;#039; would work fine):&lt;br /&gt;
    [...]&lt;br /&gt;
    ERROR: Current reordering exceeds maximum number of columns per color limit: 9736/8192.&lt;br /&gt;
    ERROR: findPartitionColumns failed (-1).&lt;br /&gt;
    [...]&lt;br /&gt;
(note that the format of the error messages above may change with the evolution of the source code).&lt;br /&gt;
&lt;br /&gt;
The FPGA acceleration does not support ensemble runs, because currently there is only one solver instance on the FPGA which cannot be shared among different processes.&amp;lt;br&amp;gt;&lt;br /&gt;
Hence, the first flow process that starts using the FPGA won&amp;#039;t release it until it finishes, barring the use of the FPGA by other processes for the whole run time.&lt;br /&gt;
&lt;br /&gt;
= Additional documentation =&lt;br /&gt;
&lt;br /&gt;
For further information, please refer to this paper currently on Arxiv: [https://arxiv.org/abs/2101.01745 Hardware Acceleration of HPC Computational Flow Dynamics using HBM-enabled FPGAs]&amp;lt;br&amp;gt;&lt;br /&gt;
This paper provides an in-depth description of the ILU0-BiCGSTAB solver kernel, including some FPGA performances gathered with a slightly older version of the Flow simulator (2020.10-rc4) and a comparison with software-only and GPU implementations.&lt;br /&gt;
&lt;br /&gt;
= Reporting issues =&lt;br /&gt;
&lt;br /&gt;
Issues specific to the FPGA bitstream can be reported in the git issue tracker at:&lt;br /&gt;
    http://github.com/OPM/FPGA/issues&lt;/div&gt;</summary>
		<author><name>Gmarchiori</name></author>
	</entry>
	<entry>
		<id>https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1856</id>
		<title>FPGA setup and building</title>
		<link rel="alternate" type="text/html" href="https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1856"/>
		<updated>2021-01-22T10:44:11Z</updated>

		<summary type="html">&lt;p&gt;Gmarchiori: Added link to paper.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains instructions on how to setup, compile and use the FPGA &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; required to run the Flow simulator when compiled with the fpgaSolver enabled (ILU0-BiCGSTAB accelerated solver).&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
Using the Flow simulator with an FPGA requires the (offline) generation of a &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; file, which is loaded into the FPGA at runtime and configures it to make available a specific function, in this case the ILU0-BiCGSTAB solver.&amp;lt;br&amp;gt;&lt;br /&gt;
This generation process requires, for the kernel currently present in the FPGA repository, the installation of some Xilinx tools and an additional package to target the [https://www.xilinx.com/products/boards-and-kits/alveo/u280.html Xilinx Alveo U280 board].&amp;lt;br&amp;gt;&lt;br /&gt;
Note that, in order to generate the FPGA bitstream, there is no need for an FPGA board to be installed on the host chosen for the generation process.&lt;br /&gt;
&lt;br /&gt;
The bitstream generation has only been tested on Linux systems with CentOS 7 (7.4-7.9).&amp;lt;br&amp;gt;&lt;br /&gt;
It may however be possible to use other OS configurations (e.g. Ubuntu 16.04/18.04 as officially supported by Xilinx), but this has not been tested.&lt;br /&gt;
&lt;br /&gt;
Please refer to [https://www.xilinx.com/html_docs/xilinx2019_2/vitis_doc/aqm1532064088764.html this page] for documentation about:&lt;br /&gt;
* a list of supported OS and minimum hardware requirements in order to compile bitstreams for the Xilinx Alveo boards (Application Acceleration Development Flow)&lt;br /&gt;
* additional packages that may be required on the host (e.g. OpenCL packages, kernel headers, etc.)&lt;br /&gt;
&lt;br /&gt;
The main tools required are:&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis/2019-2.html Xilinx Vitis, version 2019.2]&amp;lt;br&amp;gt;&amp;#039;&amp;#039;&amp;#039;To download the Xilinx Vitis package, a (free) registration to the Xilinx website is required.&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;Choose a file under &amp;quot;Vitis Core Development Kit&amp;quot;, not the &amp;quot;Update 1&amp;quot; version; for example &amp;quot;Xilinx Unified Installer 2019.2: Linux Self Extracting Web Installer&amp;quot;&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/u280.html Xilinx XRT, version 2.3]&amp;lt;br&amp;gt; Note that the XRT can be used for all the Alveo board versions (not just the U280).&amp;lt;br&amp;gt;In the page &amp;quot;Alveo U280 Package File Downloads&amp;quot;, click on the button &amp;quot;Archive&amp;quot; in the &amp;quot;Tool Version&amp;quot; line.&amp;lt;br&amp;gt;This will expand showing the &amp;quot;2019.2&amp;quot; version button: click on it and leave selected &amp;quot;XDMA&amp;quot; as &amp;quot;Platform Type&amp;quot; and &amp;quot;x86_64&amp;quot; as &amp;quot;Architecture&amp;quot;.&amp;lt;br&amp;gt;Finally, select the &amp;quot;Operating System&amp;quot; for which you want to download the package (currently either &amp;quot;RHEL/CentOS&amp;quot; or &amp;quot;Ubuntu&amp;quot;).&amp;lt;br&amp;gt;For example, when selecting &amp;quot;RHEL/CentOS&amp;quot;, &amp;quot;OS Version&amp;quot; will appear: select &amp;quot;7.x&amp;quot; and a frame will appear below, named &amp;quot;Download Installer for Alveo U280&amp;quot;.&amp;lt;br&amp;gt;Select the choice number 1 (Download the Xilinx Runtime): the file to download will be named xrt_201920.2.3.1301_7.4.1708-xrt.rpm&lt;br /&gt;
&lt;br /&gt;
The additional package needed to target the Xilinx Alveo U280 board is:&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/u280.html Development Target Platform, version 201920.1]&amp;lt;br&amp;gt;In the page &amp;quot;Alveo U280 Package File Downloads&amp;quot;, click on the button &amp;quot;Archive&amp;quot; in the &amp;quot;Tool Version&amp;quot; line.&amp;lt;br&amp;gt;This will expand showing the &amp;quot;2019.2&amp;quot; version button: click on it and leave selected &amp;quot;XDMA&amp;quot; as &amp;quot;Platform Type&amp;quot; and &amp;quot;x86_64&amp;quot; as &amp;quot;Architecture&amp;quot;.&amp;lt;br&amp;gt;Finally, select the &amp;quot;Operating System&amp;quot; for which you want to download the package (currently either &amp;quot;RHEL/CentOS&amp;quot; or &amp;quot;Ubuntu&amp;quot;).&amp;lt;br&amp;gt;For example, when selecting &amp;quot;RHEL/CentOS&amp;quot;, &amp;quot;OS Version&amp;quot; will appear: select &amp;quot;7.x&amp;quot; and a frame will appear below, named &amp;quot;Download Installer for Alveo U280&amp;quot;.&amp;lt;br&amp;gt;Select the choice numer 3 (Download the Development Target Platform): the file to download will be named xilinx-u280-xdma-dev-201920.1-2699728.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warning&amp;#039;&amp;#039;&amp;#039;: the Xilinx FPGA shell used to generate the bitstream must be version 201920.1 (XDMA).&amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, this shell version must also be the one installed on the Xilinx Alveo U280 FPGA board which is used to run the accelerated flow application.&amp;lt;br&amp;gt;&lt;br /&gt;
In principle, the shell version can be changed to a different one (typically a newer one), but the bitstream generation process may fail or generate sub-performing bitstreams (e.g. in case the shell allocates the static resources differently than the one used currently), and changes may be required to the makefiles and other code in the FPGA repository.&lt;br /&gt;
&lt;br /&gt;
= Downloading =&lt;br /&gt;
&lt;br /&gt;
Download the FPGA repository (read-only) by doing:&lt;br /&gt;
    git clone git://github.com/OPM/FPGA.git&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
&lt;br /&gt;
After having installed the Xilinx tools and downloaded the FPGA repository, the following steps are needed to generate the bitstream:&lt;br /&gt;
&lt;br /&gt;
* setup the Xilinx Vitis environment, e.g.:&lt;br /&gt;
    source &amp;lt;path to the Xilinx Vitis base directory&amp;gt;/Vitis/2019.2/settings64.sh&lt;br /&gt;
* setup the Xilinx XRT environment, e.g.:&lt;br /&gt;
    source &amp;lt;path to the Xilinx XRT base directory&amp;gt;/source.sh&lt;br /&gt;
* change to the implementation directory and run:&lt;br /&gt;
    cd &amp;lt;path to the FPGA repository base directory&amp;gt;/linearalgebra/ilu0bicgstab/xilinx/alveo_u280/vitis_20192/HW-implementation&lt;br /&gt;
    make bitstream&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039;: in case the Xilinx board package has been installed in a path different than the default one (/opt/xilinx/platforms/xilinx_u280_xdma_201920_1/xilinx_u280_xdma_201920_1.xsa), use the variable &amp;#039;&amp;#039;&amp;#039;PLATFORM_XSA&amp;#039;&amp;#039;&amp;#039; to change its path, e.g.:&lt;br /&gt;
    make PLATFORM_XSA=/path/to/xilinx_u280_xdma_201920_1.xsa bitstream&lt;br /&gt;
&lt;br /&gt;
After the last command finishes successfully (it may take several hours), the following files, among others, will be present in the implementation directory:&lt;br /&gt;
* bicgstab_kernel.xclbin (the bitstream file)&lt;br /&gt;
* bicgstab_kernel.xclbin.info (a text file with a summary of the current bitstream implementation results)&lt;br /&gt;
&lt;br /&gt;
Typically, the bitstream generation process will be mainly constrained by the CPU&amp;#039;s cores maximum frequency (the tools don&amp;#039;t always use multi-threading), the local storage speed and the amount of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
As an example, the bitstream generation flow has been tested by using an host running with CentOS 7.9 (x86_64), an AMD Ryzen 9 3950X CPU, 64 GB of RAM and a fast RAID5 disk configuration.&amp;lt;br&amp;gt;&lt;br /&gt;
The whole generation process took around 3 hours and used around 4 GB of disk space.&lt;br /&gt;
&lt;br /&gt;
Finally, this command can be used to completely clean up the result of a previous implementation; this will &amp;#039;&amp;#039;&amp;#039;delete&amp;#039;&amp;#039;&amp;#039; also the &amp;#039;&amp;#039;&amp;#039;generated bitstream&amp;#039;&amp;#039;&amp;#039;, so &amp;#039;&amp;#039;&amp;#039;use with care!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    make clean_all&lt;br /&gt;
&lt;br /&gt;
= Using the bitstream =&lt;br /&gt;
&lt;br /&gt;
To use the bitstream, copy the file &amp;#039;&amp;#039;&amp;#039;bicgstab_kernel.xclbin&amp;#039;&amp;#039;&amp;#039; on the host where the FPGA board is installed.&amp;lt;br&amp;gt;&lt;br /&gt;
Please refer to the &amp;quot;Install Guide&amp;quot; in [https://www.xilinx.com/products/boards-and-kits/alveo/u280.html#gettingStarted this page] for documentation regarding the installation and setup of the Xilinx Alveo U280 board.&amp;lt;br&amp;gt;&lt;br /&gt;
The XSA shell installed on the board must be the same specified in the [[#Prerequisites]] section.&amp;lt;br&amp;gt;&lt;br /&gt;
It may also be possible to use a cloud service provider that makes available nodes with the Alveo U280 board instead of an on-premises host. Please check the [https://www.xilinx.com/products/boards-and-kits/alveo.html Alveo pages] for more info about this option.&lt;br /&gt;
&lt;br /&gt;
Moreover, you&amp;#039;ll need to use a Flow simulator binary file compiled with FPGA support enabled.&amp;lt;br&amp;gt;&lt;br /&gt;
The current source code for the Flow simulator (still under review at the moment of writing) contains modifications to enable the Xilinx Alveo board (see [https://github.com/OPM/opm-simulators/pull/2998 PR #2998], [https://github.com/OPM/opm-simulators opm-simulators]).&lt;br /&gt;
&lt;br /&gt;
The host containing the FPGA board should be already properly setup (e.g. the proper drivers and the Xilinx XRT must be installed and setup).&amp;lt;br&amp;gt;&lt;br /&gt;
Then, the following command line parameters can be used to run flow with the FPGA:&lt;br /&gt;
    --accelerator-mode=fpga&lt;br /&gt;
    --fpga-bitstream=/path/to/bicgstab_kernel.xclbin&lt;br /&gt;
    --matrix-add-well-contributions=true                    # required for FPGA&lt;br /&gt;
    --opencl-ilu-reorder=[level_scheduling|graph_coloring]  # optional: the default will be &amp;quot;level_scheduling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
An example command line to run flow with the FPGA accelerator is (set the proper paths before running it!):&lt;br /&gt;
    /path/to/flow /path/to/opm-tests/norne/NORNE_ATW2013.DATA \&lt;br /&gt;
     --accelerator-mode=fpga \&lt;br /&gt;
     --fpga-bitstream=/path/to/bicgstab_kernel.xclbin \&lt;br /&gt;
     --matrix-add-well-contributions=true \&lt;br /&gt;
     --threads-per-process=8 \&lt;br /&gt;
     --output-dir=./output_norne_fpga&lt;br /&gt;
&lt;br /&gt;
=== Notes about performance measurements ===&lt;br /&gt;
&lt;br /&gt;
In order to work with flow, the FPGA must be programmed with the proper bitstream before it makes available the solver kernel functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
This is done automatically by flow when it&amp;#039;s run with the proper command line parameters as shown in the previous section.&amp;lt;br&amp;gt;&lt;br /&gt;
However, when running flow for the first time after the host is started (or if the FPGA has been previously programmed with a different bitstream than the solver), the bitstream will be programmed into the FPGA, and this may take around 6 seconds, thus adding overhead to the total execution time.&amp;lt;br&amp;gt;&lt;br /&gt;
The FPGA programming is not needed for successive executions of flow, because the Xilinx runtime (XRT) will recognize that the FPGA is already programmed with the proper bitstream, and there will be no overhead on the total execution time.&amp;lt;br&amp;gt;&lt;br /&gt;
Hence, when interested in checking FPGA performance, it is suggested to use &amp;#039;&amp;#039;&amp;#039;one&amp;#039;&amp;#039;&amp;#039; of the following options before executing the tests:&lt;br /&gt;
* run flow in FPGA mode with a small dataset (e.g., SPE1CASE1.DATA found in opm-tests/spe1/): this will load the bitstream and make it available;&lt;br /&gt;
* run the Xilinx programming tool to pre-load the bitstream (xbutil is part of the Xilinx XRT package):&lt;br /&gt;
    xbutil program -p /path/to/bicgstab_kernel.xclbin   # if you have more than one FPGA boards on the host, add &amp;quot;-d&amp;lt;number&amp;gt;&amp;quot; to specify which FPGA must be programmed&lt;br /&gt;
and then proceed to run with the interesting datasets.&amp;lt;br&amp;gt;&lt;br /&gt;
Note: if you have more than one FPGA boards on the host, add &amp;quot;-d&amp;lt;device number&amp;gt;&amp;quot; on the xbutil command line to specify which FPGA must be programmed. Flow will always use only the first Alveo U280 board in the host (e.g. the one with the lowest device number).&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
The FPGA acceleration is still experimental and the solver kernel may not work when the input case exceeds some internal limitations, which may not be directly connected with the input case size.&amp;lt;br&amp;gt;&lt;br /&gt;
When this happens, flow will exit with an error.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, when running with spe1/SPE10_MODEL1.DATA:&lt;br /&gt;
    [...]&lt;br /&gt;
    ERROR: decode_debuginfo_bicgstab: HW kernel was aborted because it ran for more than 2000000000 clock cycles.&lt;br /&gt;
    ERROR: detected unrecoverable FPGA error (ABRT=1,SIG=0,OVF=0).&lt;br /&gt;
    [...]&lt;br /&gt;
or, when running with norne/NORNE_ATW2013.DATA and using &amp;#039;&amp;#039;graph coloring&amp;#039;&amp;#039; instead of the default &amp;#039;&amp;#039;level scheduling&amp;#039;&amp;#039; reordering (&amp;#039;&amp;#039;level scheduling&amp;#039;&amp;#039; would work fine):&lt;br /&gt;
    [...]&lt;br /&gt;
    ERROR: Current reordering exceeds maximum number of columns per color limit: 9736/8192.&lt;br /&gt;
    ERROR: findPartitionColumns failed (-1).&lt;br /&gt;
    [...]&lt;br /&gt;
(note that the format of the error messages above may change with the evolution of the source code).&lt;br /&gt;
&lt;br /&gt;
The FPGA acceleration does not support ensemble runs, because currently there is only one solver instance on the FPGA which cannot be shared among different processes.&amp;lt;br&amp;gt;&lt;br /&gt;
Hence, the first flow process that starts using the FPGA won&amp;#039;t release it until it finishes, barring the use of the FPGA by other processes for the whole run time.&lt;br /&gt;
&lt;br /&gt;
= Additional documentation =&lt;br /&gt;
&lt;br /&gt;
For further information, please refer to this paper currently on Arxiv: [https://arxiv.org/abs/2101.01745 Hardware Acceleration of HPC Computational Flow Dynamics using HBM-enabled FPGAs]&amp;lt;br&amp;gt;&lt;br /&gt;
This paper provides an in-depth description of the ILU0-BiCGSTAB solver kernel, including some FPGA performances gathered with a slightly older version of the Flow simulator (2020.10-rc4) and a comparison with software-only and GPU implementations.&lt;br /&gt;
&lt;br /&gt;
= Reporting issues =&lt;br /&gt;
&lt;br /&gt;
Issues specific to the FPGA bitstream can be reported in the git issue tracker at:&lt;br /&gt;
    http://github.com/OPM/FPGA/issues&lt;/div&gt;</summary>
		<author><name>Gmarchiori</name></author>
	</entry>
	<entry>
		<id>https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1855</id>
		<title>FPGA setup and building</title>
		<link rel="alternate" type="text/html" href="https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1855"/>
		<updated>2021-01-21T18:03:40Z</updated>

		<summary type="html">&lt;p&gt;Gmarchiori: Changed format of the git clone command.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains instructions on how to setup, compile and use the FPGA &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; required to run the Flow simulator when compiled with the fpgaSolver enabled (ILU0-BiCGSTAB accelerated solver).&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
Using the Flow simulator with an FPGA requires the (offline) generation of a &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; file, which is loaded into the FPGA at runtime and configures it to make available a specific function, in this case the ILU0-BiCGSTAB solver.&amp;lt;br&amp;gt;&lt;br /&gt;
This generation process requires, for the kernel currently present in the FPGA repository, the installation of some Xilinx tools and an additional package to target the [https://www.xilinx.com/products/boards-and-kits/alveo/u280.html Xilinx Alveo U280 board].&amp;lt;br&amp;gt;&lt;br /&gt;
Note that, in order to generate the FPGA bitstream, there is no need for an FPGA board to be installed on the host chosen for the generation process.&lt;br /&gt;
&lt;br /&gt;
The bitstream generation has only been tested on Linux systems with CentOS 7 (7.4-7.9).&amp;lt;br&amp;gt;&lt;br /&gt;
It may however be possible to use other OS configurations (e.g. Ubuntu 16.04/18.04 as officially supported by Xilinx), but this has not been tested.&lt;br /&gt;
&lt;br /&gt;
Please refer to [https://www.xilinx.com/html_docs/xilinx2019_2/vitis_doc/aqm1532064088764.html this page] for documentation about:&lt;br /&gt;
* a list of supported OS and minimum hardware requirements in order to compile bitstreams for the Xilinx Alveo boards (Application Acceleration Development Flow)&lt;br /&gt;
* additional packages that may be required on the host (e.g. OpenCL packages, kernel headers, etc.)&lt;br /&gt;
&lt;br /&gt;
The main tools required are:&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis/2019-2.html Xilinx Vitis, version 2019.2]&amp;lt;br&amp;gt;&amp;#039;&amp;#039;&amp;#039;To download the Xilinx Vitis package, a (free) registration to the Xilinx website is required.&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;Choose a file under &amp;quot;Vitis Core Development Kit&amp;quot;, not the &amp;quot;Update 1&amp;quot; version; for example &amp;quot;Xilinx Unified Installer 2019.2: Linux Self Extracting Web Installer&amp;quot;&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/u280.html Xilinx XRT, version 2.3]&amp;lt;br&amp;gt; Note that the XRT can be used for all the Alveo board versions (not just the U280).&amp;lt;br&amp;gt;In the page &amp;quot;Alveo U280 Package File Downloads&amp;quot;, click on the button &amp;quot;Archive&amp;quot; in the &amp;quot;Tool Version&amp;quot; line.&amp;lt;br&amp;gt;This will expand showing the &amp;quot;2019.2&amp;quot; version button: click on it and leave selected &amp;quot;XDMA&amp;quot; as &amp;quot;Platform Type&amp;quot; and &amp;quot;x86_64&amp;quot; as &amp;quot;Architecture&amp;quot;.&amp;lt;br&amp;gt;Finally, select the &amp;quot;Operating System&amp;quot; for which you want to download the package (currently either &amp;quot;RHEL/CentOS&amp;quot; or &amp;quot;Ubuntu&amp;quot;).&amp;lt;br&amp;gt;For example, when selecting &amp;quot;RHEL/CentOS&amp;quot;, &amp;quot;OS Version&amp;quot; will appear: select &amp;quot;7.x&amp;quot; and a frame will appear below, named &amp;quot;Download Installer for Alveo U280&amp;quot;.&amp;lt;br&amp;gt;Select the choice number 1 (Download the Xilinx Runtime): the file to download will be named xrt_201920.2.3.1301_7.4.1708-xrt.rpm&lt;br /&gt;
&lt;br /&gt;
The additional package needed to target the Xilinx Alveo U280 board is:&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/u280.html Development Target Platform, version 201920.1]&amp;lt;br&amp;gt;In the page &amp;quot;Alveo U280 Package File Downloads&amp;quot;, click on the button &amp;quot;Archive&amp;quot; in the &amp;quot;Tool Version&amp;quot; line.&amp;lt;br&amp;gt;This will expand showing the &amp;quot;2019.2&amp;quot; version button: click on it and leave selected &amp;quot;XDMA&amp;quot; as &amp;quot;Platform Type&amp;quot; and &amp;quot;x86_64&amp;quot; as &amp;quot;Architecture&amp;quot;.&amp;lt;br&amp;gt;Finally, select the &amp;quot;Operating System&amp;quot; for which you want to download the package (currently either &amp;quot;RHEL/CentOS&amp;quot; or &amp;quot;Ubuntu&amp;quot;).&amp;lt;br&amp;gt;For example, when selecting &amp;quot;RHEL/CentOS&amp;quot;, &amp;quot;OS Version&amp;quot; will appear: select &amp;quot;7.x&amp;quot; and a frame will appear below, named &amp;quot;Download Installer for Alveo U280&amp;quot;.&amp;lt;br&amp;gt;Select the choice numer 3 (Download the Development Target Platform): the file to download will be named xilinx-u280-xdma-dev-201920.1-2699728.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warning&amp;#039;&amp;#039;&amp;#039;: the Xilinx FPGA shell used to generate the bitstream must be version 201920.1 (XDMA).&amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, this shell version must also be the one installed on the Xilinx Alveo U280 FPGA board which is used to run the accelerated flow application.&amp;lt;br&amp;gt;&lt;br /&gt;
In principle, the shell version can be changed to a different one (typically a newer one), but the bitstream generation process may fail or generate sub-performing bitstreams (e.g. in case the shell allocates the static resources differently than the one used currently), and changes may be required to the makefiles and other code in the FPGA repository.&lt;br /&gt;
&lt;br /&gt;
= Downloading =&lt;br /&gt;
&lt;br /&gt;
Download the FPGA repository (read-only) by doing:&lt;br /&gt;
    git clone git://github.com/OPM/FPGA.git&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
&lt;br /&gt;
After having installed the Xilinx tools and downloaded the FPGA repository, the following steps are needed to generate the bitstream:&lt;br /&gt;
&lt;br /&gt;
* setup the Xilinx Vitis environment, e.g.:&lt;br /&gt;
    source &amp;lt;path to the Xilinx Vitis base directory&amp;gt;/Vitis/2019.2/settings64.sh&lt;br /&gt;
* setup the Xilinx XRT environment, e.g.:&lt;br /&gt;
    source &amp;lt;path to the Xilinx XRT base directory&amp;gt;/source.sh&lt;br /&gt;
* change to the implementation directory and run:&lt;br /&gt;
    cd &amp;lt;path to the FPGA repository base directory&amp;gt;/linearalgebra/ilu0bicgstab/xilinx/alveo_u280/vitis_20192/HW-implementation&lt;br /&gt;
    make bitstream&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039;: in case the Xilinx board package has been installed in a path different than the default one (/opt/xilinx/platforms/xilinx_u280_xdma_201920_1/xilinx_u280_xdma_201920_1.xsa), use the variable &amp;#039;&amp;#039;&amp;#039;PLATFORM_XSA&amp;#039;&amp;#039;&amp;#039; to change its path, e.g.:&lt;br /&gt;
    make PLATFORM_XSA=/path/to/xilinx_u280_xdma_201920_1.xsa bitstream&lt;br /&gt;
&lt;br /&gt;
After the last command finishes successfully (it may take several hours), the following files, among others, will be present in the implementation directory:&lt;br /&gt;
* bicgstab_kernel.xclbin (the bitstream file)&lt;br /&gt;
* bicgstab_kernel.xclbin.info (a text file with a summary of the current bitstream implementation results)&lt;br /&gt;
&lt;br /&gt;
Typically, the bitstream generation process will be mainly constrained by the CPU&amp;#039;s cores maximum frequency (the tools don&amp;#039;t always use multi-threading), the local storage speed and the amount of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
As an example, the bitstream generation flow has been tested by using an host running with CentOS 7.9 (x86_64), an AMD Ryzen 9 3950X CPU, 64 GB of RAM and a fast RAID5 disk configuration.&amp;lt;br&amp;gt;&lt;br /&gt;
The whole generation process took around 3 hours and used around 4 GB of disk space.&lt;br /&gt;
&lt;br /&gt;
Finally, this command can be used to completely clean up the result of a previous implementation; this will &amp;#039;&amp;#039;&amp;#039;delete&amp;#039;&amp;#039;&amp;#039; also the &amp;#039;&amp;#039;&amp;#039;generated bitstream&amp;#039;&amp;#039;&amp;#039;, so &amp;#039;&amp;#039;&amp;#039;use with care!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    make clean_all&lt;br /&gt;
&lt;br /&gt;
= Using the bitstream =&lt;br /&gt;
&lt;br /&gt;
To use the bitstream, copy the file &amp;#039;&amp;#039;&amp;#039;bicgstab_kernel.xclbin&amp;#039;&amp;#039;&amp;#039; on the host where the FPGA board is installed.&amp;lt;br&amp;gt;&lt;br /&gt;
Please refer to the &amp;quot;Install Guide&amp;quot; in [https://www.xilinx.com/products/boards-and-kits/alveo/u280.html#gettingStarted this page] for documentation regarding the installation and setup of the Xilinx Alveo U280 board.&amp;lt;br&amp;gt;&lt;br /&gt;
The XSA shell installed on the board must be the same specified in the [[#Prerequisites]] section.&amp;lt;br&amp;gt;&lt;br /&gt;
It may also be possible to use a cloud service provider that makes available nodes with the Alveo U280 board instead of an on-premises host. Please check the [https://www.xilinx.com/products/boards-and-kits/alveo.html Alveo pages] for more info about this option.&lt;br /&gt;
&lt;br /&gt;
Moreover, you&amp;#039;ll need to use a Flow simulator binary file compiled with FPGA support enabled.&amp;lt;br&amp;gt;&lt;br /&gt;
The current source code for the Flow simulator (still under review at the moment of writing) contains modifications to enable the Xilinx Alveo board (see [https://github.com/OPM/opm-simulators/pull/2998 PR #2998], [https://github.com/OPM/opm-simulators opm-simulators]).&lt;br /&gt;
&lt;br /&gt;
The host containing the FPGA board should be already properly setup (e.g. the proper drivers and the Xilinx XRT must be installed and setup).&amp;lt;br&amp;gt;&lt;br /&gt;
Then, the following command line parameters can be used to run flow with the FPGA:&lt;br /&gt;
    --accelerator-mode=fpga&lt;br /&gt;
    --fpga-bitstream=/path/to/bicgstab_kernel.xclbin&lt;br /&gt;
    --matrix-add-well-contributions=true                    # required for FPGA&lt;br /&gt;
    --opencl-ilu-reorder=[level_scheduling|graph_coloring]  # optional: the default will be &amp;quot;level_scheduling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
An example command line to run flow with the FPGA accelerator is (set the proper paths before running it!):&lt;br /&gt;
    /path/to/flow /path/to/opm-tests/norne/NORNE_ATW2013.DATA \&lt;br /&gt;
     --accelerator-mode=fpga \&lt;br /&gt;
     --fpga-bitstream=/path/to/bicgstab_kernel.xclbin \&lt;br /&gt;
     --matrix-add-well-contributions=true \&lt;br /&gt;
     --threads-per-process=8 \&lt;br /&gt;
     --output-dir=./output_norne_fpga&lt;br /&gt;
&lt;br /&gt;
=== Notes about performance measurements ===&lt;br /&gt;
&lt;br /&gt;
In order to work with flow, the FPGA must be programmed with the proper bitstream before it makes available the solver kernel functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
This is done automatically by flow when it&amp;#039;s run with the proper command line parameters as shown in the previous section.&amp;lt;br&amp;gt;&lt;br /&gt;
However, when running flow for the first time after the host is started (or if the FPGA has been previously programmed with a different bitstream than the solver), the bitstream will be programmed into the FPGA, and this may take around 6 seconds, thus adding overhead to the total execution time.&amp;lt;br&amp;gt;&lt;br /&gt;
The FPGA programming is not needed for successive executions of flow, because the Xilinx runtime (XRT) will recognize that the FPGA is already programmed with the proper bitstream, and there will be no overhead on the total execution time.&amp;lt;br&amp;gt;&lt;br /&gt;
Hence, when interested in checking FPGA performance, it is suggested to use &amp;#039;&amp;#039;&amp;#039;one&amp;#039;&amp;#039;&amp;#039; of the following options before executing the tests:&lt;br /&gt;
* run flow in FPGA mode with a small dataset (e.g., SPE1CASE1.DATA found in opm-tests/spe1/): this will load the bitstream and make it available;&lt;br /&gt;
* run the Xilinx programming tool to pre-load the bitstream (xbutil is part of the Xilinx XRT package):&lt;br /&gt;
    xbutil program -p /path/to/bicgstab_kernel.xclbin   # if you have more than one FPGA boards on the host, add &amp;quot;-d&amp;lt;number&amp;gt;&amp;quot; to specify which FPGA must be programmed&lt;br /&gt;
and then proceed to run with the interesting datasets.&amp;lt;br&amp;gt;&lt;br /&gt;
Note: if you have more than one FPGA boards on the host, add &amp;quot;-d&amp;lt;device number&amp;gt;&amp;quot; on the xbutil command line to specify which FPGA must be programmed. Flow will always use only the first Alveo U280 board in the host (e.g. the one with the lowest device number).&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
The FPGA acceleration is still experimental and the solver kernel may not work when the input case exceeds some internal limitations, which may not be directly connected with the input case size.&amp;lt;br&amp;gt;&lt;br /&gt;
When this happens, flow will exit with an error.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, when running with spe1/SPE10_MODEL1.DATA:&lt;br /&gt;
    [...]&lt;br /&gt;
    ERROR: decode_debuginfo_bicgstab: HW kernel was aborted because it ran for more than 2000000000 clock cycles.&lt;br /&gt;
    ERROR: detected unrecoverable FPGA error (ABRT=1,SIG=0,OVF=0).&lt;br /&gt;
    [...]&lt;br /&gt;
or, when running with norne/NORNE_ATW2013.DATA and using &amp;#039;&amp;#039;graph coloring&amp;#039;&amp;#039; instead of the default &amp;#039;&amp;#039;level scheduling&amp;#039;&amp;#039; reordering (&amp;#039;&amp;#039;level scheduling&amp;#039;&amp;#039; would work fine):&lt;br /&gt;
    [...]&lt;br /&gt;
    ERROR: Current reordering exceeds maximum number of columns per color limit: 9736/8192.&lt;br /&gt;
    ERROR: findPartitionColumns failed (-1).&lt;br /&gt;
    [...]&lt;br /&gt;
(note that the format of the error messages above may change with the evolution of the source code).&lt;br /&gt;
&lt;br /&gt;
The FPGA acceleration does not support ensemble runs, because currently there is only one solver instance on the FPGA which cannot be shared among different processes.&amp;lt;br&amp;gt;&lt;br /&gt;
Hence, the first flow process that starts using the FPGA won&amp;#039;t release it until it finishes, barring the use of the FPGA by other processes for the whole run time.&lt;br /&gt;
&lt;br /&gt;
= Reporting issues =&lt;br /&gt;
&lt;br /&gt;
Issues specific to the FPGA bitstream can be reported in the git issue tracker at:&lt;br /&gt;
    http://github.com/OPM/FPGA/issues&lt;/div&gt;</summary>
		<author><name>Gmarchiori</name></author>
	</entry>
	<entry>
		<id>https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1854</id>
		<title>FPGA setup and building</title>
		<link rel="alternate" type="text/html" href="https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1854"/>
		<updated>2021-01-21T17:47:38Z</updated>

		<summary type="html">&lt;p&gt;Gmarchiori: First version of the page completed.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains instructions on how to setup, compile and use the FPGA &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; required to run the Flow simulator when compiled with the fpgaSolver enabled (ILU0-BiCGSTAB accelerated solver).&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
&lt;br /&gt;
Using the Flow simulator with an FPGA requires the (offline) generation of a &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; file, which is loaded into the FPGA at runtime and configures it to make available a specific function, in this case the ILU0-BiCGSTAB solver.&amp;lt;br&amp;gt;&lt;br /&gt;
This generation process requires, for the kernel currently present in the FPGA repository, the installation of some Xilinx tools and an additional package to target the [https://www.xilinx.com/products/boards-and-kits/alveo/u280.html Xilinx Alveo U280 board].&amp;lt;br&amp;gt;&lt;br /&gt;
Note that, in order to generate the FPGA bitstream, there is no need for an FPGA board to be installed on the host chosen for the generation process.&lt;br /&gt;
&lt;br /&gt;
The bitstream generation has only been tested on Linux systems with CentOS 7 (7.4-7.9).&amp;lt;br&amp;gt;&lt;br /&gt;
It may however be possible to use other OS configurations (e.g. Ubuntu 16.04/18.04 as officially supported by Xilinx), but this has not been tested.&lt;br /&gt;
&lt;br /&gt;
Please refer to [https://www.xilinx.com/html_docs/xilinx2019_2/vitis_doc/aqm1532064088764.html this page] for documentation about:&lt;br /&gt;
* a list of supported OS and minimum hardware requirements in order to compile bitstreams for the Xilinx Alveo boards (Application Acceleration Development Flow)&lt;br /&gt;
* additional packages that may be required on the host (e.g. OpenCL packages, kernel headers, etc.)&lt;br /&gt;
&lt;br /&gt;
The main tools required are:&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vitis/2019-2.html Xilinx Vitis, version 2019.2]&amp;lt;br&amp;gt;&amp;#039;&amp;#039;&amp;#039;To download the Xilinx Vitis package, a (free) registration to the Xilinx website is required.&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;Choose a file under &amp;quot;Vitis Core Development Kit&amp;quot;, not the &amp;quot;Update 1&amp;quot; version; for example &amp;quot;Xilinx Unified Installer 2019.2: Linux Self Extracting Web Installer&amp;quot;&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/u280.html Xilinx XRT, version 2.3]&amp;lt;br&amp;gt; Note that the XRT can be used for all the Alveo board versions (not just the U280).&amp;lt;br&amp;gt;In the page &amp;quot;Alveo U280 Package File Downloads&amp;quot;, click on the button &amp;quot;Archive&amp;quot; in the &amp;quot;Tool Version&amp;quot; line.&amp;lt;br&amp;gt;This will expand showing the &amp;quot;2019.2&amp;quot; version button: click on it and leave selected &amp;quot;XDMA&amp;quot; as &amp;quot;Platform Type&amp;quot; and &amp;quot;x86_64&amp;quot; as &amp;quot;Architecture&amp;quot;.&amp;lt;br&amp;gt;Finally, select the &amp;quot;Operating System&amp;quot; for which you want to download the package (currently either &amp;quot;RHEL/CentOS&amp;quot; or &amp;quot;Ubuntu&amp;quot;).&amp;lt;br&amp;gt;For example, when selecting &amp;quot;RHEL/CentOS&amp;quot;, &amp;quot;OS Version&amp;quot; will appear: select &amp;quot;7.x&amp;quot; and a frame will appear below, named &amp;quot;Download Installer for Alveo U280&amp;quot;.&amp;lt;br&amp;gt;Select the choice number 1 (Download the Xilinx Runtime): the file to download will be named xrt_201920.2.3.1301_7.4.1708-xrt.rpm&lt;br /&gt;
&lt;br /&gt;
The additional package needed to target the Xilinx Alveo U280 board is:&lt;br /&gt;
* [https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/alveo/u280.html Development Target Platform, version 201920.1]&amp;lt;br&amp;gt;In the page &amp;quot;Alveo U280 Package File Downloads&amp;quot;, click on the button &amp;quot;Archive&amp;quot; in the &amp;quot;Tool Version&amp;quot; line.&amp;lt;br&amp;gt;This will expand showing the &amp;quot;2019.2&amp;quot; version button: click on it and leave selected &amp;quot;XDMA&amp;quot; as &amp;quot;Platform Type&amp;quot; and &amp;quot;x86_64&amp;quot; as &amp;quot;Architecture&amp;quot;.&amp;lt;br&amp;gt;Finally, select the &amp;quot;Operating System&amp;quot; for which you want to download the package (currently either &amp;quot;RHEL/CentOS&amp;quot; or &amp;quot;Ubuntu&amp;quot;).&amp;lt;br&amp;gt;For example, when selecting &amp;quot;RHEL/CentOS&amp;quot;, &amp;quot;OS Version&amp;quot; will appear: select &amp;quot;7.x&amp;quot; and a frame will appear below, named &amp;quot;Download Installer for Alveo U280&amp;quot;.&amp;lt;br&amp;gt;Select the choice numer 3 (Download the Development Target Platform): the file to download will be named xilinx-u280-xdma-dev-201920.1-2699728.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warning&amp;#039;&amp;#039;&amp;#039;: the Xilinx FPGA shell used to generate the bitstream must be version 201920.1 (XDMA).&amp;lt;br&amp;gt;&lt;br /&gt;
Therefore, this shell version must also be the one installed on the Xilinx Alveo U280 FPGA board which is used to run the accelerated flow application.&amp;lt;br&amp;gt;&lt;br /&gt;
In principle, the shell version can be changed to a different one (typically a newer one), but the bitstream generation process may fail or generate sub-performing bitstreams (e.g. in case the shell allocates the static resources differently than the one used currently), and changes may be required to the makefiles and other code in the FPGA repository.&lt;br /&gt;
&lt;br /&gt;
= Downloading =&lt;br /&gt;
&lt;br /&gt;
Download the FPGA repository (read-only) by doing:&lt;br /&gt;
    git clone git@github.com:OPM/FPGA.git&lt;br /&gt;
&lt;br /&gt;
= Building =&lt;br /&gt;
&lt;br /&gt;
After having installed the Xilinx tools and downloaded the FPGA repository, the following steps are needed to generate the bitstream:&lt;br /&gt;
&lt;br /&gt;
* setup the Xilinx Vitis environment, e.g.:&lt;br /&gt;
    source &amp;lt;path to the Xilinx Vitis base directory&amp;gt;/Vitis/2019.2/settings64.sh&lt;br /&gt;
* setup the Xilinx XRT environment, e.g.:&lt;br /&gt;
    source &amp;lt;path to the Xilinx XRT base directory&amp;gt;/source.sh&lt;br /&gt;
* change to the implementation directory and run:&lt;br /&gt;
    cd &amp;lt;path to the FPGA repository base directory&amp;gt;/linearalgebra/ilu0bicgstab/xilinx/alveo_u280/vitis_20192/HW-implementation&lt;br /&gt;
    make bitstream&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039;: in case the Xilinx board package has been installed in a path different than the default one (/opt/xilinx/platforms/xilinx_u280_xdma_201920_1/xilinx_u280_xdma_201920_1.xsa), use the variable &amp;#039;&amp;#039;&amp;#039;PLATFORM_XSA&amp;#039;&amp;#039;&amp;#039; to change its path, e.g.:&lt;br /&gt;
    make PLATFORM_XSA=/path/to/xilinx_u280_xdma_201920_1.xsa bitstream&lt;br /&gt;
&lt;br /&gt;
After the last command finishes successfully (it may take several hours), the following files, among others, will be present in the implementation directory:&lt;br /&gt;
* bicgstab_kernel.xclbin (the bitstream file)&lt;br /&gt;
* bicgstab_kernel.xclbin.info (a text file with a summary of the current bitstream implementation results)&lt;br /&gt;
&lt;br /&gt;
Typically, the bitstream generation process will be mainly constrained by the CPU&amp;#039;s cores maximum frequency (the tools don&amp;#039;t always use multi-threading), the local storage speed and the amount of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
As an example, the bitstream generation flow has been tested by using an host running with CentOS 7.9 (x86_64), an AMD Ryzen 9 3950X CPU, 64 GB of RAM and a fast RAID5 disk configuration.&amp;lt;br&amp;gt;&lt;br /&gt;
The whole generation process took around 3 hours and used around 4 GB of disk space.&lt;br /&gt;
&lt;br /&gt;
Finally, this command can be used to completely clean up the result of a previous implementation; this will &amp;#039;&amp;#039;&amp;#039;delete&amp;#039;&amp;#039;&amp;#039; also the &amp;#039;&amp;#039;&amp;#039;generated bitstream&amp;#039;&amp;#039;&amp;#039;, so &amp;#039;&amp;#039;&amp;#039;use with care!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    make clean_all&lt;br /&gt;
&lt;br /&gt;
= Using the bitstream =&lt;br /&gt;
&lt;br /&gt;
To use the bitstream, copy the file &amp;#039;&amp;#039;&amp;#039;bicgstab_kernel.xclbin&amp;#039;&amp;#039;&amp;#039; on the host where the FPGA board is installed.&amp;lt;br&amp;gt;&lt;br /&gt;
Please refer to the &amp;quot;Install Guide&amp;quot; in [https://www.xilinx.com/products/boards-and-kits/alveo/u280.html#gettingStarted this page] for documentation regarding the installation and setup of the Xilinx Alveo U280 board.&amp;lt;br&amp;gt;&lt;br /&gt;
The XSA shell installed on the board must be the same specified in the [[#Prerequisites]] section.&amp;lt;br&amp;gt;&lt;br /&gt;
It may also be possible to use a cloud service provider that makes available nodes with the Alveo U280 board instead of an on-premises host. Please check the [https://www.xilinx.com/products/boards-and-kits/alveo.html Alveo pages] for more info about this option.&lt;br /&gt;
&lt;br /&gt;
Moreover, you&amp;#039;ll need to use a Flow simulator binary file compiled with FPGA support enabled.&amp;lt;br&amp;gt;&lt;br /&gt;
The current source code for the Flow simulator (still under review at the moment of writing) contains modifications to enable the Xilinx Alveo board (see [https://github.com/OPM/opm-simulators/pull/2998 PR #2998], [https://github.com/OPM/opm-simulators opm-simulators]).&lt;br /&gt;
&lt;br /&gt;
The host containing the FPGA board should be already properly setup (e.g. the proper drivers and the Xilinx XRT must be installed and setup).&amp;lt;br&amp;gt;&lt;br /&gt;
Then, the following command line parameters can be used to run flow with the FPGA:&lt;br /&gt;
    --accelerator-mode=fpga&lt;br /&gt;
    --fpga-bitstream=/path/to/bicgstab_kernel.xclbin&lt;br /&gt;
    --matrix-add-well-contributions=true                    # required for FPGA&lt;br /&gt;
    --opencl-ilu-reorder=[level_scheduling|graph_coloring]  # optional: the default will be &amp;quot;level_scheduling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
An example command line to run flow with the FPGA accelerator is (set the proper paths before running it!):&lt;br /&gt;
    /path/to/flow /path/to/opm-tests/norne/NORNE_ATW2013.DATA \&lt;br /&gt;
     --accelerator-mode=fpga \&lt;br /&gt;
     --fpga-bitstream=/path/to/bicgstab_kernel.xclbin \&lt;br /&gt;
     --matrix-add-well-contributions=true \&lt;br /&gt;
     --threads-per-process=8 \&lt;br /&gt;
     --output-dir=./output_norne_fpga&lt;br /&gt;
&lt;br /&gt;
=== Notes about performance measurements ===&lt;br /&gt;
&lt;br /&gt;
In order to work with flow, the FPGA must be programmed with the proper bitstream before it makes available the solver kernel functionality.&amp;lt;br&amp;gt;&lt;br /&gt;
This is done automatically by flow when it&amp;#039;s run with the proper command line parameters as shown in the previous section.&amp;lt;br&amp;gt;&lt;br /&gt;
However, when running flow for the first time after the host is started (or if the FPGA has been previously programmed with a different bitstream than the solver), the bitstream will be programmed into the FPGA, and this may take around 6 seconds, thus adding overhead to the total execution time.&amp;lt;br&amp;gt;&lt;br /&gt;
The FPGA programming is not needed for successive executions of flow, because the Xilinx runtime (XRT) will recognize that the FPGA is already programmed with the proper bitstream, and there will be no overhead on the total execution time.&amp;lt;br&amp;gt;&lt;br /&gt;
Hence, when interested in checking FPGA performance, it is suggested to use &amp;#039;&amp;#039;&amp;#039;one&amp;#039;&amp;#039;&amp;#039; of the following options before executing the tests:&lt;br /&gt;
* run flow in FPGA mode with a small dataset (e.g., SPE1CASE1.DATA found in opm-tests/spe1/): this will load the bitstream and make it available;&lt;br /&gt;
* run the Xilinx programming tool to pre-load the bitstream (xbutil is part of the Xilinx XRT package):&lt;br /&gt;
    xbutil program -p /path/to/bicgstab_kernel.xclbin   # if you have more than one FPGA boards on the host, add &amp;quot;-d&amp;lt;number&amp;gt;&amp;quot; to specify which FPGA must be programmed&lt;br /&gt;
and then proceed to run with the interesting datasets.&amp;lt;br&amp;gt;&lt;br /&gt;
Note: if you have more than one FPGA boards on the host, add &amp;quot;-d&amp;lt;device number&amp;gt;&amp;quot; on the xbutil command line to specify which FPGA must be programmed. Flow will always use only the first Alveo U280 board in the host (e.g. the one with the lowest device number).&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
The FPGA acceleration is still experimental and the solver kernel may not work when the input case exceeds some internal limitations, which may not be directly connected with the input case size.&amp;lt;br&amp;gt;&lt;br /&gt;
When this happens, flow will exit with an error.&amp;lt;br&amp;gt;&lt;br /&gt;
For example, when running with spe1/SPE10_MODEL1.DATA:&lt;br /&gt;
    [...]&lt;br /&gt;
    ERROR: decode_debuginfo_bicgstab: HW kernel was aborted because it ran for more than 2000000000 clock cycles.&lt;br /&gt;
    ERROR: detected unrecoverable FPGA error (ABRT=1,SIG=0,OVF=0).&lt;br /&gt;
    [...]&lt;br /&gt;
or, when running with norne/NORNE_ATW2013.DATA and using &amp;#039;&amp;#039;graph coloring&amp;#039;&amp;#039; instead of the default &amp;#039;&amp;#039;level scheduling&amp;#039;&amp;#039; reordering (&amp;#039;&amp;#039;level scheduling&amp;#039;&amp;#039; would work fine):&lt;br /&gt;
    [...]&lt;br /&gt;
    ERROR: Current reordering exceeds maximum number of columns per color limit: 9736/8192.&lt;br /&gt;
    ERROR: findPartitionColumns failed (-1).&lt;br /&gt;
    [...]&lt;br /&gt;
(note that the format of the error messages above may change with the evolution of the source code).&lt;br /&gt;
&lt;br /&gt;
The FPGA acceleration does not support ensemble runs, because currently there is only one solver instance on the FPGA which cannot be shared among different processes.&amp;lt;br&amp;gt;&lt;br /&gt;
Hence, the first flow process that starts using the FPGA won&amp;#039;t release it until it finishes, barring the use of the FPGA by other processes for the whole run time.&lt;br /&gt;
&lt;br /&gt;
= Reporting issues =&lt;br /&gt;
&lt;br /&gt;
Issues specific to the FPGA bitstream can be reported in the git issue tracker at:&lt;br /&gt;
    http://github.com/OPM/FPGA/issues&lt;/div&gt;</summary>
		<author><name>Gmarchiori</name></author>
	</entry>
	<entry>
		<id>https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1853</id>
		<title>FPGA setup and building</title>
		<link rel="alternate" type="text/html" href="https://wiki.opm-project.org/index.php?title=FPGA_setup_and_building&amp;diff=1853"/>
		<updated>2021-01-20T18:20:27Z</updated>

		<summary type="html">&lt;p&gt;Gmarchiori: Initial page, mostly a placeholder.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains instructions on how to setup, compile and use the FPGA &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; required to run the Flow simulator when compiled with the fpgaSolver enabled (ILU0-BiCGSTAB accelerated solver).&lt;br /&gt;
&lt;br /&gt;
PREREQUISITES&lt;br /&gt;
-------------&lt;br /&gt;
&lt;br /&gt;
DOWNLOADING&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
BUILDING&lt;br /&gt;
--------&lt;br /&gt;
&lt;br /&gt;
USING THE BITSTREAM&lt;br /&gt;
-------------------&lt;br /&gt;
&lt;br /&gt;
REPORTING ISSUES&lt;br /&gt;
----------------&lt;br /&gt;
&lt;br /&gt;
Issues specific to the FPGA &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; compilation process can be reported in the git issue tracker at:&lt;br /&gt;
&lt;br /&gt;
    http://github.com/OPM/FPGA/issues&lt;/div&gt;</summary>
		<author><name>Gmarchiori</name></author>
	</entry>
	<entry>
		<id>https://wiki.opm-project.org/index.php?title=Main_Page&amp;diff=1852</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.opm-project.org/index.php?title=Main_Page&amp;diff=1852"/>
		<updated>2021-01-20T18:12:50Z</updated>

		<summary type="html">&lt;p&gt;Gmarchiori: Added link to &amp;quot;FPGA setup and building&amp;quot; page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Getting started with OPM =&lt;br /&gt;
&lt;br /&gt;
We have a [[Quick Installation]] guide, showing how to install the opm-core library.&lt;br /&gt;
&lt;br /&gt;
The [[FPGA setup and building]] guide explains how to compile and use the &amp;#039;&amp;#039;bitstream&amp;#039;&amp;#039; for the FPGA-enabled Flow simulator.&lt;br /&gt;
&lt;br /&gt;
The [//opm-project.org/?page_id=43 tutorials] section contain some tutorials for programmers using opm-core.&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&amp;#039;s Guide] for information on using the wiki software.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Please note that the content of this wiki is in the process of being updated, many parts are not current!&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
= User documentation for selected programs =&lt;br /&gt;
*  [[Upscaling]]&lt;br /&gt;
* [[Black oil reservoir flow]]&lt;br /&gt;
* [[Enhanced oil recovery]]&lt;br /&gt;
* [[CO2 sequestration]]&lt;br /&gt;
&lt;br /&gt;
= Developer Information =&lt;br /&gt;
&lt;br /&gt;
=== How to contribute ===&lt;br /&gt;
&lt;br /&gt;
OPM tries to follow a development model which is as open as possible. Therefore, all development happens on [//github.com/OPM github]. The process of contributing changes is the following:&lt;br /&gt;
* Fork the module for which you want to propose a change on github&lt;br /&gt;
* Locally create a new branch of the module&amp;#039;s repository which contains your changes&lt;br /&gt;
* Push this branch to your personal github fork&lt;br /&gt;
* [https://help.github.com/articles/using-pull-requests Create a pull request]&lt;br /&gt;
* To make a pull request (PR) easy to review (and likely to be merged):&lt;br /&gt;
** A PR should contain a single feature, preferably with a unit test.&lt;br /&gt;
** It should not be too large. If you change lots of lines in lots of files in an automatic refactoring, show the script/commands you used.&lt;br /&gt;
** If you change existing code, do not mix feature changes and (large amounts of) pure formatting changes (use a separate PR for that).&lt;br /&gt;
** [http://codeinthehole.com/writing/pull-requests-and-other-good-practices-for-teams-using-github/ Some more tips on PRs]&lt;br /&gt;
* After some discussion, one of the module maintainers will either merge your changes, or your changes will be rejected with an explanation why they are a bad idea.&lt;br /&gt;
* Often, you will be asked to make some modification to the code in the PR. Do this locally, and push the changes to the same repo and branch that you used for the PR. It will be updated automatically (as a corollary, do not use this branch for unrelated development -- start a new one instead).&lt;br /&gt;
&lt;br /&gt;
=== Coding standard ===&lt;br /&gt;
&lt;br /&gt;
We do not at the moment mandate a specific coding standard, but in practice we try to have a&lt;br /&gt;
homogenous code base, and encourage all contributors to follow certain practices.&lt;br /&gt;
&lt;br /&gt;
These are listed in the [[Suggested coding standard]].&lt;br /&gt;
&lt;br /&gt;
=== List of module maintainers ===&lt;br /&gt;
&lt;br /&gt;
The current module maintainers (and their github user names) are:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;opm-common&amp;#039;&amp;#039;&amp;#039;: Atgeirr Rasmussen (@atgeirr), Bård Skaflestad (@bska), Arne Morten Kvarving (@akva2), Joakim Hove (@joakim-hove), Markus Blatt (@blattms)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;opm-material&amp;#039;&amp;#039;&amp;#039;: Tor Harald Sandve (@totto82), Atgeirr Rasmussen (@atgeirr)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;opm-grid&amp;#039;&amp;#039;&amp;#039;: Atgeirr Rasmussen (@atgeirr), Bård Skaflestad (@bska), Markus Blatt (@blattms) and Robert Klöfkorn (@dr-robertk)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;opm-models&amp;#039;&amp;#039;&amp;#039;: Tor Harald Sandve (@totto82), Atgeirr Rasmussen (@atgeirr)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;opm-simulators&amp;#039;&amp;#039;&amp;#039;: Atgeirr Rasmussen (@atgeirr), Bård Skaflestad (@bska) and Robert Klöfkorn (@dr-robertk)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;opm-tests&amp;#039;&amp;#039;&amp;#039;: Alf Birger Rustad (@alfbr)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;opm-upscaling&amp;#039;&amp;#039;&amp;#039;: Arne Morten Kvarving (@akva2)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ResInsight&amp;#039;&amp;#039;&amp;#039;: Magne Sjaastad (@magnesj) and Jacob Støren (@JacobStoren)&lt;br /&gt;
&lt;br /&gt;
=== Jenkins information ===&lt;br /&gt;
&lt;br /&gt;
[https://ci.opm-project.org Jenkins dashboard].&lt;br /&gt;
&lt;br /&gt;
Information about [[Jenkins triggers]].&lt;br /&gt;
&lt;br /&gt;
List of available [https://opm-project.org/package/nightly-xenial/pool/main/o/opm-simulators/ nightly images] generated by Jenkins. Note that in order to use it you must add the PPA containing these nightly binaries:&lt;br /&gt;
 # NOTE: you may need to sudo some of these apt commands!&lt;br /&gt;
 # Add gpg key for repository&lt;br /&gt;
 wget -qO - https://opm-project.org/package/nightly-xenial/repokey.gpg | apt-key add -&lt;br /&gt;
 # Add repo itself&lt;br /&gt;
 apt-add-repository https://opm-project.org/package/nightly-xenial&lt;br /&gt;
 # Look at available nightly versions&lt;br /&gt;
 apt-cache show libopm-simulators1-bin&lt;br /&gt;
&lt;br /&gt;
=== Static analysis tools ===&lt;br /&gt;
&lt;br /&gt;
Information about [[static analysis tools]] available.&lt;br /&gt;
&lt;br /&gt;
=== Help for release managers ===&lt;br /&gt;
&lt;br /&gt;
[[Notes for managing release 2016.10]]&lt;br /&gt;
&lt;br /&gt;
=== Data required for output and restarting ===&lt;br /&gt;
&lt;br /&gt;
[[Data for output and restart]]&lt;br /&gt;
&lt;br /&gt;
= Viewing ECLIPSE summary files =&lt;br /&gt;
Resinsight provides a state-of-the art solution for all post-processing of reservoir simulation, including plotting functionality for summary files. In addition, there is the summary application within opm-common that extracts summary vectors directly on the command line.&lt;br /&gt;
&lt;br /&gt;
== Through Python script ==&lt;br /&gt;
Håvard Berland from Statoil has contributed a Python script which can be used to display graphical plots. The script is found in opm-utilities. The script in question is a Python script and some requirements must be satisifed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt; You need the Python packages &amp;lt;tt&amp;gt;matplotlib&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;numpy&amp;lt;/tt&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt; You must compile/enable ERT Python packages when building ert. Then make sure that the path &amp;lt;tt&amp;gt;CMAKE_INSTALL_PREFIX/python&amp;lt;/tt&amp;gt; is in your &amp;lt;tt&amp;gt;PYTHONPATH&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When everything is installed the &amp;lt;tt&amp;gt;summaryplot&amp;lt;/tt&amp;gt; application can be used, it can plot mulitple realisations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
summaryplot WWCT:OP_1 CASE1.DATA CASE2.DATA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Profile.png|border]]&lt;br /&gt;
&lt;br /&gt;
== Plots ==&lt;br /&gt;
The full Norne model is run once a week, and PDF document with all the well results is generated: http://95.85.43.55/plots/&lt;/div&gt;</summary>
		<author><name>Gmarchiori</name></author>
	</entry>
</feed>