Skip to content

Resource vs Latency strategy #40

Open
@vandenBergArthur

Description

@vandenBergArthur

Hi all,
I am wondering what the difference is between the Resource and the Latency optimization strategy. Because I think my grasp of these concepts is wrong.
Initially, I thought that the Latency strategy is used to obtain the lowest latency possible, at the expense of resource usage (use more resources to obtain the lowest latency possible). To fully parallelize the model, you need a ReuseFactor = 1, and the amount of parameters in a single layer can't exceed the vivado unroll limit of 4096 (right?). But is it also possible to use a RF > 1 when using the Latency strategy? What would be the result?
On the other hand, I would think that selecting the Resource strategy would imply using the least amount of resources, at the expense of latency (use less resources, but have a higher latency).

But now comes the problem, in tutorial 7 a model is deployed on a PYNQ-Z2 board using the VivadoAccelerator backend. The strategy is not explicitly set, so by default it uses Latency. RF is also set to 64. Now to test, I changed the strategy to Resource using the following code:

for layer in ['fc1', 'fc2', 'fc3', 'output']:
    config['LayerName'][layer]['Strategy'] = 'Resource'
    config['LayerName'][layer]['ReuseFactor'] = 64

But at my surprise, it uses MORE resources than the original build (which used the Latency strategy):

================================================================
== Utilization Estimates
================================================================
* Summary: 
+-----------------+---------+-------+--------+-------+-----+
|       Name      | BRAM_18K| DSP48E|   FF   |  LUT  | URAM|
+-----------------+---------+-------+--------+-------+-----+
|DSP              |        -|      -|       -|      -|    -|
|Expression       |        -|      -|      40|   5483|    -|
|FIFO             |        -|      -|       -|      -|    -|
|Instance         |       16|     21|   17842|  41920|    -|
|Memory           |        -|      -|       -|      -|    -|
|Multiplexer      |        -|      -|       -|    128|    -|
|Register         |        0|      -|    2485|    352|    -|
+-----------------+---------+-------+--------+-------+-----+
|Total            |       16|     21|   20367|  47883|    0|
+-----------------+---------+-------+--------+-------+-----+
|Available        |      280|    220|  106400|  53200|    0|
+-----------------+---------+-------+--------+-------+-----+
|Utilization (%)  |        5|      9|      19|     90|    0|
+-----------------+---------+-------+--------+-------+-----+

Could someone please shed some light onto this? Are my intuitions of these concepts wrong?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions