Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner
68 Views

OpenVINO Generic FPGA Bitstream

Jump to solution

Hello all,

I have a couple questions regarding the differences between the various FPGA bitstreams listed on the webpage here: https://docs.openvinotoolkit.org/latest/_docs_IE_DG_supported_plugins_FPGA.html. 

For a custom architecture, must we generate a new bitstream to program the FPGA? Or would we just use the generic bitstream for this?

Is the generic bitstream akin to a softcore processor which needs only to be programmed once and we may then upload different models to the FPGA rather than programming it with a separate bitstream each time?

If so, what is the purpose of the bitstreams specific to each network architecture? Are they optimized for that specific architecture?

Best,

mikemikemike

0 Kudos

Accepted Solutions
Highlighted
Employee
68 Views

Hi,

 

At the link you provided there is a section called "Translate from Architecture to FPGA Bitstream Files". In this section you can see what is the difference between bitstreams. Some of them support NORM primitive, some of them don't. The same for CLAMP, ELU, etc.

 

Based on topology you have you select bitstream you need. E.g. if you have CLAMP layer in your topology, you must use bitstreams which support CLAMP layer. Otherwise the graph is either not supported by FPGA or can be run using HETERO plugin with fallback to CPU. And in this case we have additional memory transfers between CPU and FPGA devices.

Generic bitstream is targeted to cover most of topologies (which can have NORM, PRELU layers) while for CLAMP, ELU topologies we still have dedicated bitstreams. IF you have your own topology it's better to build custom bitstream which is optimized for particular blob sizes, etc. In this case you can have better performance than you can achieve using prebuilt bitstreams.

 

Thanks,

Ilya.

View solution in original post

0 Kudos
1 Reply
Highlighted
Employee
69 Views

Hi,

 

At the link you provided there is a section called "Translate from Architecture to FPGA Bitstream Files". In this section you can see what is the difference between bitstreams. Some of them support NORM primitive, some of them don't. The same for CLAMP, ELU, etc.

 

Based on topology you have you select bitstream you need. E.g. if you have CLAMP layer in your topology, you must use bitstreams which support CLAMP layer. Otherwise the graph is either not supported by FPGA or can be run using HETERO plugin with fallback to CPU. And in this case we have additional memory transfers between CPU and FPGA devices.

Generic bitstream is targeted to cover most of topologies (which can have NORM, PRELU layers) while for CLAMP, ELU topologies we still have dedicated bitstreams. IF you have your own topology it's better to build custom bitstream which is optimized for particular blob sizes, etc. In this case you can have better performance than you can achieve using prebuilt bitstreams.

 

Thanks,

Ilya.

View solution in original post

0 Kudos