Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Hale__Michael
Beginner
116 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
1 Solution
Ilya_L_Intel
Employee
116 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

1 Reply
Ilya_L_Intel
Employee
117 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

Reply