Skip to content
Snippets Groups Projects
  1. Dec 07, 2020
  2. Dec 01, 2020
    • Oliver Breitwieser's avatar
      Add supports_full_stream_interface · 0f94e016
      Oliver Breitwieser authored
      Based on a discussion between PSP and OJB:
      
      We only want one `friend` declaration in each connection; and that is
      for `Stream`.
      
      Stream then has a nested Streamable struct, that performs that checks
      because it has a right to access private/protected members. It is
      implemented as a series of static_asserts that give a helpful error
      message indicating what failed exactly. But, that means that when we
      instantiate the default-constructed Stream it is effectively a
      declaration of intend (i.e., "we intend this connection instance to
      support the full Stream interface and hard-fail if it doesn't"). We
      cannot perform a "check" if the Connection is even supposed to fulfill
      the full Stream interface beforehand. A separate checker would require
      to also be friends with all connections..
      
      Hence, up until now we provide a manual hint
      ("has_full_stream_interface") that can be used to separate the
      connections into those that are supposed to fulfill the full stream
      interface (and are then used for in-depth hxcomm-tests) and those that
      aren't.
      
      Better:
      We should have the indication if a Connection is supposed to be
      Streamable in a separate type so that Stream only ever gets instantiated
      via its default implementation where a failure to fulfil Streamable
      should result in a compile error with helpful error message.
      
      This struct is supports_full_stream_interface.
      
      Change-Id: I402df2115373d7becfd3d5a3c76c60b3f1e94c66
      0f94e016
    • Oliver Breitwieser's avatar
      Update clang-format · 4ec333f4
      Oliver Breitwieser authored
      Change-Id: I716c34a9f48755c6b1b35fa1cddb9e2a097c6e48
      4ec333f4
  3. Nov 20, 2020
  4. Nov 09, 2020
  5. Oct 30, 2020
  6. Oct 23, 2020
  7. Oct 21, 2020
  8. Oct 07, 2020
  9. Oct 05, 2020
    • Oliver Breitwieser's avatar
      Add trace-information to ARQStream::work_receive · f32451fa
      Oliver Breitwieser authored
      * this was very useful during debugging to verify the client not choking
        on received packets
      
      * logger needs to be initialized prior to working thread starting ->
        reorder members.
      
      Change-Id: I6779ccc98a017efd4af6cfc179c9e4dbaa1847da
      f32451fa
  10. Sep 25, 2020
    • Philipp Spilger's avatar
      Implement latency hiding of encoding of messages to the FPGA · 351cc003
      Philipp Spilger authored
      * A send queue consisting of a single packet of HostARQ is used
      * full packets are sent automatically
      * this involves the implementation change, that add() is allowed
        to transfer to the hardware and commit only guarantees all
        messages added until now are sent
      * beforehand during we did never communicate to the hardware
      * no heap allocation used as part of encoding and sending in
        the connection
      * maximal encoding latency is the time to encode a single packet
      * since encoding speed at the moment is around 800MB/s, maximal
        throughput without this change is 1/(1/800 + 1/125) = 108 MB/s,
        which is only 86% of full gigabit
      * with this change if encoding is faster than the transfer,
        the full transfer bandwidth can be used
      
      Change-Id: Ic1f7d3f663197bb06a98df1025123d002f21d4b1
      351cc003
    • Philipp Spilger's avatar
      Use ranged for loop syntax in Encoder::operator() · 301be5c6
      Philipp Spilger authored
      * fix reference type of argument to visitor to be constant reference,
        which is guaranteed by the iterable being constant reference
      
      Change-Id: I0df700bd1059ee522dc589e8457588cb2aae7b03
      301be5c6
  11. Sep 24, 2020
  12. Sep 23, 2020
    • Philipp Spilger's avatar
      Optimize Encoder::operator() · 36a441c5
      Philipp Spilger authored
      * remove unecessary assertion (condition is guaranteed by operation)
      * place update to m_buffer_filling_level above block, where value
        is not needed anymore
      * speed improvement of 20% from 666MB/s to 800MB/s on RyzenHost
      
      Change-Id: Ibe4eac7ae3ef763ff2821f10f9781dee905bca57
      36a441c5
  13. Sep 21, 2020
  14. Sep 18, 2020
  15. Sep 03, 2020
  16. Sep 02, 2020
  17. Sep 01, 2020
  18. Aug 28, 2020
  19. Aug 14, 2020
    • Oliver Breitwieser's avatar
      Only run tests on connections that support it · ab65e873
      Oliver Breitwieser authored
      Not all connections will support the full direct-access interface that
      the default implementation of Stream provides but rather only the subset
      needed for execute_messages()-invocations.
      
      * Introduce `ConnectionFullStreamInterfaceVariant` that is merely a
        filtered version of the full `ConnectionVariant` with those types
        removed that do not support the full(= default) Stream interface.
      
      * Introduce `get_connection_full_stream_interface_from_env()` that gets
        the connection defined by the environment but checks if it can support
        the full_stream_interface. If so the connection is wrapped in an
        `optional`, otherwise nullopt is returned.
      
      * Tests are then skipped at runtime via `GTEST_SKIP` if the optional is
        empty.
      
      Change-Id: Ib3e196723e9c2beb8a0b00f57372f5b7cb359369
      ab65e873
    • Oliver Breitwieser's avatar
      Remove edge-case now covered by common_type · 039b1bb1
      Oliver Breitwieser authored
      Change-Id: Ifce435b71d581094bbb42b3313ac70ddc0601938
      039b1bb1
    • Oliver Breitwieser's avatar
      Streamline execute_messages implementation · f1b4e800
      Oliver Breitwieser authored
      Since we cannot use aliases for unspecified templates (see point 2.2
      here:
      http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2002/n1406.pdf),
      having templated template parameters is of less use than anticipated
      because we cannot have a single source of truth in regards to what
      sequence-like type is used throughout the stack.
      
      Solution:
      * Replace all `template <typename> class Sequence` parameters with
        helper structs that map the connection-type to return-/arugment-types
        for execute_messages.
        If we ever decide to switch from vector to some other sequence, only
        this mapping will have to be updated.
      
      * Extend `GetMessageTypes`-helper struct so that it maps
        `ConnectionParameters` to `MessageTypes` directly besides extracting
        `message_types`-argument from connection-types.
        This is important so that the RCF-interface in xiggeldy can derive its
        interface from the execute_messages-signature.
      
      Change-Id: I65045d361ad10a97e06fce3178d081c621fc02c7
      f1b4e800
    • Philipp Spilger's avatar
      Add get_unique_identifier() to connections · a31fccd0
      Philipp Spilger authored
      * For the ARQConnection the hwdb is queried for unique identifier bits
      
      Depends-On: 11708,11930,11946
      Change-Id: I39ea8ce989534bb410094a5eaf37d68e3eb438e6
      a31fccd0
  20. Aug 12, 2020
  21. Aug 11, 2020
  22. Aug 05, 2020
  23. Jul 31, 2020
  24. Jul 28, 2020
  25. Jul 24, 2020
  26. Jul 22, 2020
    • Philipp Spilger's avatar
      Cleanup Decoder · 24f43808
      Philipp Spilger authored
      * has_leading_comma(word) is now static
      * message-type specific decode_message lambda is separate templated member function
      * code common to all message-types split out of specific function -> less code size
      
      Change-Id: I8b41e4af9aa6efab88963f2fa519f36c3e3f9ed0
      24f43808
    • Philipp Spilger's avatar
      Unify test main files · c1781766
      Philipp Spilger authored
      * use logger instead of direct cout in throughputtests
      
      Change-Id: I343e55338499c827e8afab79c7ffd687413e8bdb
      c1781766
    • Philipp Spilger's avatar
      Unify hw and sim test targets · 92318655
      Philipp Spilger authored
      * use get_connection_from_env followed by a visit
      * remove unused dispatch headers
      
      Change-Id: I4b69d959443e4d1a6a57284ae8e96ffad69a6519
      92318655
    • Philipp Spilger's avatar
      Remove usage of DoubleBuffer · 221c5c7a
      Philipp Spilger authored
      * no performance drop
      * less code complexity
      
      Change-Id: I8c7513ca5cd883d5f4420a7812983356a4fdbe98
      221c5c7a
  27. Jul 21, 2020
  28. Jul 17, 2020
    • Oliver Breitwieser's avatar
      ConnectionTimeInfo: Add cereal support · 1ac1469f
      Oliver Breitwieser authored and Philipp Spilger's avatar Philipp Spilger committed
      * Add support for filling standard-layouted data types with random data
        prior to serialization so that the test fails if not all members are
        serialized.
      
      * Performed manual verification that test breaks if not all members of
        ConnectionTimeInfo are serialized.
      
      Change-Id: I0b7e257e776ec71e7b5e7131375fb069c6388dcf
      1ac1469f