Hi Guys-
I'm thinking about implementing Cap'n Proto for hardware. I believe the
lower encoding/decoding makes this viable for acceleration communication.
There are, however, certain aspects of capnproto which are non-optimal for
hardware. It would be nearly perfect with some additions to the type system:
- A non-nullable, inline struct-like type. Basically, a C struct.
- While CPUs are excellent at pointer dereferencing and manipulation,
that hardware is relatively expensive and very often unnecessary.
Ideally,
for any fixed-size message, the individual field offsets would be
statically computable -- which they are except for structs. Groups don't
cut it since users want to reuse types. Elevating groups to a first-class
citizen would also work.
- Also, there are applications where data is and used before the
message is entirely read to prevent requiring large buffers. Structs
sitting after that message's inline (non-pointer) data would prevent
those
applications from using them or require potentially large re-ordering
buffers.
- C-style arrays
- Fixed-lenth arrays are quite common in hardware and it is, again,
very useful to be able to statically compute the offsets from the
beginning
of the containing struct. The array length will be a capnp constant.
- I know this is likely a non-starter, but generic types support for
non-pointer types and constants
- To support the two above features
I realize that I *could* implement this via annotations and then require a
custom transform or encoding of the messages, but that would have a
performance and/or hardware area impact. I really want to just DMA messages
out of host memory. I could also realize this with a custom c++ backend,
but I'd like all the languages to eventually get this support. Imagine
talking Cap'n Proto RPC directly to hardware from any language!
Is there any interest in adding these features to the spec? Are there
complications of which I'm not aware? Am I misunderstanding something
fundamental about Cap'n Proto?
~John
--
You received this message because you are subscribed to the Google Groups
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/capnproto/e9bf07d3-bfe3-42ac-8171-3b11b1e23073%40googlegroups.com.