Re: New IM: Pipe ID restrictions

From: John Stickley <john_stickley_at_.....>
Date: Thu May 25 2006 - 07:40:49 PDT
Jason,

Just some quick responses to a couple of your comments.

The rest we can perhaps discuss today.

Jason Rothfuss wrote:
> 
>>The example you raised yesterday of having loops be able to index 
>>which pipes they are accessing in each iteraction is one example of 
>>where dynamic indexing could be quite powerful.
> 
> 
> I agree that it is powerful from a general programming perspective,
> allowing the user to dynamically allocate messaging channels at
> run-time.  However, I don't know that this is practical for a hardware
> accelerator.  It may even restrict the efficiency of an implementation.

johnS:
Please understand I'm distinguishing "dynamic allocation" from
"dynamic indexing".

The former is, I agree substantially more complex to implement
in H/W and, IMHO not worth it.

The later however, still gives the programmatic flexibility but
allows a simple scheme whereby a static ceiling of indices can
be utilized. This prevents the need for dynamic allocation.

So you have the advantage of programming flexibility (dynamic
indexing) without the complexity of a fancy dynamic channel
allocation scheme.

I think we can just specify a simple "MAX_CHANNELS"
in dpi_pipes.vh that makes this easy. It can be customized by the user
on a per module basis by externally overriding it exactly as is done
with the send/receive call payload width now.

Actually, I just looked at the header and realized it already
supports this !

`ifdef SCEMI_PIPE_MAX_CHANNELS
`else
`define SCEMI_PIPE_MAX_CHANNELS 32
`endif

So, here the user can override this externally by pre-defining
SCEMI_PIPE_MAX_CHANNELS prior to inclusion.

Vendors can supply their own scemi_pipes.vh with a different
value than 32 if that is more appropriate.

This way you get the best of all worlds:

1. Complete programming flexibility with dynamic indexing
2. Vendor control of optimum default values
3. User control of values required for specific applications

One more thought that can make this even more statically
controllable at compile time:

How about we specify MAX_CHANNELS as a bit width
(i.e. ID space a power of 2) then stipulate that on the
H/W side the ID width must be limited by that value, i.e.

`ifdef SCEMI_PIPE_MAX_CHANNELS_WIDTH
`else
`define SCEMI_PIPE_MAX_CHANNELS_WIDTH 5
`endif

import "DPI-C" context function int scemi_pipe_hdl_try_receive(
     input bit [`SCEMI_PIPE_MAX_CHANNELS_WIDTH-1:0]
                pipe_id,             //  input: intra-module pipe identifier
     input  int byte_offset,         //  input: byte_offset within data array
     input  int bytes_per_element,   //  input: #bytes/element
     input  int num_elements,        //  input: #elements to be read
     output int num_elements_valid,  // output: #elements that are valid
     output bit [`SCEMI_PIPE_MAX_BITS-1:0] data, // output: data
     output bit eom );               // output: end-of-message marker flag

import "DPI-C" context function int scemi_pipe_hdl_try_send(
     input bit [`SCEMI_PIPE_MAX_CHANNELS_WIDTH-1:0]
                pipe_id,             //  input: intra-module pipe identifier
     input int byte_offset,       // input: byte_offset within data array
     input int bytes_per_element, // input: #bytes/element
     input int num_elements,      // input: #elements to be written
     input bit [`SCEMI_PIPE_MAX_BITS-1:0] data, // input: data
     input bit eom );             // input: end-of-message marker flag

This way we address your concern of static compile time limiting
but address my concern of retaining programming flexibility ?

> 
>>So what I would suggest to alleviate that is to stipulate that an 
>>implementation can put a vendor specified cap on a maximum mount of 
>>channels that are usable by an application either at the module level 
>>or a global level.
> 
> 
> I don't like the idea of a vendor cap, because this cap then becomes
> non-standard.  From the user's perspective, the standard should try to
> ensure that running a design on compliant Vendor A's version matches
> compliant Vendor B's version.

johnS:
Good point about the vendor cap. How about we just make it a
and vendor suggested/user overridable cap as suggested above ?

> 
> 
>>Alternatively this could be a value that is user specified and 
>>alterable in dpi_pipes.vh. User's could alter this value to a value 
>>that is a nice compromise between what their applications require and 
>>some practical limit stipulated by the vendor.
> 
> 
> I also don't like the idea that a user should modify a header file to
> get their design to run.  What happens when a user upgrades to a new
> version of the vendor's software?  They will have to be sure to make the
> same modification to the header file when they install the software
> package.  To me, this seems to create complexity and a dependency on an
> IT group that has access to the software installation path.

johnS:
The good news is that this can be done without modifying the
header.

The vendor can provide a "suggested cap" in the header.
The user can override on a per module basis where needed
an external `define where necessary (but probably not needed
90% of the time).

-- johnS

This email may contain material that is confidential, privileged
and/or attorney work product for the sole use of the intended
recipient.  Any review, reliance or distribution by others or
forwarding without express permission        /\
is strictly prohibited. If you are     /\   |  \
not the intended recipient please     |  \ /   |
contact the sender and delete        /    \     \
all copies.                      /\_/  K2  \_    \_
______________________________/\/            \     \
John Stickley                   \             \     \
Mgr., Acceleration Methodologies \             \________________
Mentor Graphics - MED             \_
17 E. Cedar Place                   \   john_stickley@mentor.com
Ramsey, NJ  07446                    \     Phone: (201) 818-2585
________________________________________________________________
Received on Thu May 25 07:40:35 2006

This archive was generated by hypermail 2.1.8 : Thu May 25 2006 - 07:40:42 PDT